Машина на arduino

NBystrov
l1511:

Добрый день.
А чем отличаются в управлении регулятор хода и сервопривод?

Добрый. Основная проблема с тормозом и задним ходом, дать понять ардуино как правильно управлять этим эллементом

Musgravehill
NBystrov:

Добрый. Основная проблема с тормозом и задним ходом, дать понять ардуино как правильно управлять этим эллементом

Центр сервы (1500) = тормоз регулятора.
Полное отклонение сервы назад (0) = полный газ назад.
Полное отклонение сервы вперед (2000) = полный газ вперед.

Вот парсер serial для такой строки
var0,var1,var2,var3.var0,var1,var2,var3.var0,var1,var2,var3.
Переменные через зпт, окончание - тчк.


#include <string.h> // we'll need this for subString
#include <SoftwareSerial.h>
SoftwareSerial MODEM_serial(7, 8); // RX, TX

const char EOPmarker = '.'; //This is the end of packet marker
char serialbuf[32]; //This gives the incoming serial some room. Change it if you want a longer incoming.
#define MAX_STRING_LEN 20 // like 3 lines above, change as needed.



if (MODEM_serial.available() > 0) { //makes sure something is ready to be read
    static int bufpos = 0; //starts the buffer back at the first position in the incoming serial.read
    char inchar = MODEM_serial.read(); //assigns one byte (as serial.read()'s only input one byte at a time
    if (inchar != EOPmarker) { //if the incoming character is not the byte that is the incoming package ender
      serialbuf[bufpos] = inchar; //the buffer position in the array get assigned to the current read
      bufpos++; //once that has happend the buffer advances, doing this over and over again until the end of package marker is read.
    }
    else { //once the end of package marker has been read
      serialbuf[bufpos] = 0; //restart the buff
      bufpos = 0; //restart the position of the buff

      motionDetection_raw = atoi(subStr(serialbuf, ",", 1));
      accel_X_raw = atoi(subStr(serialbuf, ",", 2));
      accel_Y_raw = atoi(subStr(serialbuf, ",", 3));
      accel_Z_raw = atoi(subStr(serialbuf, ",", 4));

      Serial.println();
      Serial.print("md=");
      Serial.print(motionDetection_raw, DEC);
      Serial.print(" x=");
      Serial.print(accel_X_raw, DEC);
      Serial.print(" y=");
      Serial.print(accel_Y_raw, DEC);
      Serial.print(" z=");
      Serial.print(accel_Z_raw, DEC);
      Serial.println();







    }
  }

Спец.функция в главном скетче:


char* subStr (char* input_string, char *separator, int segment_number) {
  char *act, *sub, *ptr;
  static char copy[MAX_STRING_LEN];
  int i;
  strcpy(copy, input_string);
  for (i = 1, act = copy; i <= segment_number; i++, act = NULL) {
    sub = strtok_r(act, separator, &ptr);
    if (sub == NULL) break;
  }
  return sub;
}
NBystrov

Musgravehill
Очень интересно, большое спасибо. Вечером буду пробовать

Musgravehill

При тесте вместо регулятора удобно использовать серву, чтобы не гонять мотор, а просто смотреть на положение качалки.

AlexeyOleynikov

Для быстро собрать есть готовая оболочка: remotexy.com/ru/
Ребенок делает лего игрушки, я ему сделал модуль на ардуинке:

kabuum
l1511:

Добрый день.
А чем отличаются в управлении регулятор хода и сервопривод?

На многих регуляторах задний ход включается после тормоза. То есть вначале надо затормозить, а после уже ехать назад. Это сделано для сохранения трансмиссии. Если регулятор можно настраивать, то можно поставить режим вперед/назад без тормоза.