цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Скоростная радиоуправляемая машинка на Arduino своими руками


Скоростная радиоуправляемая машинка на Arduino своими руками

Автор: Mike(admin) от 3-02-2020, 07:15

С радиоуправляемыми машинками всегда интересно играть, и многие мужчины с пеленок и до самой старости любят играть с ними. Большинство из этих миниатюрных автомобилей сегодня обеспечивают огромный крутящий момент для работы на пересеченной местности, но есть нечто, что всегда не доставало – скорость.


Скоростная радиоуправляемая машинка на Arduino своими руками

Итак, в этом проекте мы создадим совершенно другой тип радиоуправляемых автомобилей, используя Arduino. Цель этого миниавтомобиля – достичь максимальной скорости, поэтому опробуем двигатель постоянного тока без сердечника. Эти двигатели обычно используются в дронах и рассчитаны на 39000 об/мин, что должно быть более чем достаточно, чтобы утолить нашу жажду скорости. Автомобиль будет работать от небольшой литиевой батареи и может управляться дистанционно с помощью радиочастотного модуля nRF24L01.


Двигатель постоянного тока без сердечника, который используется в этом проекте, показан на следующем изображении. Вы можете найти их легко в интернете, так как они широко используются в мини-дронах. Просто введите, например, 8520 Magnetic Micro Coreless Motor, и вы найдете эти двигатели.


Скоростная радиоуправляемая машинка на Arduino своими руками

Но есть определенные недостатки в использовании двигателей постоянного тока для радиоуправляемой модели. Во-первых, они обеспечивают очень низкий стартовый крутящий момент, поэтому наша модель должна быть максимально легкой. Вот почему мы решили собрать всю машинку на печатной плате, используя SMD-компоненты, и максимально уменьшить размер платы. Вторая проблема – его высокая скорость, 39000 об/мин, с ней трудно работать, поэтому нам нужна схема управления скоростью на стороне Arduino, которую мы создали с помощью полеыого МОП-транзистора (MOSFET). В-третьих, эти двигатели будут питаться от одной литий-полимерной батареи с рабочим напряжением от 3,6 до 4,2 В, поэтому мы должны спроектировать нашу схему для работы от 3,3 В. Вот почему мы использовали Arduino Pro mini в качестве мозга для нашей радиоуправляемой машины.


Радиоуправляемая машина будет управляться дистанционно с помощью радиочастотного джойстика. Этот джойстик также будет создан с использованием Arduino вместе с РЧ-модулем nRF24L01, мы также использовали модуль джойстика для управления нашей моделью в нужном направлении. Для сборки вашего джойстика вы можете следовать следующей схеме.


Скоростная радиоуправляемая машинка на Arduino своими руками

Схема джойстика RF может быть запитана через USB-порт платы. Модуль nRF24L01 работает только от 3,3 В, поэтому мы использовали контакт 3,3 В на Arduino. Мы собрали схему на макетной плате, и она выглядит так, как показано далее, вы также можете создать печатную плату для этого при необходимости.


Скоростная радиоуправляемая машинка на Arduino своими руками

Код Arduino для схемы джойстика довольно прост, мы должны прочитать значение X и значение Y с нашего джойстика и отправить его на автомобиль через nRF24L01.



#include <SPI.h>  
#include "RF24.h"
RF24 myRadio (7, 8);
struct package
{
  int msg = 0;
};
byte addresses[][6] = {"0"};
typedef struct package Package;
Package data;
void setup()
{
  Serial.begin(9600);
  myRadio.begin();  
  myRadio.setChannel(115);
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate( RF24_250KBPS );
  delay(500);
  Serial.print("Remote Initialized");
}
  int forward; 
  int reverse; 
  int left; 
  int right; 
void loop()
{
 int xValue = analogRead(A0);
 int yValue = analogRead(A1); 
 //Serial.print(xValue); Serial.print(" , "); Serial.println(yValue);
 if (xValue>560 && xValue<1000)
 {
 forward = map (xValue, 560, 1000, 1, 10);
 //Serial.print("F="); Serial.println(forward);
 data.msg = forward; WriteData(); delay(50);
 }
 if (xValue<500 && xValue > 10)\
{
 reverse = map (xValue, 10, 500, 20, 11); //Convert JoyX-down to 11-20
 //Serial.print("B="); Serial.println(reverse);
 data.msg = reverse; WriteData(); delay(50);
 }
 else if (yValue>600 && yValue<1000)
 {
 right = map (yValue, 600, 1000, 21, 30); //Convert JoyY-right to 21-30
 //Serial.print("R="); Serial.println(right);
 data.msg = right; WriteData(); delay(50);
 }
 else if (yValue<450 && yValue > 10)
 {
 left = map (yValue, 10, 450, 40, 31); //Convert JoyY-left to 31-40
 //Serial.print("L="); Serial.println(left);
 data.msg = left; WriteData(); delay(50);
 }
/* else
 {
  Serial.println("Rest");
  data.msg = 0; WriteData(); delay(50);
 }
*/
}
void WriteData()
{
  myRadio.stopListening();
  myRadio.openWritingPipe( 0xF0F0F0F0AA);
  myRadio.write(&data, sizeof(data)); 
  //Serial.print("\nSent:");
  //Serial.println(data.msg);
  delay(50);
}
void ReadData()
{ 
myRadio.openReadingPipe(1, 0xF0F0F0F066);
  myRadio.startListening(); 
  if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
    Serial.print("\nReceived:");
    Serial.println(data.msg);
  }
}

Полная принципиальная схема для нашей машинки с дистанционным управлением показана далее. Схема также включает в себя возможность добавить два ИК-модуля TCRT5000 в нашу машину. Это было запланировано, чтобы наша машинка работала как робот, следующий за линией, чтобы она могла работать самостоятельно, без внешнего контроля. Тем не менее, ради этого проекта мы не будем концентрироваться на нем. Мы объединили обе схемы на одной печатной плате для простоты сборки, вы можете игнорировать ИК-датчик и секцию операционного усилителя для этого проекта.


Скоростная радиоуправляемая машинка на Arduino своими руками

Радиоуправляемая машинка будет питаться от литий-полимерного (Lipo) аккумулятора, подключенного к клемме P1. AMS117-3.3V используется для регулирования 3,3 В для нашего nRF24L01 и нашей платы Arduino. Мы также можем питать плату Arduino непосредственно от исходного вывода питания, но встроенный регулятор напряжения 3,3 В на Pro Mini не сможет подавать достаточный ток на наши радиочастотные модули, поэтому мы использовали внешний регулятор напряжения.


Скоростная радиоуправляемая машинка на Arduino своими руками

Для привода двух наших двигателей мы использовали два полевых МОП-транзистора SI2302. Важно убедиться, что эти полевые МОП-транзисторы могут работать от напряжения 3,3 В. Двигатели могут потреблять пиковый ток до 7А, поэтому ток МОП-транзистора должен составлять 7А или более, и он должен полностью включаться при 3,3В. Выбранный нами МОП-транзистор может обеспечить 10 А даже при напряжении 2,25 В, поэтому это идеальный выбор.


Печатная плата здесь не только образует основу для схемы, но и выступает в качестве шасси для нашего автомобиля, поэтому мы спроектировали плату в форме гоночного автомобиля с опциями для простой установки наших двигателей. Вы также можете попробовать создать свою собственную печатную плату, используя схему выше, или вы можете использовать эту конструкцию печатной платы, которая выглядит как показано далее. Колеса можно напечатать на 3D принтере (https://www.thingiverse.com/thing:4130921).


Скоростная радиоуправляемая машинка на Arduino своими руками

Скоростная радиоуправляемая машинка на Arduino своими руками

Код программы Arduino для радиоуправляемой машинки приведен далее.



#define R_IR 3
#define L_IR 4
#define L_MR 5
#define R_MR 6
#define min_speed 200
#define max_speed 800
#include <SPI.h>  
#include "RF24.h" 
RF24 myRadio (7, 8); 
struct package
{
  int msg;
};
typedef struct package Package;
Package data;
byte addresses[][6] = {"0"}; 
void setup() { 
  pinMode(R_IR, INPUT);
  pinMode(L_IR, INPUT);
  pinMode(L_MR, OUTPUT);
  pinMode(R_MR, OUTPUT);
  Serial.begin (9600);
  myRadio.begin(); 
  myRadio.setChannel(115); 
  myRadio.setPALevel(RF24_PA_MIN);
  myRadio.setDataRate( RF24_250KBPS ) ; 
}
int received; 
void loop() {
ReadData();
}
void Control_Car()
{
  if (received>=1 && received <=10) 
  {
    int PWM_Value =  map (received, 1, 10, min_speed, max_speed);
    analogWrite(R_MR,PWM_Value);
    analogWrite(L_MR,PWM_Value);
  }
    if (received>=11 && received <=20) 
  {
    int PWM_Value =  map (received, 11, 20, min_speed, max_speed);
    analogWrite(R_MR,0);
    analogWrite(L_MR,0);
  }
    if (received>=21 && received <=30)
  {
    int PWM_Value =  map (received, 21, 30, min_speed, max_speed);
    analogWrite(R_MR,PWM_Value);
    analogWrite(L_MR,0);
  }
      if (received>=31 && received <=40)
  {
    int PWM_Value =  map (received, 31, 40, min_speed, max_speed);
    analogWrite(R_MR,0);
    analogWrite(L_MR,PWM_Value);
  }
}
void ReadData()
{
  myRadio.openReadingPipe(1, 0xF0F0F0F0AA);
  myRadio.startListening(); //Stop Transminting and start Reveicing 
  if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
    Serial.print("\nReceived:");
    Serial.println(data.msg);
    received = data.msg;
    Control_Car();
  }
  else
  {
  //analogWrite(R_MR,0);
  //analogWrite(L_MR,0);
  }
}
void WriteData()
{
  myRadio.stopListening(); 
  myRadio.openWritingPipe(0xF0F0F0F066);
  myRadio.write(&data, sizeof(data)); 
  Serial.print("\nSent:");
  Serial.println(data.msg);
  delay(300);
}

После того, как вы закончите с кодом, загрузите его на свои платы Arduino. Извлеките батарею и плату для тестирования. Запустите свой код, откройте последовательный монитор, и вы должны получить значение от модуля джойстика вашего передатчика. Подключите аккумулятор, и ваши моторы также должны начать вращаться.


Скоростная радиоуправляемая машинка на Arduino своими руками



© digitrode.ru


Теги: Arduino, NRF24LE1





Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Оставить комментарий