제조공정
| 부품 | 수량 |
|---|---|
| 아두이노 MKR1000 | 1 |
| LED (일반) | 2 |
| 점퍼 와이어 | 1 |
| 스파크펀 푸시버튼 스위치 12mm | 1 |
| 저항 10kΩ | 1 |
| 저항 330Ω | 4 |
| 브레드보드 | 1 |
| USB-A to Micro-USB 케이블 | 1 |
| 범용 NPN 트랜지스터 | 1 |
창고나 생산 현장에서 작업자가 부품을 올바른 순서로 피킹(Picking)할 수 있도록 안내하는 WiFi 기반 픽투라이트(Pick-to-Light) 시스템입니다. 시리얼 통신 방식이었던 1차 프로젝트와 달리 MKR1000의 내장 WiFi와 UDP 프로토콜을 사용하여 무선으로 동작합니다. 시퀀스 번호를 포함하여 작업 진행 상황을 추적하고 오류 발생 시 정확한 재시작 지점을 알 수 있습니다.
#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();
Udp.begin(localPort);
}
void loop() {
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.print("Received packet of size ");
Serial.println(packetSize);
IPAddress remoteIp = Udp.remoteIP();
Serial.print(remoteIp);
Serial.print(", port ");
Serial.println(Udp.remotePort());
int len = Udp.read(packetBuffer, 255);
if (len > 0) packetBuffer[len] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
String mystring(packetBuffer);
mydata = mystring.substring(4);
myseq = mystring.substring(0, 4);
Serial.println(mydata);
Serial.println(myseq);
while (mydata != "") {
if (mydata == "Bin1") {
digitalWrite(Bin1, HIGH);
digitalWrite(Bin2, LOW);
while (buttonPress != HIGH) {
buttonPress = digitalRead(OKbutton);
mydata = "";
}
digitalWrite(Bin1, LOW);
Serial.println("Picked");
buttonPress = 0;
delay(1000);
}
if (mydata == "Bin2") {
digitalWrite(Bin2, HIGH);
digitalWrite(Bin1, LOW);
while (buttonPress != HIGH) {
buttonPress = digitalRead(OKbutton);
mydata = "";
}
digitalWrite(Bin2, LOW);
Serial.println("Picked");
buttonPress = 0;
delay(1000);
}
}
myseq.toCharArray(ReplyBuffer, 5);
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
Serial.println(ReplyBuffer);
}
}
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");
}
import csv
import socket
import time
import sys
UDP_IP = "192.168.1.119"
UDP_PORT = 2390
print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
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()
0001,Bin1
0002,Bin2
0003,Bin1
0004,Bin2
0005,Bin1
0006,Bin2
0007,Bin1
0008,Bin2
0009,Bin1
0010,Bin2
0011,Bin1
0012,Bin2
0013,Bin1
MKR1000의 WiFi 활성화 시 핀 8, 9 전압 강하 문제로 LED가 점등되지 않을 수 있습니다. 이를 해결하기 위해 NPN 트랜지스터를 사용하여 LED를 구동하도록 회로를 구성했습니다. 배선 시 저항값과 트랜지스터 정격 확인 필수, 5V 쇼트 주의.
제조공정
프로젝트 개요 별도의 음성 인식 모듈 없이, PC의 내장 마이크 또는 이어폰 마이크와 C#(.NET Framework)의 System.Speech 라이브러리를 활용해 음성 명령으로 아두이노의 LED를 제어하는 입문자용 프로젝트입니다. 2020년 업데이트 튜토리얼은 Medium에서 확인 가능합니다. 동작 원리 PC에서 C# 윈폼 앱 실행: System.Speech.Recognition으로 음성 인식 엔진 구동 사전 정의된 명령어(Blue On, Red Off 등) 인식 시 해당 문자(B, X 등)를 시리얼 포트로 아두이노 전송 아
부품 및 소모품 부품 수량 비고 초음파 센서 HC-SR04 2 좌/우 눈 거리 측정용 아두이노 나노 R3 1 소형, USB 전원/프로그래밍, 충분한 GPIO 포토 레지스터 (LDR) 1 주변 밝기 감지 → LED 밝기 자동 조절 MAX7219 8x8 LED 매트릭스 모듈 2 데이지 체인 연결 가능 (SPI) 하프 사이즈 브레드보드 1 납땜 없이 프로토타이핑 점퍼 와이어 다수 빨강/검정은 전원/그라운드용 권장 저항 330 옴 1 LDR 분압용 앱 및 온라인 서비스 아두이노 IDE 프로젝트