Робот на Ардуино и nrf24 l01
- Войдите на сайт для отправки комментариев
Сб, 30/04/2016 - 10:58
Здравствуйте сделал код, но некоректно работает. Посмотрите может что я упустил. Это черновой вариант, по этому не обращайте внимания на то, что закоментировано. Сервоприводы работают нормально, а вот двигатели нет. Спасибо за желание помочь.
Передатчик на Нано:
// Необходимо установить библиотеку для радиомодуля nRF24 #include <SPI.h> #include "RF24.h" RF24 radio(9,10);// подключение радиомодуля: 9 пин Ардуино на CE радиомодуля, 10 пин Ардуино на CSN радиомодуля, 13 пин Ардуино на SCK, 11 пин Ардуино на MOSI //// 12 пин Ардуино на MISO, питание 3,3 Вольта, Землю от Ардуино соедениеть с Землей от радиомодуля. const uint64_t pipe = 0xF0F0F0F000LL; int msg[2]; int potpin_1 = A0; //подключение джойстика: A0 на Ардуино подключаем к VRx на джойстике, питание всех джойстиков берем с Ардуино +5 и GND int val_1; int potpin_2 = A1; //A1 на Ардуино подключаем к VRy на джойстике int val_2; int potpin_3 = A2; //A2 на Ардуино подключаем к VRx на джойстике int val_3; int potpin_4 = A4; //A3 на Ардуино подключаем к VRy на джойстике int val_4; int potpin_5 = A3; //повороты камеры. подключение джойстика: A0 на Ардуино подключаем к VRx на джойстике, питание всех джойстиков берем с Ардуино +5 и GND int val_5; int potpin_6 = A5; //повороты камеры. A1 на Ардуино подключаем к VRy на джойстике int val_6; int potpin_7 = A6; //A2 на Ардуино подключаем к VRx на джойстике int val_7; int potpin_8 = A7; //A3 на Ардуино подключаем к VRy на джойстике int val_8; void setup(void){ radio.begin(); radio.openWritingPipe(pipe); Serial.begin(9600); } void loop() { val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 10),msg[0] = val_1,radio.write(msg, 1); val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 11, 21),msg[0] = val_2,radio.write(msg, 1); val_3 = analogRead(potpin_3),val_3 = map(val_3, 0, 1023, 22, 32),msg[0] = val_3,radio.write(msg, 1); val_4 = analogRead(potpin_4),val_4 = map(val_4, 0, 1023, 33, 43),msg[0] = val_4,radio.write(msg, 1); val_5 = analogRead(potpin_5),val_5 = map(val_5, 0, 1023, 44, 54),msg[0] = val_5,radio.write(msg, 1); val_6 = analogRead(potpin_6),val_6 = map(val_6, 0, 1023, 55, 65),msg[0] = val_6,radio.write(msg, 1); val_7 = analogRead(potpin_7),val_7 = map(val_7, 0, 1023, 0, 127),msg[1] = val_7,radio.write(msg, 2); val_8 = analogRead(potpin_8),val_8 = map(val_8, 0, 1023, 128, 255),msg[1] = val_8,radio.write(msg, 2); }
Приемник на Мега:
//Внимание!!! Включать первым необходимо передатчик, а затем приемник. // Необходимо установить библиотеку для радиомодуля nRF24. #include <Servo.h> #include <SPI.h> #include "RF24.h" Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6; Servo servo7; RF24 radio(40,42); // подключение радиомодуля: 9 пин Ардуино на CE радиомодуля, 10 пин Ардуино на CSN радиомодуля, 13 пин Ардуино на SCK, 11 пин Ардуино на MOSI // 12 пин Ардуино на MISO, питание 3,3 Вольта, Землю от Ардуино соедениеть с Землей от радиомодуля. const uint64_t pipe = 0xF0F0F0F000LL; int msg[2]; int data = 0; int data1 = 0; int pos; int fspeed = 0; // forward speed int bspeed = 0; // backward speed int pfspeed = 0; // forward speed int pbspeed = 0; // backward speed // Подключение драйвера двигателя L298n для 2х левых колес const int in1 = 30; // direction pin 1 const int in2 = 28; // direction pin 2 const int ena = 3; // PWM pin to change speed const int in3 = 26; // direction pin 1 const int in4 = 24; // direction pin 2 const int enb = 2; // PWM pin to change speed4 // Подключение драйвера двигателя L298n для 2х правых колес const int in11 = 6; // direction pin 1 const int in21 = 5; // direction pin 2 const int ena1 = 7; // PWM pin to change speed const int in31 = 14; // direction pin 1 const int in41 = 15; // direction pin 2 const int enb1 = 4; // 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 pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n pinMode(in11, OUTPUT); // connection to L298n pinMode(in21, OUTPUT); // connection to L298n pinMode(ena1, OUTPUT); // connection to L298n pinMode(in31, OUTPUT); // connection to L298n pinMode(in41, OUTPUT); // connection to L298n pinMode(enb1, OUTPUT); // connection to L298n servo1.attach(8); // оранжевый от сервопривода1 на 3 пин Ардуино (приемник), питание всех сервоприводов берем с источника питания 4-5В (1 аккумулятор 18650) // если питание ардуино и питание сервоприводов разное, то необходимо соеденить минуса источников питания. servo2.attach(9); // оранжевый от сервопривода2 на 5 пин Ардуино (приемник) servo3.attach(10); // оранжевый от сервопривода3 на 9 пин Ардуино (приемник) servo4.attach(11); // оранжевый от сервопривода4 на 10 пин Ардуино (приемник) servo5.attach(12); // оранжевый от сервопривода3 на 9 пин Ардуино (приемник) servo6.attach(13); // оранжевый от сервопривода4 на 10 пин Ардуино (приемник) servo7.attach(3); // оранжевый от сервопривода4 на 10 пин Ардуино (приемник) delay(50); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); //Serial.begin(9600); } void loop() { if (radio.available())radio.read(msg, 1); if (msg[0] <=10 && msg[0] >-1)data = msg[0], pos = map(data, 0, 10, 0, 180),servo1.write(pos); if (msg[0] <=21 && msg[0] >=11)data = msg[0], pos = map(data, 11, 21, 0, 180),servo2.write(pos); if (msg[0] <=32 && msg[0] >=22)data = msg[0], pos = map(data, 22, 32, 0, 180),servo3.write(pos); if (msg[0] <=43 && msg[0] >=33)data = msg[0], pos = map(data, 33, 43, 0, 180),servo4.write(pos); if (msg[0] <=54 && msg[0] >=44)data = msg[0], pos = map(data, 44, 54, 0, 180),servo5.write(pos); if (msg[0] <=65 && msg[0] >=55)data = msg[0], pos = map(data, 55, 65, 0, 180),servo6.write(pos); if (radio.available())radio.read(msg, 2); if (msg[1] >=0 && msg[1] <=58)data1 = msg[1],bspeed = map(data1, 127, 68, 0, 255),backward(bspeed); if (msg[1] >=68 && msg[1] <=127)data1 = msg[1],fspeed = map(data1, 58, 0, 0, 255),forward(fspeed); if (msg[1] >59 && msg[1] <67)data1 = msg[1], stop(); if (msg[1] >=128 && msg[1] <=189)data1 = msg[1], pbspeed = map(data1, 255, 201, 0, 255), pbackward(pbspeed); if (msg[1] >=201 && msg[1] <=255)data1 = msg[1], pfspeed = map(data1, 189, 128, 0, 255), pforward(pfspeed); if (msg[1] >190 && msg[1] <200)data1 = msg[1], stop(); //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); analogWrite(enb, 0); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(ena1, 0); analogWrite(enb1, 0); digitalWrite(in11, LOW); digitalWrite(in21, LOW); digitalWrite(in31, LOW); digitalWrite(in41, LOW); } void forward(int fspeed) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(ena, fspeed); analogWrite(enb, fspeed); // Serial.println(in1); } void backward(int bspeed) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(ena, bspeed); analogWrite(enb, bspeed); } void pforward(int pfspeed) { digitalWrite(in11, HIGH); digitalWrite(in21, LOW); digitalWrite(in31, LOW); digitalWrite(in41, HIGH); analogWrite(ena1, pfspeed); analogWrite(enb1, pfspeed); // Serial.println(in1); } void pbackward(int pbspeed) { digitalWrite(in11, LOW); digitalWrite(in21, HIGH); digitalWrite(in31, HIGH); digitalWrite(in41, LOW); analogWrite(ena1, pbspeed); analogWrite(enb1, pbspeed); }
Здравствуйте сделал код, но некоректно работает.
В чём именно некорректность и что Вас не устраивает нам самим догадываться или объясните?