Радиоуправляемая машина на arduino nrf24l01 (№1)

arduino nrf24l01 car l298Я давно хотел реализовать свою идею в виде машинки на радиоуправлении с помощью arduino и модуля nrf24l01, но все было некогда или лень. В основном было лень разбираются с модулем brf24l01, но как оказалось, вечерок или несколько, углубленного изучения статей, в основном зарубежных, доказывает что не все так сложно хотя бы на базовом уровне. Ладно поехали :D.

Ещё кое-что, № 1 в названии статьи, это не титул, а идентификационный номер в моем облаке на Яндекс.Диск, для хранения проектов. 

Нам понадобится:

Arduino — 2 шт.
Драйвер двигателя — 1 шт.
Макетная плата — 1 шт.
Джойстик — 1 шт.
Мотор и сервомотор — 1 шт.
Светодиод — 1 шт.
Модуль NRF24L01 — 2 шт.
Провода — много шт.
Дополнительное питание для мотора и сервомотора и ардуино.

Схема сборки машинки или устройство принимающие данные с пульта.

resiver_cxem

Схема сборки пульта управления

transiver_cxem

На схеме пульта управления, кнопка включения светодиодов используется которая встроена вы джойстик. Так же я использую адаптер для nrf24l01, без этого адаптера вам нужно будет припаять конденсатор на vcc и gnd.
nrf24l01

Скетч пульта (transiver)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int datos[3];
//int but=7;
Servo myservo;
int pot_x = 1;
int val_x;
void setup()
{
  pinMode(7, INPUT);
  pinMode(pot_x, INPUT);
  radio.begin();
  Serial.begin(9600);
  radio.openWritingPipe(pipe);
}

void loop()
{
  datos[0] = analogRead(0);
  datos[1] = digitalRead(7);
  val_x = analogRead(pot_x);
 // val_x = map(val_x, 0, 1023, 254, -254);
  datos[2] = val_x;
  bool ok = radio.write(datos, sizeof(datos));
  if (ok)
  {
   Serial.println(datos[0]);
    
  }
  //Serial.println(datos[1]);
  Serial.println(pot_x);

}
Скетч приемника (resiver)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
const uint64_t pipe = 0xE8E8F0F0E1LL;
#define CE_PIN 9
#define CSN_PIN 10

RF24 radio(CE_PIN, CSN_PIN);
int datos[3];
int ENB = 5;
int IN4 = 6;
int IN3 = 7;
int led = 4;
long time = 0;
long debounce = 300;
boolean ledOn = false;
boolean lastBut = HIGH;
Servo servo; //объявляем переменную servo типа Servo

void setup()
{
  radio.begin();
  Serial.begin(9600);
  radio.openReadingPipe(1, pipe);
  radio.startListening();
  pinMode(ENB, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(led, OUTPUT);
  int val_led = 0;
  servo.attach(3);
}

void loop() {
  uint8_t numero_canal;
  if ( radio.available() )
  {
    radio.read(datos, sizeof(datos));
 //   Serial.print("Analog = " );
 //   Serial.println(datos[0]);
    int val = datos[0];
    int val1;

    val1 = map(val, 0, 1023, 254, -254);

    if (val1 >= 0)
    {
      analogWrite(ENB, val1);
      digitalWrite(IN4, LOW);
      digitalWrite(IN3, HIGH);
    }
    else
    {
      val1 = abs(val1); //Инвертируем значение -1,-2,-3 и т.д

      analogWrite(ENB, val1);
      digitalWrite(IN4, HIGH);
      digitalWrite(IN3, LOW);
    }

   Serial.print("data: ");
    Serial.println(val1);
  }

  if (datos[1] == 0 && lastBut == HIGH && millis() - time > debounce) // Управление светодиодом
  {
    ledOn = !ledOn;
    lastBut = HIGH;
    time = millis();
  }
  else // Иначе,
  {
    lastBut = digitalRead(lastBut);

  }
  digitalWrite(led, ledOn);

  //int ledval = datos[1];
  //int leds=abs(ledval);
  //Serial.println(ledOn);
  //digitalWrite(led,leds);
  int val_x = datos[2];
  val_x = map(val_x, 0, 1023, 80, -100);
  //Serial.println(datos[2]);
  servo.attach(3);
  servo.write(val_x);
  Serial.println(val_x);
}

Архив с скетчами и схемами.
Облако с проектом

Теперь скажу пару слов о скетче, пока что, это рабочий вариант, без комментариев и не очень читабельно выглядит, но работает, так же пока что не добавлена функция при которой модель остановится при потере сигнала с пульта, так что будьте внимательны. Как будут добавляться дополнения к коду, вы сможете их скачать в той же папке в моем облаке, старый вариант будет за архивирован. Возможно будет установка на машинку WLtoys 959, только от нее осталось только название, но это в будущем возможно, много зависит от комментариев.

И в самом конце парочка фотографий.

arduino nrf24l01 car l298 joyStick arduino nrf24l01 car l298 modul arduino nrf24l01 car l298 RC arduino uno nrf24l01 car l298

Комментарии:

Комментарии

  • Алексей:

    Очень понравился Ваш проект. Планируете развивать его дальше? Не хватает каналов для управления различными фишками (звуковой сигнал, мигалка, сирена и т.д.)

  • Алексанрд:

    Интересный проект. Так как ребенок пошел заниматься программированием(правда лего робот)и хочется еще больше его заинтересовать,то появилось несколько вопросов. Может поможете с консультацией? 🙂

    • Задавайте, если в моих силах то отвечу )

      • Доброго дня. В скетче, помнится разкомментировал какие то строки, какие то удалил и машинка, после этого поехала. А сейчас забыл что делал, не крутится мотор.
        Забыл. На старую машинку без посторонней помощи допиливал скетч, на новую машинку забыл как делал.

      • Владимир:

        А можно по подробнее про a959 на ардуинке ?
        У меня тоже имеется такая же моделька и на ней аппа на ardyino очень интересно будет ее доробототь (у меня задействованы 2 канала) .

      • Иван:

        Здравствуйте! Подскажите, как подключать провода если я использую ардуино NANO?

  • Александр:

    Если ребенок заинтересуется, то в дальнейшем планируется установка камеры с возможностью движения вверх-вниз и вправо-влево. Интересует схема подключения двух джойстиков в пульт, кнопок как минимум четыре и экрана (какой лучше использовать экран недорогой?). Схему машинки с камерой и двумя сервами для управления камерой. Хватит ли для передачи видео nrf24l01 или дополнительно придется что то подключать?

    • Ардуино не очень сильно подходить для видео, скорее всего совсем не подходит. Вот управление камерой и самой машинкой можно сделать, а вот для трансляции видео придется использовать что то другое, например вай фай камеру транслирующую в браузер на пк, планшет, телефон. И да, маленькой нрф24л01 будем мало, в другой комнате уже может быть не уверенный сигнал, так что лучше брать с антенной.

  • Александр:

    Спасибо.

  • Александр:

    Добрый день. Заинтересовал Ваш проект. Но для моих целей его бы немного доработать… Еще 2 сервопривода нужно и одометр с передачей данных на пульт. Можем пообщаться по электронке или каким-то другим способом?

    • В данное время работаю над другими проектами совсем нет времени. Но в данный момент уже заказаны детали,для сборки полноценной аппаратуры на nrf24l01 для управления RC моделью, с возможностью подключения всякой периферии, )

  • Александр:

    Может стоимостью заинтересую?

  • Виталий:

    Здравствуйте. Собрал всё. Залил ваш скетч.Но поворот сервопривода только в одну сторону?

  • Михаил:

    Добрый вечер, Александр, подскажите, если я использую приемник и передатчик на 433 МГц, с соответствующей библиотекой, реально ли сделать пропорциональное управление?

  • seyit:

    Привет, Спасибо заранее за your’ve сделало это, но не обеспечивает сервоуправление, чтобы вы помочь не нашли чек, хотя я ошибку картины и я следую за ту же программой, но все еще Сервопривод не обеспечивает полные обороты в правую руку не возвращается к левой стороне причине Интересно помощь

  • alextim1:

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

    • Администратор:

      ардуина, расчитана на подачу тока до 40мА, двигател потребляет гораздо больше, в лучшем случаее он будет еле еле крутится, в худшем сгорит ардуино, а через драйвер двигателя например l298 можно подключить двигатель потреблением до 2 Ампер.

  • Виталий:

    А какие конденсатори нужнв?

  • Аноним:

    Доброго здравия Александр !!! Уже куда только не обращался за помощью и все бесполезно. Сам по возрасту не могу осилить проект который задумал и как бы уже работает на макетке и скетч есть, но это немного не то что надо. Ваш проект подходит если его немного изменить. Если готовы помочь инвалиду сделать для него нужную вещь в хозяйстве, буду очень благодарен. С Уважением дед Игорь!

Добавить комментарий

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.