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

Система Pick-to-Light на Arduino MKR1000 с WiFi (UDP) — Проект 2

Компоненты и материалы

О проекте

Это второй проект в серии Pick-to-Light. Первый проект использовал последовательное соединение (Serial) и был привязан к ПК кабелем. В этой версии реализовано беспроводное управление по WiFi с использованием протокола UDP. Добавлена нумерация последовательности (sequence number) для отслеживания прогресса сборки: если рабочий пропустил ячейку или ошибся, система определит точное место сбоя.

Используется Arduino MKR1000 и Python-скрипт на компьютере. Обмен данными происходит по UDP (User Datagram Protocol). Благодаря библиотекам Arduino и Python реализация оказалась простой.

Пошаговая инструкция

Шаг 1: Установка Python

Требуется Python 3.6+. Скачать: python.org/downloads

Шаг 2: Библиотека socket

Встроенная библиотека socket уже поддерживает UDP — ничего устанавливать не нужно.

Шаг 3: Arduino IDE

Скачать: Arduino IDE или использовать Web Editor.

Шаг 4: Рабочая директория Python

Запустите IDLE, выполните:

import os
os.getcwd()

Получите путь к текущей рабочей директории (cwd).

Шаг 5: Файл последовательности (CSV)

Создайте в cwd файл sequence1.txt (или .csv) с содержимым:

0001,Bin1
0002,Bin2
0003,Bin1
0004,Bin2
...

Формат: 4-значный номер последовательности, запятая, номер ячейки (Bin1/Bin2).

Шаг 6: Serial в скетче Arduino

Используется только для отладки через Serial Monitor.

Шаг 7: Python-скрипт

Скрипт читает CSV построчно, отправляет по UDP номер последовательности и ячейку, ждет подтверждения (последний полученный номер последовательности) от Arduino. Если номера не совпадают — скрипт останавливается с ошибкой, указывая проблемный номер. Это позволяет возобновить процесс с правильного места.

import csv, socket, time, sys
UDP_IP = "192.168.1.119"  # IP Arduino
UDP_PORT = 2390
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
time.sleep(5)

with open('sequence1.txt') as csvDataFile:
    csvReader = csv.reader(csvDataFile)
    for row in csvReader:
        myseq = row[0]
        mystate = row[1]
        myrow = row[0] + row[1]
        print("Current sequence being picked", myseq, "from", mystate)
        sock.sendto(bytes(myrow, "utf-8"), (UDP_IP, UDP_PORT))
        data = ""
        while data == "":
            (data, addr) = sock.recvfrom(1024)
            mytest = data.decode("utf-8")
            print("picked =", mytest)
            if mytest != myseq:
                print("there is a sequence fault at sequence", mytest)
                sys.exit()

Шаг 8: Скетч Arduino

Скетч подключается к WiFi, слушает UDP-порт 2390. При получении данных зажигает соответствующий светодиод (Bin1 или Bin2), ждет нажатия кнопки, гасит светодиод, отправляет обратно номер последовательности.

Важно: при использовании Web Editor автоматически создается вкладка arduino_secrets.h для SSID и пароля. В классической IDE можно взять пример WiFiUdpSendReceiveString, в нем уже есть эта вкладка.

#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>

const int OKbutton = 2;
const int Bin1 = 8;
const int Bin2 = 9;
String mydata = "";
String myseq = "";
int buttonPress = 0;
int status = WL_IDLE_STATUS;

#include "arduino_secrets.h"
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
int keyIndex = 0;
unsigned int localPort = 2390;
char packetBuffer[255];
char ReplyBuffer[5] = "";
String mystring;
WiFiUDP Udp;

void setup() {
  Serial.begin(9600);
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);
  }
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(10000);
  }
  Serial.println("Connected to wifi");
  printWiFiStatus();
  Serial.println("\nStarting connection to server...");
  Udp.begin(localPort);
}

void loop() {
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    // Чтение пакета, разбор sequence (первые 4 символа) и bin (остальное)
    // Зажигание соответствующего LED, ожидание кнопки, отправка ответа
  }
}

void printWiFiStatus() {
  Serial.print("SSID: "); Serial.println(WiFi.SSID());
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: "); Serial.println(ip);
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm");
}

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

Шаг 9: Сборка схемы

Схема соединений (Fritzing) отличается от Проекта 1: при активации WiFi на MKR1000 напряжение на пинах 8 и 9 проседает, поэтому светодиоды управляются через NPN-транзистор. Внимание! Подбирайте резисторы под ваши светодиоды и транзистор. Не допускайте замыкания 5В на пины 8/9 — это может убить плату. Используйте диод, если не уверены.

Шаг 10: Запуск и тестирование

  1. Проверьте подключение Arduino к WiFi (Serial Monitor).
  2. Запустите Python-скрипт (F5 в IDLE).
  3. Загорится светодиод Bin1. Нажмите кнопку — отправится подтверждение.
  4. Python проверит номер последовательности и отправит следующий.

Для теста ошибки последовательности закомментируйте строку myseq.toCharArray(ReplyBuffer, 5); и раскомментируйте char ReplyBuffer[5] = "0001";. Программа остановится на второй ячейке с ошибкой последовательности.

Заключение

Цель достигнута: простое, масштабируемое Pick-to-Light по WiFi с контролем последовательности. Планируется Проект 3 с улучшениями.

Код

Схемы

Файл Fritzing: picktolightudp_OCbpNt9XPK.fzz (в оригинале).

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

  1. Газовые фонари: эволюция, дизайн и современное производство
  2. Лазерный указатель: дизайн, производство и обзор безопасности
  3. Фонарик: от изобретения к современным инновациям
  4. Калейдоскоп: от науки Брюстера к современному дизайну
  5. Полупроводниковые лазеры: точное генерирование света для современных технологий
  6. Искусство и наука фотографических процессов: от dageерротипов к современной пленке
  7. Светофоры: инженерия, история и будущие инновации
  8. От огня к нити накаливания: эволюция и производство современной лампы накаливания
  9. Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
  10. DIY Guitar Speed Pick & Stomp Pedal — моторизированный медиатор на Arduino