Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

WiFi Pick to Light Project 2

Komponen dan persediaan

Arduino MKR1000
× 1
LED (generik)
× 2
Kabel jumper (generik)
× 1
Sakelar Tombol Tekan SparkFun 12mm
× 1
Resistor 10k ohm
× 1
Resistor 330 ohm
× 4
Breadboard (generik)
× 1
Kabel USB-A ke Micro-USB
× 1
NPN Transistor Serbaguna
× 1

Tentang proyek ini

Ini adalah proyek kedua yang saya pilih untuk eksplorasi cahaya. Pada bagian pertama, saya menjelaskan bagaimana saya melihat kerja cahaya sederhana dan saya membuat pilihan cahaya sederhana menggunakan komunikasi serial (Silakan baca ini jika Anda ingin lebih memahami apa yang saya lakukan di sini).

Itu berhasil tetapi ditambatkan ke PC dengan kabel. Dalam proyek ini saya ingin mengembangkan proses menggunakan Wi-Fi dan selain itu saya ingin memasukkan nomor urut dalam konfirmasi pengambilan sehingga jika ada yang tidak beres, sistem tahu ke mana pekerja itu mengambil. Saya akan menggunakan MKR1000 dengan cara yang sama seperti yang saya lakukan di proyek 1 tetapi berkomunikasi menggunakan WiFi. Untuk melakukan ini saya akan menggunakan UDP (User Datagram Protocol). Meskipun saya belum pernah menggunakan ini sebelumnya, berkat perpustakaan di Arduino dan Python, ini terbukti relatif mudah dibuat.

Langkah-langkah berikut secara umum mirip dengan proyek 1 jadi jika Anda telah mengikutinya maka Anda akan terbiasa dengan beberapa langkah dan tidak perlu diulang.

Langkah 1

Untuk memulai kita harus memiliki Python v 3.6 atau lebih tinggi di laptop atau pc kita. Anda dapat mengunduhnya dari sini:

https://www.python.org/downloads/

Langkah 2

Kali ini kita akan menggunakan pustaka soket Python untuk berkomunikasi dan sudah terinstal sehingga tidak perlu melakukan apa pun untuk membuat UDP berfungsi.

Langkah 3

Kami juga membutuhkan Arduino IDE baik versi PC atau versi Web. Ini dapat diunduh di sini:

https://www.arduino.cc/en/Main/Software

atau terhubung ke sini:

https://create.arduino.cc/

Petunjuk di situs ini lengkap sehingga saya tidak akan menduplikasinya jika tidak perlu.

Langkah 4

Luncurkan Python IDLE di PC atau Laptop Anda dan ketik:import os tekan:enter.

Kemudian ketik:os.getcwd() ini akan memberi Anda direktori kerja Anda saat ini (cwd).

Direktori kerja Python

Langkah 5

Di Notepad saya membuat file nilai yang dipisahkan koma dan cukup sederhana berisi nomor urut yang diformat untuk selalu 4 digit dan nomor bin dipisahkan dengan koma. Lihat tangkapan layar Notepad di bawah ini dan juga file teks terlampir yang dapat Anda unduh. Saya menyimpan ini sebagai sequence1.txt di cwd yang kami kumpulkan di langkah 4 (Anda dapat menyimpan file dengan ekstensi csv tetapi csv tidak perlu berfungsi). Menyimpan file ke cwd menyederhanakan banyak hal ketika kita datang untuk membaca dalam file dengan skrip python karena kita tidak perlu menentukan lokasi penyimpanan file karena secara otomatis akan terlihat di cwd.

file txt yang berisi urutan csv

Langkah 6

Kami akan menggunakan serial di sketsa Arduino tetapi hanya agar kami dapat melihat pesan yang dicetak di monitor serial.

Langkah 7

Skrip Python perlu membaca konten file csv satu baris pada satu waktu dan mengirim nomor urut dan nomor Bin melalui koneksi UDP dan kemudian menunggu hingga Arduino mengembalikan pengakuan, yang merupakan nomor urut dari nomor bin terakhir , untuk mengatakan bahwa bagian tersebut diambil. Jika nomor urut yang diterima tidak sesuai dengan nomor urut terakhir yang dikirim, program Python akan berhenti dengan pesan kesalahan yang menunjukkan nomor urut. Ini akan memungkinkan urutan untuk dimulai ulang di tempat yang benar. Saya telah menambahkan komentar ke skrip sehingga Anda dapat memahami apa yang saya tulis.

Salin skrip dan luncurkan IDLE lalu> File> File Baru dan tempel skrip ke jendela. Kemudian>File>Save As beri nama (tidak masalah apa namanya, asalkan tahu namanya).

Langkah 8

Sketsa Arduino perlu terhubung ke internet kemudian menunggu untuk menerima data udp dari PC untuk pengambilan berikutnya. Kemudian bertindak berdasarkan apa yang diterimanya dengan menyalakan LED yang sesuai dengan nampan secara berurutan. Kemudian perlu memantau tombol yang mewakili nampan itu untuk melihat apakah itu ditekan. Setelah pekerja menekan tombol untuk mengatakan bahwa bagian tersebut diambil, sketsa akan menyalakan LED dan mengirimkan pesan yang berisi nomor urut terakhir kembali ke PC atau Laptop untuk mengatakan bahwa bagian tersebut telah diambil. Kemudian menunggu untuk menerima detail untuk pengambilan berikutnya.

Jadi jika Anda menggunakan Arduino web editor copy dari bawah sketsa dan di Arduino Web Editor pilih>sketchbook>NEW SKETCH

Editor Web Arduino

Kemudian tempel skrip di sketsa baru sepenuhnya menggantikan semua yang ada di sana.

Jika Anda menggunakan editor web Arduino segera setelah Anda menempelkan sketsa, editor mengidentifikasi kebutuhan untuk membuat file rahasia yang akan berisi SSID dan kata sandi untuk server itu.

Ini hanyalah kasus sederhana untuk menambahkan detail yang relevan ke file di tempat yang disediakan.

Dengan Arduino IDE mungkin semudah itu tetapi jika ya, saya tidak dapat menemukannya. Namun, karena saya memulai sketsa saya dengan contoh sketsa WiFiUdpSendReceiveString.

Jika Anda membuka ini, Anda akan menemukan tab arduino_secrets.h sudah ada di dalamnya. Tambahkan SSID dan kata sandi Anda lalu tempel sketsa di bawah ini di atas sketsa yang sudah ada dan simpan dengan nama apa pun yang Anda suka.

Jika Anda menggunakan Arduino IDE, Anda harus menyertakan library WiFi101. Tautan berikut menjelaskan cara menambahkan library jika Anda tidak tahu.

https://www.arduino.cc/en/Guide/Libraries

Unduh ke MKR1000.

Langkah 9

Hubungkan semuanya sesuai diagram fritzing. Jika Anda telah mengikuti proyek 1 maka Anda akan melihat bahwa saya telah menghubungkan ini secara berbeda. Alasan di balik ini adalah bahwa segera setelah WiFi pada MKR1000 menjadi aktif karena alasan tertentu, daya turun di pin 8 dan 9 dan LED tidak akan menyala. Saya tidak dapat menemukan orang lain di web yang memposting apa pun tentang masalah ini, jadi saya menggunakan transistor untuk mengatasinya. Saya yakin akan ada penjelasan untuk ini tetapi sejauh ini saya belum menemukannya.

Peringatan! Pastikan resistor yang Anda gunakan cocok untuk LED dan transistor NPN yang Anda gunakan. Pastikan juga bahwa Anda menghubungkannya dengan benar karena membiarkan 5V korslet pada pin 8 dan 9 dapat menghancurkan Arduino Anda. Gunakan dioda jika Anda tidak yakin.

Langkah 10

Periksa apakah Arduino telah terhubung ke server dan kemudian jalankan skrip Python menggunakan F5 dan LED yang mewakili Bin1 akan menyala. Menekan tombol untuk mengonfirmasi bahwa bagian telah diambil akan mengirimkan nomor urut kembali ke program Python di mana akan diperiksa dan jika benar, urutan berikutnya akan dikirim.

Output Python akan terlihat seperti ini

Output serial monitor akan terlihat seperti ini:

Anda dapat menguji kegagalan urutan dengan mengomentari baris:

myseq.toCharArray(ReplyBuffer, 5);

dan batalkan komentar pada baris:

//char ReplyBuffer[5] ="0001";

sebagai berikut;

Saat Anda menjalankan program python sekarang eksekusi akan berhenti setelah bin kedua karena akan melaporkan nomor urut dari bin pertama.

Jika terjadi kegagalan urutan, orang yang membuat urutan perlu mengedit file yang berisi urutan dan memulai ulang arduino dan program Python.

Kesimpulan

Yah saya pikir saya telah mencapai apa yang saya mulai lakukan. Ini sederhana dan akan mudah untuk ditingkatkan ke versi kerja ukuran penuh. Namun, saya sudah dapat melihat bahwa proyek 3 dapat melakukan perbaikan dan meskipun kompetisi akan selesai, sebelum saya mendapatkan kesempatan untuk melakukan proyek lebih lanjut, saya pikir saya ingin melakukan ini untuk melihat bagaimana saya dapat membuatnya lebih baik tetapi tetap saja mempertahankan ide awal kesederhanaan.

Kode

  • Sketsa Arduino
  • Skrip Python
  • Urutan
Sketsa ArduinoArduino
Sketsa yang akan dimuat ke MKR1000
#include #include #include const int OKbutton =2; // atur pin untuk tombol oke/switchconst int Bin1 =8; // pin LED untuk bin 1 dipasang keconst int Bin2 =9; // pin tempat LED untuk bin 2 dipasang keString mydata =" "; // variabel untuk membaca data serial yang masuk ke set ke kosong stringString myseq =" ";int buttonPress =0; // variabel untuk menyimpan status tombol/status sakelar =WL_IDLE_STATUS;#include "arduino_secrets.h" ///////silahkan masukkan data sensitif Anda di tab Rahasia/arduino_secrets.hchar ssid[] =SECRET_SSID; // SSID jaringan Anda (nama)char pass[] =SECRET_PASS; // kata sandi jaringan Anda (gunakan untuk WPA, atau gunakan sebagai kunci untuk WEP)int keyIndex =0; // Nomor indeks kunci jaringan Anda (hanya diperlukan untuk WEP) unsigned int localPort =2390; // port lokal untuk mendengarkan onchar packetBuffer[255]; //buffer untuk menahan packetchar yang masuk ReplyBuffer[5] =" "; // string untuk mengirim backString mystring;WiFiUDP Udp;void setup() { //Inisialisasi serial dan tunggu port terbuka:Serial.begin(9600);// semua pernyataan serial tidak diperlukan setelah diatur//sementara ( !Serial) {// tunggu sampai port serial terhubung. Diperlukan hanya untuk port USB asli} // periksa keberadaan pelindung:if (WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // jangan lanjutkan:while (true); } // mencoba menyambung ke jaringan WiFi:while ( status !=WL_CONNECTED) { Serial.print("Mencoba menyambung ke SSID:"); Serial.println(ssid); // Hubungkan ke jaringan WPA/WPA2. Ubah baris ini jika menggunakan jaringan terbuka atau WEP:status =WiFi.begin(ssid, pass); // tunggu 10 detik untuk koneksi:delay(10000); } Serial.println("Tersambung ke wifi"); printWiFiStatus(); Serial.println("\nMemulai koneksi ke server..."); // jika Anda mendapatkan koneksi, laporkan kembali melalui serial:Udp.begin(localPort);}void loop() { // jika ada data yang tersedia, baca paket int packetSize =Udp.parsePacket(); if (packetSize) { Serial.print("Paket yang diterima berukuran "); Serial.println(Ukuran paket); Serial.print("Dari "); IPAddress remoteIp =Udp.remoteIP(); Serial.print(Ip jarak jauh); Serial.print(", port "); Serial.println(Udp.remotePort()); // membaca paket ke dalam packetBufffer int len ​​=Udp.read(packetBuffer, 255); if (len> 0) packetBuffer[len] =0; Serial.println("Isi :"); Serial.println(paketBuffer); String mystring(packetBuffer); mydata =stringku.substring(4); myseq =stringku.substring(0,4); Serial.println(data saya); Serial.println(myseq); while (mydata !=" "){ //Tes untuk melihat apakah mydata masih kosong jika tidak periksa bin mana yang harus menyala jika (mydata =="Bin1"){ // start bin 1 routine digitalWrite(Bin1 , TINGGI); // menyalakan LED untuk bin 1 dengan menyetel pin high digitalWrite(Bin2, LOW); // matikan LED untuk bin 2 dengan menyetel pin rendah while (Tekanan tombol !=HIGH) { // tunggu tombol tekan loop buttonTekan =digitalRead(OKbutton); //terus centang tombol mydata =" "; //set mydata kembali ke string kosong } digitalWrite(Bin1, LOW);// matikan led untuk bin 1 Serial.println("Picked"); //kirim pesan ke tombol PCTekan =0; //tombol reset delay rendah(1000); } if (mydata =="Bin2"){// start bin 2 rutin digitalWrite(Bin2, HIGH);// nyalakan LED untuk bin 2 dengan menyetel pin high digitalWrite(Bin1, LOW); // matikan LED untuk bin 1 dengan menyetel pin rendah while (tekanan tombol !=HIGH) { // tunggu tombol tekan loop buttonTekan =digitalRead(OKbutton); //terus centang tombol mydata =" "; //set mydata kembali ke string kosong } digitalWrite(Bin2, LOW); // matikan led bin 1 Serial.println("Picked"); //kirim pesan ke tombol PCTekan =0; //tombol reset delay rendah(1000); } } // kirim balasan, ke alamat IP dan port yang mengirimi kami paket yang kami terima myseq.toCharArray(ReplyBuffer, 5); //char ReplyBuffer[5] ="0001"; // hanya untuk menguji Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); Serial.println(ReplyBuffer); }}void printWiFiStatus() { // mencetak SSID jaringan yang Anda hubungkan:Serial.print("SSID:"); Serial.println(WiFi.SSID()); // cetak alamat IP pelindung WiFi Anda:IPAddress ip =WiFi.localIP(); Serial.print("Alamat IP:"); Serial.println(ip); // mencetak kekuatan sinyal yang diterima:long rssi =WiFi.RSSI(); Serial.print("kekuatan sinyal (RSSI):"); Serial.print(rssi); Serial.println(" dBm");}
Skrip PythonPython
Skrip Python untuk dijalankan.
## memuat perpustakaan yang diperlukanimport csvimport socketimport timeimport sysUDP_IP ="192.168.1.119" ## ip ArduinoUDP_PORT =2390 ## port yang ingin kita komunikasikan onprint("UDP target IP:" , UDP_IP) ## menampilkan ip ke userprint("UDP target port:", UDP_PORT) ## menampilkan port ke usersock =socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # buat sockettime.sleep(5)##open csv dan membacanya dalam satu baris pada satu waktudengan open('sequence1.txt') sebagai csvDataFile:csvReader =csv.reader(csvDataFile) untuk baris di csvReader:##untuk setiap baris lakukan hal berikut myseq =row[0] # #baca di nomor urut mystate =row[1] ##baca di nomor bin myrow =row[0] + row[1] print("Urutan saat ini sedang diambil ",myseq,"from ", mystate) sock.sendto (bytes(myrow, "utf-8"), (UDP_IP, UDP_PORT)) # kirim seq dan nomor bin data ="" # atur data ke kosong untuk dimasukkan saat loop i=sampai data diterima saat data =="":# sampai data diterima terus perulangan (data, addr) =soc k.recvfrom(1024) # set data ke data yang diterima dari socket mytest =data.decode( "utf-8") #set mytest ke nilai yang sama yang diterima melalui socket print ("picked =", mytest) # cetak nilai yang diterima jika mytest !=myseq:# menguji apa yang telah diterima sesuai dengan yang diharapkan yaitu seq terakhir yang dikirim print ("ada kesalahan urutan pada urutan", mytest) # menampilkan pesan untuk menunjukkan kesalahan sys.exit() #akhiri eksekusi program jika ada kesalahan
UrutanTeks biasa
File urutan untuk program python
0001,Bin10002,Bin20003,Bin10004,Bin20005,Bin10006,Bin20007,Bin10008,Bin20009,Bin10010,Bin20011,Bin10012,Bin20013,Bin1

Skema

Koneksi untuk UDP Pick to Light picktolightudp_OCbpNt9XPK.fzz

Proses manufaktur

  1. Lentera Gas
  2. Penunjuk Laser
  3. Senter
  4. Kaleidoskop
  5. Laser Semikonduktor
  6. Foto
  7. Sinyal Lalu Lintas
  8. Lampu
  9. Sensor Kendala Sederhana dengan Arduino
  10. Pick Kecepatan Gitar dan Pedal Injak!