В данной статье я расскажу вам про модификацию самодельной Wi-Fi машинки на NodeMCU. Как я сделал из нерабочей машинки на радио управлении, Wi fi машинку. Читайте и смотрите вот тут: Своимируками беспроводная Wifi машинка на NodeMCU и RemoteXY.
Как рассказываю в предыдущей статье, электроника машинки была подключена по вот такой схеме.
И потаилась от 4 батареек формата АА. Так как постоянно покупать батарейки надоело, я решил переделать питание от аккумулятора 18650 . А так как у меня аккумуляторы из старой батареи ноутбука , они плохо держат заряд. По этой причине я решил сделать питание от двух аккумуляторов. Но как показала практика, данные аккумуляторы оказались еще хуже чем я думал. Даже 2 не держат нагрузку и Wi-Fi постоянно отваливался. Как я разбирал батарею от ноутбука смотрите тут. Позднее я разобрал второй батарею от ноутбука. Аккумуляторы были розового цвета. И держат они нагрузку неплохо. Даже один аккумулятор 18650 справлялся с нагрузкой без проблем.
Собрал я машинку на 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. И ваше устройство станет пультом для машинки.
Понравилась статья? Поделитесь ею с друзьями:
Вернуться в раздел: Проекты на NodeMCU, ESP8266, ESP-01 Дата публикации 12 сентября , 2017
Читайте также
А если сервопривод без ограничителя подойдет для машинки
Не работает прошивка
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).
мне на старость лет )
как скачать прошивку?
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.