Машина на arduino
Доброго времени суток!
И так, будучи в творческом настроении духа, моя душа решила начать творить и под руку мне попались следующие ингридиенты:
Машина на радиоуправлении с бк мотором и классической сервой
Arduino nano и модуль bluetooth hc-06
Так вот, решил я сделать управление этой машинкой через свой смартфон на андройд. Только вот беда, “интузиазм” есть, а опыта работы на ардуино - ноль
Есть у нас на сайте люди которые “могут” и хотят помочь написать скетч или хотя бы подсказать.
Нашел много инфы на просторах интеренета, но дальше чем просто управлять сервой продвинуться не могу, ибо правильно управлять регулятором просто так не получится.
Есть тут сведующие в этих делах?
Добрый день.
А чем отличаются в управлении регулятор хода и сервопривод?
Добрый день.
А чем отличаются в управлении регулятор хода и сервопривод?
Добрый. Основная проблема с тормозом и задним ходом, дать понять ардуино как правильно управлять этим эллементом
Добрый. Основная проблема с тормозом и задним ходом, дать понять ардуино как правильно управлять этим эллементом
Центр сервы (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;
}
Musgravehill
Очень интересно, большое спасибо. Вечером буду пробовать
При тесте вместо регулятора удобно использовать серву, чтобы не гонять мотор, а просто смотреть на положение качалки.
Для быстро собрать есть готовая оболочка: remotexy.com/ru/
Ребенок делает лего игрушки, я ему сделал модуль на ардуинке:
Добрый день.
А чем отличаются в управлении регулятор хода и сервопривод?
На многих регуляторах задний ход включается после тормоза. То есть вначале надо затормозить, а после уже ехать назад. Это сделано для сохранения трансмиссии. Если регулятор можно настраивать, то можно поставить режим вперед/назад без тормоза.