Занятие 18
Сборка робота
Видео сборки №1
Видео сборки №2
Трудозатраты на изготовление робота :
Монтаж электронных компонентов 5 часов
Программирование робота 4 часа
Готовая схема 2000 рублей.
Готовая Программа робота 1600 рублей из расчета 1 строка кода 11 рублей. Всего в программе робота содержится 146 строк кода.
Сборка робота с пультом 2500 рублей.
Сборка робота управляемого с телефона 2000 рублей.
Расходы на рассходники: припой, электроэнергию, амортизацию, работу с элекроинструментом 1000 рублей.
Реклама 1000 рублей.
Упаковка и доставка 1000 рублей
Итого трудозатраты составляют 8600 рублей.
Этапы электронной сборки
1. Лужение стабилизаторов
2. Установка стабилизаторов
3. Установка стоек
4. Установка обвязки конденсаторов и резисторов
5. Установка кнопок с резисторами в пульт
6. Установка преобразователей напряжения
7. Установка креплений двигателей и крепление двигателей
8. Установка драйвера двигателя
9. Установка кнопок Вкл/Выкл
10. Установка коробов для аккумуляторов
11. Установка проводов от двигателей к драйверу двигателя
12. Установка Г(ГЭ) штырьков на ESP и провода к GPIO 0
13. Присоединение проводов к Г(ГЭ) штырькам для программирования
14. Подключение ESP робота для определения MAC адреса к устройству программирования состоящему из Arduino и схемы стабилизации напряжения на 3.3V с кнопкой reset
15. Программирование ESP робота на приём команд применяя библиотеку ESPNOW
16. Программирование ESP пульта на отправку команд применяя библиотеку ESPNOW
17. Отсоединение проводов от Г(ГЭ) штырьков для программирования
18. Установка ESP на робота и пульт
19. Пробный пуск
20. Установка 5-ого колеса
21. Установка короба для аккумуляторов прикрепляя его болтом и гайкой
22. Установка колёс
23. Пуск
Программирование. Код для робота и пульта
Код приёмник
#include <ESP8266WiFi.h>
#include <espnow.h>
// Приёмник
// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
int id;
int x;
} struct_message;
// Create a struct_message called myData
struct_message myData;
// Create a structure to hold the readings from each board
struct_message board1;
// Create an array with all the structures
struct_message boardsStruct[1] = {board1};
void OnDataRecv(uint8_t * mac_addr, uint8_t *incomingData, uint8_t len) {
char __attribute__((unused)) macStr[18];
memcpy(&myData, incomingData, sizeof(myData));
boardsStruct[myData.id-1].x = myData.x;
}
void setup() {
pinMode(4, OUTPUT);
pinMode(12, OUTPUT);
pinMode(14, OUTPUT);
pinMode(16, OUTPUT);
// Initialize Serial Monitor
//Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
WiFi.disconnect();
// Init ESP-NOW
if (esp_now_init() != 0) {
return;
}
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
}
void loop(){
int data = boardsStruct[0].x;
if(data == 16){ //Вперёд //Пульт Btn1
digitalWrite(4, LOW); //Работает
digitalWrite(14, HIGH);
//Serial.println("16");
//digitalWrite(12, LOW); //Не работает
//digitalWrite(16, HIGH);
}
if(data == 14){ //Назад //Пульт Btn2
//digitalWrite(4, HIGH); //Не работает
//digitalWrite(14, LOW);
digitalWrite(12, HIGH); //Работает
digitalWrite(16, LOW);
//Serial.println("14");
}
if(data == 12){ //Влево //Пульт Btn3
digitalWrite(4, HIGH); //Работает //Двитаель Б Вращение назад
digitalWrite(14, LOW); //Работает //Двитаель Б Вращение назад
digitalWrite(12, LOW); //Работает //Двигатель А вращение вперед
digitalWrite(16, HIGH); //Работает //Двигатель А вращение вперед
//Serial.println("12");
}
//if(data == 4){ //Вправо //Пульт Btn4
// digitalWrite(4, LOW); //Работает //Двигатель Б Вращение вперед
// digitalWrite(14, HIGH); //Работает //Двигатель Б Вращение вперед
// digitalWrite(16, HIGH); //не Работает
// digitalWrite(12, LOW); //не Работает
//}
if(data == 4){ //Работает Btn4
digitalWrite(4,LOW);
digitalWrite(14,LOW);
digitalWrite(16,LOW);
digitalWrite(12,LOW);
//Serial.println("4");
}
delay(100);
}
Код передатчки
// Пульт //Передатчик
/*
Rui Santos
Complete project details at
https://RandomNerdTutorials.com/esp-now-many-to-one-esp8266-nodemcu/ */
/*
Пример MAC адрес платы: 48:3F:DA:54:F5:31 Главная(Приёмник) кому отправляются данные
*/
#include <ESP8266WiFi.h>
#include <espnow.h>
uint8_t broadcastAddress[] = {0xE8, 0xDB, 0x84, 0x52, 0xD8, 0xCF}; // МАС адрес получателя
int Btn1P16 = 0;
bool state1 = 0;
int Btn2P14 = 0;
bool state2 = 0;
int Btn3P12 = 0;
bool state3 = 0;
int Btn4P4 = 0;
bool state4 = 0;
#define BOARD_ID 1 // Устанавливаем ID платы как 1
// структуры для отправки данных
typedef struct struct_message {
int id;
int x;
} struct_message;
struct_message myData; // Создайте сообщение с именем myData для хранения отправляемых переменных
// Callback-функция при отправке сообщения
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
if (sendStatus == 0){
//digitalWrite(4,HIGH); //Сообщение доставлено
}else{
//digitalWrite(4,LOW); //Сообщение не доставлено
}
}
void setup() {
pinMode(4, INPUT);
pinMode(16, INPUT);
pinMode(14, INPUT);
pinMode(12, INPUT);
WiFi.mode(WIFI_STA); // Режим работы Клиент
WiFi.disconnect();
// Инициализируем ESP-NOW
if (esp_now_init() != 0) {
return;
}
// Роль платы в ESP-NOW
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(OnDataSent); // Получаем сообщение об отправке
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0); // Регистрируем пиры
}
void loop() {
Btn1P16 = digitalRead(16);
Btn2P14 = digitalRead(14);
Btn3P12 = digitalRead(12);
Btn4P4 = digitalRead(4);
if(Btn1P16 == HIGH){
//state1 = !state1;
//if (state1 == HIGH){
myData.id = BOARD_ID;
myData.x = 16; // Отправляем данные
esp_now_send(0, (uint8_t *) &myData, sizeof(myData));
//}
delay( 300 );
}
if(Btn2P14 == HIGH){
//state2 = !state2;
//if (state2 == HIGH){
myData.id = BOARD_ID;
myData.x = 14; // Отправляем данные
esp_now_send(0, (uint8_t *) &myData, sizeof(myData));
//}
delay( 300 );
}
if(Btn3P12 == HIGH){
//state3 = !state3;
//if (state3 == HIGH){
myData.id = BOARD_ID;
myData.x = 12; // Отправляем данные
esp_now_send(0, (uint8_t *) &myData, sizeof(myData));
//}
delay( 300 );
}
if(Btn4P4 == HIGH){
//state4 = !state4;
//if (state4 == HIGH){
myData.id = BOARD_ID;
myData.x = 4; // Отправляем данные
esp_now_send(0, (uint8_t *) &myData, sizeof(myData));
//}
delay( 300 );
}
//if( (Btn4P4 == HIGH) && (Btn1P16 == HIGH)){ //Работает
//
myData.id = BOARD_ID;
// myData.x = 0; // Отправляем данные
// esp_now_send(0, (uint8_t *) &myData, sizeof(myData));
// delay( 300 );
//}
}
Приёмник
Нет комментариев