Monster moto shield
- Войдите на сайт для отправки комментариев
Пт, 04/01/2019 - 08:57
Доброго времени суток форумчане !Собрал приемник и передатчик на nrf24l01 .Схема передатчика стандартная к аналоговым пинам подключен джостик с которого передаются данные .Код передатчика :
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t pipe = 0xF0F1F2F3F4LL; // указываем идентификатор передачи, "труба" RF24 radio(9, 10); // указываем пины CE и CSN void setup(){ Serial.begin(9600); // открываем последовательный порт radio.begin(); delay(2); radio.setChannel(95); // выбираем канал от 0 до 126 – они имеют разную частоту radio.setDataRate(RF24_1MBPS); radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); // открываем трубу на передачу. } void loop() { int Val[2]; //массив для передачи данных Val[0] = analogRead(4); //считываем значение с джойстиков в масив Val[1] = analogRead(3); radio.write(&Val, sizeof(Val)); // отправляем масив и указываем сколько байт пакет // Выводим таблицу с информацией о текущих значениях портов Serial.print("X\t\t"); Serial.println(Val[0]); Serial.print("Y\t\t"); Serial.println(Val[1]); Serial.println("--------"); delay(50); }
На стороне приемника стоит nrf24l01 + Monster moto shield подключенный по следущей схеме:
Код приемника :
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> int y = 0; int x = 0; const uint64_t pipe = 0xF0F1F2F3F4LL; // указываем идентификатор передачи, "труба" RF24 radio(9, 10); // указываем пины CE и CSN void setup(){ Serial.begin(9600); // открываем последовательный порт //MOTOR 1 pinMode(4, OUTPUT); //все пины устанавливаем как выход pinMode(3, OUTPUT); pinMode(6, OUTPUT); //MOTOR 1 pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(5, OUTPUT); //все пины устанавливаем на логический ноль - моторы стоят digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(3, LOW); radio.begin(); delay(2); radio.setChannel(95); // выбираем канал от 0 до 126 – они имеют разную частоту radio.setDataRate(RF24_1MBPS); radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1,pipe); // открываем первую трубу с идентификатором "pipe" radio.startListening(); // включаем приемник, начинаем слушать трубу } void loop() { int Val[2]; //масив значений для приема if (radio.available()) { // проверяем не пришло ли что в буфер. radio.read(&Val, sizeof(Val)); // читаем данные, указываем сколько байт читать // Выводим таблицу с информацией о текущих значениях портов Serial.print("X\t\t"); Serial.println(Val[0]); Serial.print("Y\t\t"); Serial.println(Val[1]); Serial.println("--------"); delay(50); if (Val[0] < 1020 && Val[0] > 524) { y = map (Val[0],524,1020,0,255); digitalWrite(7, HIGH); digitalWrite(8, LOW); //вращение вперед МОТОР1! analogWrite(5, x); } if (Val[1] < 1020 && Val[1] > 524) { x = map (Val[1],524,1020,0,255); digitalWrite(3, HIGH); digitalWrite(4, LOW); //вращение вперед МОТОР2! analogWrite(6, x); } if (Val[0] < 500 && Val[0] > 0) { y = map (Val[0],500,0,0,255); digitalWrite(8, HIGH); digitalWrite(7, LOW); //вращение назад МОТОР2! analogWrite(5, x); } if (Val[1] < 500 && Val[1] > 0) { x = map (Val[1],500,0,0,255); digitalWrite(4, HIGH); digitalWrite(3, LOW); //вращение назад МОТОР2! analogWrite(6, x); } } }
Данные с передатчика идут ,но работает только 1 мотор . Я так понимаю проблема в коде ,потому как если заливать стандартный скетч то оба мотора крутятся .В русском сегменте интернета очень мало информации по этому шилду, поэтому если кто натолкнет в каком направлении копать и где можно "подсмотреть" код .
Распиновка самого шилда.В 1 сообщение почему-то добавить не могу...
А что у ас за digitalWrite на пин 3, который сконфигурирован как INPUT и к шилду не подключен?
andriano
Пин 3 от ардуино уходит на 9 пин шилда . А вот где он сконфигурирован как INPUT я что-то в коде не увидел...
arduino pin >> monster pin
3 >> 9
4 >>4
6 pwm>> 6 pwm
7 >>7
8 >>8
5 pwm >>5 pwm
Проблема решилась на аналоговых пинах А0 и А1 надо было подавать состояние чтоб открыть 1,2 мотор .
Код приемника мож кому пригодится :
Доброго времени суток, MakcuMYM. Очень заинтересовал ваш проект и хотел бы его повторить, как вариант для вас эта тема скорее всего уже не актуальна но все же был бы вам премного благодарен если бы вы могли скинуть подробную схему передатчика и приёмника. Заранее благодарен!
И вам доброго времени суток!Схему передатчика можете глянуть тут _https://howtomechatronics.com/projects/diy-arduino-rc-transmitter/ (думаю не сочтут за рекламу ) . Моя схема почти не чем не отличается от выше предложенной автором ,кроме как убран акселерометр и 2 выключателя .
Где-то валялись печатки приемника и передатчика в таком варианте (если вам подойдет могу выслать,как найду ):
Разводил сам так что за качество сразу извеняюсь ..
Ох было бы шикарно можно в принципе и на почту, в любом случае интересует сама схема подключения монстра и nrf24l01, к портам ардуино, так как планирую собирать серьёзный катерок более подходящего дешёвого драйвера моторов не нашёл ( так же будет подключена серва для руля, и серва для управляемого фонаря) так как новичек меня немного затруднила сборка самого пульта. После штудирования интернета перепробовал многое, наткнулся на ваш пост и он больше всего удовлетворяет мои потребности. Заранее благодарен вам за помощь, надеюсь пост не заблокируют за почтовый адрес nickovsvik@gmail.com
Для пульта планирую использовать клон arduino pro mini 3.3v так как имеется li-po вместо привычных многим 18650,ну и для стабилизации nrf24l01 "1117" вместо конденсатора, то что есть в наличии то и использовать. А уже на приёмнике клон arduino uno. Начать проэкт планирую месяца через три не раньше) специфика работы не позволяет. Ещё раз спасибо за помощь