Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Wi‑Fi RC-машина с беспроводной зарядкой Qi на Arduino MKR1000

Компоненты и расходники

Набор передатчика Qi 5W (IDT P9038-R-EVK)×1
Набор приёмника Qi 5W (IDT P9025AC-R-EVK)×1
Arduino MKR1000 (Wi-Fi + Li-Po зарядка)×1
Шасси 2WD для робота×1
Драйвер двигателей L293DNE×1
Повышающий преобразователь CN6009 (Step-up до 5В)×1
Li-Po аккумулятор 3,7 В (минимум 700 мАч!)×1
Диоды 1N4007×8
Светодиод (указатель Wi-Fi)×1
Резистор 221 Ом×1
Тяжелые стяжки (крепление)×5
Макетная плата (опционально)×1

Инструменты

О проекте

Создаём Wi-Fi-управляемую машинку, которая сама заряжается беспроводно, припарковываясь на базе.

Принцип работы

Сборка железа

  1. Припаяйте провода к моторам и к выходам приёмника Qi (OUT+ — красный, GND — чёрный).
  2. Соберите схему на макетке или припойте: батарея → MKR1000 (встроенная зарядка), CN6009 (вход от батареи, выход 5 В на L293DNE), L293DNE управляет моторами.
  3. Внимание! Используйте Li-Po ≥700 мАч, иначе риск перегрева/взрыва.
  4. Настройте CN009 под 5 В (отверткой, проверяйте мультиметром на OUT+/OUT−).
  5. Приёмник Qi клеим на дно машины (пластиковая подкладка + силикон), провода: красный → VIN, чёрный → GND Arduino.
  6. Батарею и макетку затягиваем стяжками к шасси.

Программная часть — Wi-Fi

  1. В скетче замените ssid и pass на свои (строки 12–13). Код заточен под WPA/WPA2; для WEP/открытой сети см. комментарии в коде (строки 34–37).
  2. Загрузите скетч в MKR1000.

Как пользоваться

  1. Подключение: лучше раздать хотспот с телефона и подключить MKR1000 к нему (тогда не нужен роутер). Или подключите оба к одному роутеру.
  2. Узнайте IP: в настройках хотспота телефона (или в админке роутера) найдите IP платы (например, 192.168.1.1).
  3. Откройте браузер на телефоне и введите этот IP.
  4. Зарядная база: включите передаточную панель Qi от 5 В адаптера.
  5. Ездьте! Веб-страница даёт большие кнопки управления и выбор скорости.

Код (Arduino_IDT_Wi-Fi_Car.ino)

#include 
#include 

const int motor1Control = 2;  // правый мотор
const int motor2Control = 3;  // левый мотор
const int motor1Input1 = 4;
const int motor1Input2 = 5;
const int motor2Input1 = 8;
const int motor2Input2 = 9;
const int wifiLed = 10;

char ssid[] = "example";   // <-- ваш SSID
char pass[] = "password";  // <-- ваш пароль
int keyIndex = 0;
int status = WL_IDLE_STATUS;
String readString;
WiFiServer server(80);
String speedMode = "fast";

void setup() {
  pinMode(motor1Control, OUTPUT);
  pinMode(motor2Control, OUTPUT);
  pinMode(motor1Input1, OUTPUT);
  pinMode(motor1Input2, OUTPUT);
  pinMode(motor2Input1, OUTPUT);
  pinMode(motor2Input2, OUTPUT);
  pinMode(wifiLed, OUTPUT);

  while (status != WL_CONNECTED) {
    status = WiFi.begin(ssid, pass);        // WPA/WPA2
    // status = WiFi.begin(ssid, keyIndex, pass); // WEP
    // status = WiFi.begin(ssid);                // открытая сеть
    delay(10000);
  }
  server.begin();
  digitalWrite(wifiLed, HIGH); // индикатор подключения
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) readString += c;

        if (c == '\n') {
          // HTTP-ответ с HTML-страницей управления
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("");
          client.println("FORWARDS
"); client.println("LEFT"); client.println("STOP"); client.println("RIGHT
"); client.println("BACKWARDS

"); client.println("

SPEED MODES

"); client.println("FAST"); client.println("SLOW"); client.println(""); break; } // Разбор команд if (readString.indexOf("?fast") > 0) { speedMode = "fast"; readString = ""; } if (readString.indexOf("?slow") > 0) { speedMode = "slow"; readString = ""; } if (speedMode == "fast") { if (readString.indexOf("?moveForwards") > 0) { moveForwards(); readString = ""; } if (readString.indexOf("?moveBackwards") > 0) { moveBackwards(); readString = ""; } } else { if (readString.indexOf("?moveForwards") > 0) { moveForwardsSlow(); readString = ""; } if (readString.indexOf("?moveBackwards") > 0) { moveBackwardsSlow(); readString = ""; } } if (readString.indexOf("?turnLeft") > 0) { turnLeft(); readString = ""; } if (readString.indexOf("?turnRight") > 0) { turnRight(); readString = ""; } if (readString.indexOf("?stopMoving") > 0) { stopMoving(); readString = ""; } } } delay(1); client.stop(); } } // --- Функции движения --- void moveForwards() { digitalWrite(motor1Control, HIGH); digitalWrite(motor2Control, HIGH); digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, HIGH); digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, HIGH); } void moveBackwards() { digitalWrite(motor1Control, HIGH); digitalWrite(motor2Control, HIGH); digitalWrite(motor1Input1, HIGH); digitalWrite(motor1Input2, LOW); digitalWrite(motor2Input1, HIGH); digitalWrite(motor2Input2, LOW); } void turnRight() { analogWrite(motor1Control, 0); analogWrite(motor2Control, 200); digitalWrite(motor1Input1, HIGH); digitalWrite(motor1Input2, LOW); digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, HIGH); } void turnLeft() { analogWrite(motor1Control, 200); analogWrite(motor2Control, 0); digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, HIGH); digitalWrite(motor2Input1, HIGH); digitalWrite(motor2Input2, LOW); } void stopMoving() { digitalWrite(motor1Control, LOW); digitalWrite(motor2Control, LOW); digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, LOW); digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, LOW); } void moveForwardsSlow() { analogWrite(motor1Control, 200); analogWrite(motor2Control, 200); digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, HIGH); digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, HIGH); } void moveBackwardsSlow() { analogWrite(motor1Control, 200); analogWrite(motor2Control, 200); digitalWrite(motor1Input1, HIGH); digitalWrite(motor1Input2, LOW); digitalWrite(motor2Input1, HIGH); digitalWrite(motor2Input2, LOW); }

Схема подключения

Wi‑Fi RC-машина с беспроводной зарядкой Qi на Arduino MKR1000

Производственный процесс

  1. Конструкторы в C#: виды, примеры и продвинутые паттерны
  2. Вложенные классы в C#: определение, использование и наследование
  3. Освоение перегрузки конструкторов в C#
  4. Почему IoT-устройства с Wi‑Fi создают растущую угрозу безопасности
  5. Премиальное точное производство деталей двигателя на токарных и фрезерных станках с ЧПУ
  6. Автодомкраты: виды, применение и правила безопасности
  7. Как быстро и безопасно устранить утечку бензина
  8. Как тюнинг влияет на гарантию авто: что нужно знать
  9. Пошаговое руководство по ремонту ручки автомобильной двери
  10. Быстрый гид по удалению ржавчины на кузове авто: защитите машину от коррозии