Полноприводная модель с управлением от NRF24L01
- Войдите на сайт для отправки комментариев
Всем Доброго времени суток!!!
Есть у меня полноприводная модель http://ru.aliexpress.com/item/Free-...is-Kits-with-Speed-Encoder-New/747770134.html вот такого типа, так же драйвер L298N.
Собрал я свою первую модель на управлении от блютуз (Нс-06 модуль, если кому интересно) все хорошо работало. Но мне стало интересно собрать эту же модель но на управлении от джойстика (ибо по тачскрину не удобно управлять) и на радиосвязи. Купил пару NRF24l01, полазил по всяким умным сайтам, нашел код, но он сделан под двигатель и серво, т.е двигатель приводит в движение колеса, а серва поворачивает. Мои попытки поменять его так что бы машина могла поворачивать на разности направления вращения колес потерпели неудачу. Поэтому решил попросить помощи у народа. Сам я можно сказать новичок в этом деле, немного знаю радиоэлектронику, немного программирование.
Вот код от машинки с серовой это приемник
// Необходимо установить библиотеку для радиомодуля nRF24 #include <Servo.h> #include <SPI.h> #include "RF24.h" Servo servo1; RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int data; int pos; int fspeed; // вперед speed int bspeed; // назад speed const int in1 = 2; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 5; // PWM pin to change speed void setup() { pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n servo1.attach(3); delay(50); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available())radio.read(msg, 1); if (msg[0] <127 && msg[0] >-1)data = msg[0], pos = map(data, 0, 126, 7, 47),servo1.write(pos); if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed); if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed); if (msg[0] >190 && msg[0] <200)data = msg[0], stop(); } void stop() { analogWrite(ena, 0); digitalWrite(in1, LOW); digitalWrite(in2, LOW); } void forward(int fspeed) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, fspeed); } void backward(int bspeed) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, bspeed); }
вод код передатчика (пульт)
#include <SPI.h>
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int potpin_1 = A0;
int val_1;
int potpin_2 = A1;
int val_2;
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
}
может кто поможет...
может кто поможет
вот что получилось
Машина теперь едит вперед и назад, надо тепрь сделать повороты. Поможет кто?
дык у вас один мотор, как он будет поворачивать?
дык у вас один мотор, как он будет поворачивать?
а если смещать центр тяжести? гыыы ну типа как на скейте
2пары моторов
дык у вас один мотор, как он будет поворачивать?
2пары моторов
ну теперь ну-на 2 пары кодов как то слепить
дык у вас один мотор, как он будет поворачивать?
2пары моторов
ну теперь ну-на 2 пары кодов как то слепить
что-то как-то слепить, никакой конкретики.
Вообще напряг я программиста и написали мы код, вроде кое как работает. Будем оптимизировать, а пока что промежуточный вариант выложу сюда может кому пригодиться
и приемник
Повтарю, все работает есть пару багов, нужна оптимизация
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[1] = val_1;
можно сократить до: msg[1]=analogRead(potpin_1)>>3;
киньте билу вставкой кода <Servo.h> только сверните код библы, нужно будет, откроем сами... (дополнительно -> свернуть (поставить галочку))
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[1] = val_1;
можно сократить до: msg[1]=analogRead(potpin_1)>>3;
спасибо учту
servo.h уже не надо, в моем проекты нет серво привода
странно что есть
ena но нет enb
Исправлена проблема с потерей связи. Модель продолжала ехать если терялась связь с пультам
мне кажется его (код) можно написать в 2 раза короче
еще один msg объявляет int))) где вы берете примеры не пойму
https://youtu.be/7NRhI3H-w0A
мне кажется его (код) можно написать в 2 раза короче
еще один msg объявляет int))) где вы берете примеры не пойму
все с головы, тупа методом научного подбора, ессетвено со временем будет оптимизация, сделаю корпус для пульта