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

Prototipe Sensor Warna:Mendeteksi Nama Warna dari Objek

Komponen dan persediaan

Arduino UNO
× 1
RGB Diffused Common Anode
Katoda umum, atau anoda... gunakan apa yang Anda miliki
× 1
Resistor foto
× 1
Adafruit LCD Standar - 16x2 Putih di Atas Biru
Apa pun yang dapat digunakan dengan perpustakaan LiquidCrystal Arduino
× 1
Resistor 10k ohm
Untuk sakelar taktil dan sel CdS
× 2
Resistor 100 ohm
150 ohm untuk pin merah dan 2x 100 ohm untuk pin hijau dan biru dari LED RGB
× 3
Sakelar Tombol Tekan SparkFun 12mm
× 1
Kabel jumper (generik)
× 1
Breadboard (generik)
× 1

Aplikasi dan layanan online

Meja Kerja Topologi MLP
Alat yang digunakan untuk melatih ulang jaringan saraf untuk digunakan dengan perpustakaan Neurona di Arduino.

Tentang proyek ini

Ini adalah versi sederhana dari artikel lengkap, demi kesederhanaan, sehingga reproduksi proyek ini dapat dilakukan dengan mudah. Lihat juga proyek ini di blog saya untuk detail implementasi lebih lanjut.

Artikel ini dibagi dalam bagian yang tercantum di menu sisi kanan. Jika Anda ingin melompat ke detail teknis, periksa daftar isi di sebelah kanan, atau unduh kodenya di repositori GitHub. Sebelum melanjutkan membaca, periksa video proyek untuk melihat apa sebenarnya proyek ini :)

Ikhtisar Proyek

Mirip dengan penglihatan warna mata manusia, serta berbasis pada cahaya, model RGB terdiri dari lebih dari 16 juta warna , yang disusun dalam ruang 3D , di mana nilai integer komponen R (Merah), G (Hijau) dan B (Biru), berkisar dari 0 hingga 255, merupakan koordinat ruang ini. Dari model ini, deteksi dan pengenalan warna dilakukan dengan komponen elektronik terkait cahaya dan mekanisme pembelajaran mesin; pada dasarnya adalah kombinasi LED RGB dan Sel CdS (sensor cahaya, atau LDR), keduanya terisolasi dari cahaya sekitar . Komponen tersebut, masing-masing, memancarkan dan merasakan intensitas setiap cahaya (merah, hijau dan biru) yang dipantulkan dari objek warna tertentu.

Perceptron Multi-Lapisan

Multi-Layer Perceptron (MLP) adalah arsitektur feedforward Jaringan Syaraf Tiruan, memiliki lapisan input (non-neural), lapisan tersembunyi dan lapisan output. Jaringan ini dilatih oleh algoritma backpropagation, melakukan pembelajaran yang diawasi (belajar dengan contoh).

Untuk sensor warna ini, jaringan saraf yang diilustrasikan di atas menerima 3 input (nilai RGB) , memiliki satu lapisan tersembunyi dengan 6 neuron dan lapisan keluaran dengan 10 neuron - hanya mengingat:lapisan keluaran harus memiliki jumlah kelas yang sama (warna, dalam hal ini), untuk keluaran biner. Untuk tutorial ini, jaringan sudah terlatih dan mampu mengenali warna :). Detail lebih lanjut tentang langkah-langkah pelatihan dan contoh kumpulan data yang digunakan untuk itu, lihat posting lengkapnya di blog saya.

Pengenalan Warna

Tugas ini dapat dilakukan menggunakan jaringan MLP terlatih kami. Ini memungkinkan klasifikasi dan pengenalan pola yang dapat dipisahkan secara spasial - sangat berguna dalam kasus ini. Selama langkah pelatihannya, jaringan memetakan wilayah dalam ruang warna RGB yang diilustrasikan di bawah ini, sehingga setiap wilayah yang diisolasi oleh hyperplanes mewakili warna . Oleh karena itu, setiap pola warna RGB baru (direpresentasikan sebagai titik 3D) berada di wilayah tertentu, diklasifikasikan sebagai warna masing-masing.

Dengan tujuan memperoleh generalisasi dengan MLP untuk pengenalan pola RGB yang baik, set pelatihan (contoh warna dengan output yang diinginkan dari ruang 3D yang diilustrasikan di atas) harus disajikan ke jaringan untuk langkah pelatihan. Set pelatihan yang digunakan dalam proyek ini tersedia di GitHub . proyek gudang. Jika Anda tertarik pada jaringan saraf, teruslah membaca bagian ini dan lihat Taman Bermain yang saya kembangkan ini, sehingga Anda dapat menggunakan kumpulan data untuk melatih jaringan itu sendiri dan menggunakannya dalam kode :). Jika tidak, lewati ke detail Implementasi .

Generalisasi akan terjadi di domain yang terdiri dari set pelatihan, jadi perlu memperhatikan nilai min dan max dari setiap komponen ruang! Jangan memberi makan jaringan dengan pola di luar domain ini, jika tidak, output tidak diharapkan untuk bekerja dengan benar.

Dataset (semua contoh) berisi 75 contoh pola warna mulai dari 0 hingga 1. Awalnya berkisar dari 0 hingga 255, contoh ini diskalakan ulang dengan hanya membagi setiap nilai dengan 255, sehingga 0 <=x1, x2, x3 <=1 Seperti dapat dilihat pada dataset, penting untuk menunjukkan bahwa hanya satu neuron pada lapisan keluaran yang harus mengeluarkan 1, sedangkan yang lainnya harus menghasilkan nol. Karena fakta bahwa jaringan yang terlatih mengeluarkan nilai float, pasca-pemrosesan terjadi sebagai berikut:

di mana yi adalah output dari neuron ke-i dan max(y) adalah nilai output terbesar. Dalam istilah praktis, neuron dengan output terbesar memberikan 1 sebagai output dan sisanya memberikan 0. Sesederhana itu.

Sirkuit Elektronik

Berasal dari objek, semua prosedur deteksi terjadi di sirkuit elektronik, meliputi aktivitas komputasi yang berjalan di Atmega328, yang terhubung ke papan Arduino. Periksa pengkabelan dari skema di bawah ini.

Kode mengikuti skema di atas yang menggunakan common anode LED RGB. Karena itu, periksa apakah LED RGB Anda juga merupakan anoda umum, jika tidak, balikkan saja logika dalam kode .

Detail penting lainnya adalah saya hanya menggunakan satu resistor dengan LED RGB. Karena satu warna pada suatu waktu akan menyala, saya menempatkan resistor di anoda umum, dengan resistansi rata-rata dari resistor yang seharusnya dengan katoda - itu malas, saya tahu dan saya minta maaf! Ketika saya pergi untuk membeli suku cadang proyek, mereka tidak memiliki semua yang saya butuhkan - tetapi sangat penting untuk menggunakan resistor yang benar dengan katoda untuk memiliki kesetiaan dalam nilai RGB yang dikumpulkan sehubungan dengan nilai RGB di komputer. Cara yang saya lakukan tidak terlalu buruk, karena polanya tidak terdistorsi; warnanya tidak sama dengan yang kita lihat di layar komputer (dan seperti yang ditangkap mata manusia).

Dari skema dapat diamati kedekatan antara LED RGB dan Sel CdS. Itu karena mereka harus diisolasi dari cahaya sekitar (tabung film hitam tua adalah bagian yang sempurna), sehingga kalibrasi (dijelaskan dalam Pemrograman) dan pengenalan dapat dilakukan. Periksa video proyek untuk melihat komponen tersebut diisolasi dari cahaya sekitar.

Teori Warna

Persepsi warna yang dilakukan oleh rangkaian elektronik didasarkan pada konsep teori warna. Karena tidak ada lensa (belum) yang terlibat, hanya objek dengan bahan buram (dan matte) yang harus dipertimbangkan , menghindari berurusan dengan refleksi specular dari LED. Refleksi difus di sisi lain adalah kunci untuk melakukan deteksi warna dengan lampu. Dari cahaya yang datang, cahaya tersebut dipantulkan pada permukaan yang tidak beraturan, tidak menciptakan efek kilau yang merusak fungsi Sel CdS.

Kembali ke teori warna yang sebenarnya, ketika cahaya (dengan warna tertentu) mencapai suatu objek, itu dipantulkan sesuai dengan sifat warna objek itu. Misalnya, cahaya merah yang mencapai objek kuning akan dipantulkan sesuai dengan banyaknya warna merah yang ada dalam komposisi warna kuning itu - ingat, kita berbicara tentang cahaya! - jadi diharapkan ada banyak cahaya merah yang dipantulkan, yang masuk akal jika kita memikirkan komposisi RGB kuning (pada dasarnya merah dan hijau). Namun, ketika cahaya biru mencapai objek kuning, tidak ada pantulan kuat yang diharapkan karena rendahnya kandungan biru dalam komposisi warna.

Mempertimbangkan sistem warna aditif, di mana putih dan hitam masing-masing ada dan tidak ada setiap warna (lebih detail di sini ), dapat diukur (dengan Sel CdS) maksimum dan minimum refleksi setiap cahaya dari LED RGB yang akan mencapai objek berwarna. Yang mengatakan, dimungkinkan untuk melakukan kalibrasi pada komponen elektronik yang terlibat dalam rangkaian. Ini adalah kunci lain untuk mendapatkan ketepatan dalam pendeteksian, serta untuk memastikan pendeteksian pola yang stabil (menghindari outlier) - inilah tip emas :setelah kalibrasi, usahakan (keras!) untuk tidak memindahkan atau menyentuh komponen elektronik (khususnya ketika ditempatkan di papan tempat memotong roti), atau bagian yang Anda gunakan (harus Anda gunakan) untuk mengisolasi komponen dari cahaya sekitar.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

Pemrograman

Untuk kalibrasi dan pengenalan, sensor warna mengeksekusi tiga iterasi, setelah objek berwarna diekspos ke LED RGB dan Sel CdS. Pada iterasi pertama, lampu merah mengenai objek dan program menunggu sel CdS untuk menstabilkan penginderaannya; input analog kemudian dibaca dan pantulan lampu merah disimpan. Program mengulangi dua kali lagi untuk warna hijau dan biru. Gambar yang ditunjukkan dalam teori Warna memberikan penjelasan visual yang baik tentang proses berulang ini.

Mengenai kalibrasi, proses iteratif yang disebutkan di atas dilakukan dua kali:satu kali untuk warna hitam dan satu kali untuk warna putih. Seperti yang dijelaskan dalam teori Warna, ini untuk mendeteksi maksimum dan minimum - awalnya dari mendekati nol ke mendekati 1024 , menurut resolusi pembacaan - pantulan lampu merah, hijau dan biru, memperoleh rentang sebenarnya untuk mengubah skala dengan benar ke interval [0, 255] (untuk tujuan informatif) dan [0, 1] (input aktual untuk memberi makan jaringan saraf ).

Waktu tunggu untuk menetapkan pembacaan sensor cahaya dapat bervariasi sesuai dengan masing-masing komponen elektronik, jadi ada baiknya memberikan penundaan yang baik untuk memastikan penginderaan yang stabil. Dalam kasus saya, saya memberikan penundaan 500 milidetik, tetapi layak untuk awalnya menggunakan nilai yang lebih besar dan kemudian menguranginya hingga mencapai ambang perilaku yang tidak stabil.

Dalam pendeteksian, nilai RGB yang dikumpulkan - mulai dari 0 hingga 1 - memberi makan MLP, melakukan pengenalan warna yang sebenarnya. Untuk MLP yang berjalan di Arduino, saya menggunakan Neurona - perpustakaan yang saya tulis untuk dengan mudah menggunakan JST di arduino, yang dapat diinstal dari Arduino IDE dengan Manajer Perpustakaan. Periksa juga pos ini untuk lebih jelasnya.

Seperti disebutkan sebelumnya, jaringan sudah terlatih dan siap untuk dideteksi dalam kode proyek. Itu dilatih menggunakan Playground yang saya kembangkan, menyematkan bobot yang disesuaikan ke kode, sehingga perpustakaan Neurona membuat jaringan siap untuk beroperasi.

Tes

Untuk tujuan informatif, beberapa warna diekstraksi dari kumpulan data untuk melakukan beberapa tes pengenalan:

Angka di luar gambar digunakan untuk identifikasi dan angka di dalam gambar menunjukkan kesalahan klasifikasi, merujuk pada warna mana yang diklasifikasikan sebagai gantinya. Warna-warna ini dicetak di kertas sulfit dengan printer inkjet - periksa kotak kertas kecil di video di awal posting ini - jadi objek terdiri dari bahan buram, cocok untuk deteksi warna.

Kode

Prototipe sensor warna
Kode untuk dikirim ke arduino terletak di dalam folder colorSensor. Pastikan sirkuit elektronik Anda dibuat sesuai dengan skema yang disajikan dan perpustakaan Neurona terpasang dengan benar (Anda dapat menginstal dari Arduino Library Manager).https://github.com/moretticb/ColorSensor/

Skema

Gunakan tombol sesuai petunjuk pada layar LCD

Proses manufaktur

  1. Kode Warna Resistor
  2. Alarm Tanaman Peringatan Haus
  3. Jam Kata Italia
  4. Sensor Kendala Sederhana dengan Arduino
  5. Sigfox kWh Meter
  6. Pemantau Suhu Bluetooth
  7. Kunci yang Dikendalikan Gerakan
  8. IC Pendamping
  9. Input Analog Terisolasi untuk Arduino
  10. Ukur waktu reaksi Anda