Arduino Tank с Bluetooth управлением с Android конструктор

Цена: 

5 550.00 руб.
Тележка с Bluetooth управлением
Состав набора:
Гусеничные шасси с двумя моторами и бат. отсеком на 4АА
Arduino Uno R3 с кабелем
Драйвер двухканальный моторов на L298N/2A 
Bluetooth адаптер HC-06 (05)
провода для пайки 5 штук
провода п-п 5 штук
провода п-м  6 штук
кабель питания
саморезы 4 штуки
аккумуляторы в комплект не входят !!!!

 

Motor Shiel L298N
Для подачи питания на плате установлен трехсекционный клемник. Красный (2 мотора, Вх от 5 до 35V), желтый (GND), синий (5V) и черный (Пины управления). Пины подключаем так:
 
Вывод Arduino DIGITAL 7 - к IN1 пину модуля.
Вывод Arduino DIGITAL 5 - к IN2 пину модуля.
Вывод Arduino DIGITAL 4 - к IN3 пину модуля.
Вывод Arduino DIGITAL 2 - к IN4 пину модуля.
Вывод Arduino DIGITAL 6 - к ENA пину модуля.
Вывод Arduino DIGITAL 9 - к ENB пину модуля.
Вывод Arduino GND - к GND клеме модуля.
 
Большинство запитывают контроллер и силовую часть от разных источников. Но мы будем запитываться от одного источника.  У шилда есть какой никакой стабилизатор, но если вы подадите напряжении более 12,  то нужно будет снять джамперы, иначе чревато выхода из строя нашего шилда.
 
Bluetooth модуль HC-06
Подключение модуля самая простая вещь, проще только аккумулятор. И так нам надо сделать так:
Вывод Arduino VCC - к 3.3V пину модуля.
Вывод Arduino GND - к GND пину модуля.
Вывод Arduino TX - к RX пину модуля (1).
Вывод Arduino RX - к TX пину модуля (2).
 
Как только вы подадите питание, диод на модуле начнет мигать, как только вы с ним установите связь с помощи Android телефоном, он перестанет мигать и будет статично гореть. Пароль для подключения 1234.
 
 
Arduino UNO
Arduino Uno, мы запитываем от нашего аккумулятора 7.2V, стабилизатор понизит наше напряжение до 5V. Подключаем провода в те пины как ранее было написано.
Синий цвет – Bluetooth
Красный цвет - Motor Shiel L298N
 
 
 
Скетч для Arduino UNO
#define MIN_speed     0
 
int PIN_ENB = 9;
int PIN_ENA = 6;
 
int PIN_IN4 = 2;
int PIN_IN3 = 4;
int PIN_IN2 = 5;
int PIN_IN1 = 7;
 
int LED_PIN = 13;
float vel,ks,m1,m2;
float spl, spr;
int quadr = 0;
int ver, hor;
unsigned char mode;
unsigned char oldmode;
unsigned char iSpeed;
unsigned char rx_buf[8];
unsigned char rxcnt;
boolean binv = 0; 
boolean rx_ok;
 
// Правый мотор
void RM_foward()
{
  digitalWrite(PIN_IN1, LOW);
  digitalWrite(PIN_IN2, HIGH);
}
void RM_back()
{
  digitalWrite(PIN_IN1, HIGH);
  digitalWrite(PIN_IN2, LOW);
}
// Левый мотор
void LM_foward()
{
  digitalWrite(PIN_IN4, LOW);
  digitalWrite(PIN_IN3, HIGH);
}
void LM_back()
{
  digitalWrite(PIN_IN4, HIGH);
  digitalWrite(PIN_IN3, LOW);
}
void setup()
{
  Serial.begin(9600);
  pinMode(PIN_ENB, OUTPUT);
  pinMode(PIN_IN4, OUTPUT);
  pinMode(PIN_IN3, OUTPUT);
  pinMode(PIN_IN2, OUTPUT);
  pinMode(PIN_IN1, OUTPUT);
  pinMode(PIN_ENA, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
 
  digitalWrite(PIN_IN1, LOW);
  digitalWrite(PIN_IN2, LOW);
  digitalWrite(PIN_IN4, LOW);
  digitalWrite(PIN_IN3, LOW);
 
  digitalWrite(PIN_ENA, LOW);
  digitalWrite(PIN_ENB, LOW); 
}
//Параметры задания скорости
void setspeed()
{
  float sf1;
  //левый двигатель
  if (spl>0.0) LM_foward(); else LM_back(); 
  sf1=abs(spl);
  sf1=sf1*(255-MIN_speed)+MIN_speed;
  if (spl==0.0) sf1=0;
  iSpeed = int(sf1);
  analogWrite(PIN_ENA, iSpeed);
  //правый двигатель
  if (spr>0.0) RM_foward(); else RM_back(); 
  sf1=abs(spr);
  sf1=sf1*(255-MIN_speed)+MIN_speed;
  if (spr==0.0) sf1=0;
  iSpeed = int(sf1);
  analogWrite(PIN_ENB, iSpeed);
}
 
void loop()
{
  if (Serial.available() == 7)
  {
    rxcnt=0;
    digitalWrite(LED_PIN, binv);
    binv=!binv;
  
    while (Serial.available() > 0)
    {  
      rx_buf[rxcnt] = Serial.read();
      rxcnt++;
    }
    //Контроль целостности пакета
    rx_ok=true;
    if (rx_buf[4]!=4) rx_ok=false;
    //прочистка буфера
    if (!rx_ok)
    {
      int avi = Serial.available();
      Serial.print("err");
      while (Serial.available() > 0)
      {
        avi = Serial.read();
      }
    }
   
    if (rx_ok)
    {
        hor = rx_buf[1];
        ver = rx_buf[2];
        
        quadr = 0;
        //Вычисление рабочего квадранта
        float fhor=float(hor);
        float fver=float(ver);       
       
        if (fhor>128.0)
        {
          fhor=256.0-fhor;
          quadr = quadr+1;
        } 
 
        if (fver>128.0)
        {
          fver=256.0-fver;
          quadr = quadr+2;
        }
        //нормализация скоростей
        fhor=fhor/127.0;
        fver=fver/127.0;
       
        if (fver>fhor)
        {
          m1 = fver;
          m2 = (1.0-fhor)*fver;
          
        } else
        {
          m1 = fhor;
          m2 = (fver-1.0)*fhor;   
        }
        if ((fver<0.1)&&(fhor<0.1))
        {
          m1=0;
          m2=0;
        }
     
        //Приведение знаков скоростей по квадрантам
        if (quadr==0)
        {
          spl=-m1;
          spr=-m2;
        }
 
        if (quadr==1)
        {
          spr=-m1;
          spl=-m2;
        }       
        if (quadr==2)
        {
          spr=m1;
          spl=m2;
        }
        if (quadr==3)
        {
          spl=m1;
          spr=m2;
        }
       
        setspeed();           
    }   
 
  }
  if (Serial.available() > 7) 
  {
      int avi = Serial.available();
      Serial.print("e");
      while (Serial.available() > 0)
      {
        avi = Serial.read();
      }
  }
 
}