Самодельная Wifi машинка на NodeMCU. Машина делает дрифт

.Самодельная Wifi машинка на NodeMCU. Машина делает дрифт

В данной статье я расскажу вам про модификацию самодельной Wi-Fi машинки на NodeMCU. Как я сделал из нерабочей машинки на радио управлении, Wi fi машинку. Читайте и смотрите вот тут: Своимируками беспроводная Wifi машинка на NodeMCU и RemoteXY.

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

Схема подключения самодельной Wi-Fi машинки

И потаилась от 4 батареек формата АА. Так как постоянно покупать батарейки надоело, я решил переделать питание от аккумулятора 18650 . А так как у меня аккумуляторы из старой батареи ноутбука , они плохо держат заряд. По этой причине я решил сделать питание от двух аккумуляторов. Но как показала практика, данные аккумуляторы оказались еще хуже чем я думал. Даже 2 не держат нагрузку и Wi-Fi постоянно отваливался. Как я разбирал батарею от ноутбука смотрите тут. Позднее я разобрал второй батарею от ноутбука. Аккумуляторы были розового цвета. И держат они нагрузку неплохо. Даже один аккумулятор 18650 справлялся с нагрузкой без проблем.


Собрал я машинку на NodeMCU без изменения управляющей программы и был удивлен машинка постоянно дрифтовала, ее разворачивала постоянно. Для дрифта это отлично, но нормально поездить можно только на улице по асфальту. Поэтому я решил переделать управление рулем и управляющую программу.

Модификация самодельной Wi-Fi машинки на NodeMCU. Схема подключения

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

Также по схеме видно что остался один двигатель и появился сервопривод. Сейчас управление поворотами происходит благодаря сервоприводу.

Скетч для NodeMCU в среде программирования Arduino IDE для приложения RemoteXY выглядит вот так:

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////
// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
#include <RemoteXY.h>
// настройки соединения 
#define REMOTEXY_WIFI_SSID "PortalPk"
#define REMOTEXY_WIFI_PASSWORD ""
#define REMOTEXY_SERVER_PORT 6377
// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,3,0,0,0,25,0,6,5,2,
  5,8,43,13,39,39,10,52,43,43,
  2,3,131,13,12,14,37,10,18,45,
  17,4 };
// структура определяет все переменные вашего интерфейса управления 
struct {
    // input variable
  int8_t joystick_1_x; // =-100..100 координата x положения джойстика 
  int8_t joystick_1_y; // =-100..100 координата y положения джойстика 
  uint8_t select_1; // =0 если переключатель в положении A, =1 если в положении B, =2 если в положении C, ... 
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////
/* определяем пины управления правым мотором */
#define MOTOR_RIGHT_UP D1
#define MOTOR_RIGHT_DN D2
/* определяем пины управления левым мотором 
#define MOTOR_LEFT_UP D3
#define MOTOR_LEFT_DN D4*/
#include <Servo.h>  
#define PIN_SERVO D4
Servo servo; 
//светодиоды
#define PIN_LED_STOP D0
#define PIN_LED_5 D5
#define PIN_LED_6 D6
#define PIN_LED_7 D7
#define PIN_LED_8 D8
// переменные 
boolean status = true; // флаг, что активна левая
boolean open = true; // флаг, включения
int interval[6]={50, 120, 90, 240, 150, 50};    // интервал включения/выключения LED
long prestro1Millis = 0;        // до мигания ( в целом переменная времени)
int x=0;
void setup() 
{
  RemoteXY_Init (); 
    pinMode (PIN_LED_STOP, OUTPUT);
    pinMode (PIN_LED_5, OUTPUT);
    pinMode (PIN_LED_6, OUTPUT);
    pinMode (PIN_LED_7, OUTPUT);
    pinMode (PIN_LED_8, OUTPUT);
   servo.attach(PIN_SERVO);
}
void loop() 
{ 
  RemoteXY_Handler ();
 //  Положение селектора 0 и 2   ///   
  if (RemoteXY.select_1 == 2)
      {
          Migalka ();// Мигалка 
      } 
   if (RemoteXY.select_1 == 1)
      {
          digitalWrite(PIN_LED_STOP, HIGH); //
          digitalWrite(PIN_LED_5, HIGH); // 
          digitalWrite(PIN_LED_6, HIGH); // 
      }   
   if (RemoteXY.select_1 == 0)
      {
          digitalWrite(PIN_LED_STOP, LOW); //
          digitalWrite(PIN_LED_5, LOW); // 
          digitalWrite(PIN_LED_6, LOW); // 
          digitalWrite(PIN_LED_7,  LOW); // 
          digitalWrite(PIN_LED_8, LOW); // 
      } 
 //END Положение селектора 0 и 2 ////
 /* управляем мотором */  
 int y = RemoteXY.joystick_1_y;
   if (y>100) y=100;
  if (y<-100) y=-100;
  if (y>20) {
    analogWrite(MOTOR_RIGHT_UP, y*10.23);
    digitalWrite(MOTOR_RIGHT_DN, LOW);   
  }
  else if (y<-20) {
    digitalWrite(MOTOR_RIGHT_UP, LOW);
    analogWrite(MOTOR_RIGHT_DN, (-y)*10.23);
  }
  else {
    digitalWrite(MOTOR_RIGHT_UP, LOW);
    digitalWrite(MOTOR_RIGHT_DN, LOW);
  }
  int x = RemoteXY.joystick_1_x;
  if (x>100) x=100;
  if (x<-100) x=-100;
  if (x>10) {
    servo.writeMicroseconds(x*2.5+1600);  
  }
  else if (x<-10) {
    servo.writeMicroseconds(x*2.5+1600); 
  }
  else {
    servo.writeMicroseconds(1600); 
  }
}
void Migalka () // Мигалка 
{
 unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
  if ((curstro1Millis - prestro1Millis) > interval[x]) // проверяем интервал
    {
      if (open) // если true
        digitalWrite(status ? PIN_LED_7 : PIN_LED_8, HIGH); //
      else // иначе
       digitalWrite(status ? PIN_LED_7 : PIN_LED_8, LOW); // 
       x++;
      if (x == 6) // если последний проход по циклу
      {
        status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот;
        x=0;
      }
      open = !open; //меняем false на true и наоборот 
    prestro1Millis = curstro1Millis;
  }
}

Повторить данную машинку может каждый желающий. Вам не нужно писать код или писать приложения для Android. Достаточно загрузить прошивку в NodeMCU. И на свое устройства установить приложение RemoteXY. Подключиться к Wi-fi сети с имением PortalPK. И ваше устройство станет пультом для машинки.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Понравилась статья? Поделитесь ею с друзьями:

Вернуться в раздел: Проекты на NodeMCU, ESP8266, ESP-01 Дата публикации 12 сентября , 2017

Комментарии

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

Богдан
#4 Гость: Богдан (5 августа, 2021 в 16:27)

А если сервопривод без ограничителя подойдет для машинки

Алла Ильина
#3 Гость: Алла Ильина (21 февраля, 2019 в 19:32)

Не работает прошивка

Arduino: 1.8.2 (Windows 7), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

compilation terminated.

Используем библиотеку ESP8266WiFi версии 1.0 из папки: C:\Users\Администратор\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266WiFi

exit status 1

Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).

Дмитрий Дунденков
#2 Гость: Дмитрий Дунденков (21 февраля, 2019 в 19:30)

мне на старость лет )

Артём Аликов
#1 Гость: Артём Аликов (21 февраля, 2019 в 19:23)

как скачать прошивку?


Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box