Isi kandungan:

Sensor Warna Bercakap, Berdasarkan Kit Suara AIY: 4 Langkah
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY: 4 Langkah

Video: Sensor Warna Bercakap, Berdasarkan Kit Suara AIY: 4 Langkah

Video: Sensor Warna Bercakap, Berdasarkan Kit Suara AIY: 4 Langkah
Video: Proyek Arduino : Alat Pendeteksi Dehidrasi Dengan Sensor Warna TCS 230 & Modul Suara DFPlayer Mini 2024, November
Anonim
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY
Sensor Warna Bercakap, Berdasarkan Kit Suara AIY

Setelah mengetahui sedikit mengenai Braille baru-baru ini, saya tertanya-tanya apakah saya dapat membina sesuatu menggunakan kit suara AIY untuk Raspberry Pi, yang mungkin mempunyai manfaat langsung bagi mereka yang cacat penglihatan. Oleh itu, seperti yang dijelaskan di bawah ini, anda akan menemui prototaip alat pengesan warna yang mudah untuk membaca penemuannya dengan kuat.

Versi sistem yang lebih terperinci mungkin berguna untuk orang yang mengalami masalah penglihatan atau rabun warna.

Sistem ini menggunakan Raspberry Pi dengan HAT suara AIY terpasang. Pelarian sensor TCS34725 RGB disambungkan ke port I2C HAT. Breakout mengandungi LED putih terang yang terang untuk menerangi objek yang akan dianalisis. Breakout ditempatkan di perumahan untuk mengoptimumkan dan menyeragamkan keadaan pengukuran.

Sensor tiga warna mengukur kira-kira tiga rentang frekuensi yang sama dengan sensor warna di mata anda. Kemudian nilai merah, hijau dan biru (RGB) digunakan untuk mengira keseluruhan kesan warna.

Perkara yang menarik mengenai sistem khas ini ialah sekarang memberitahu anda warna secara lisan, dengan menggunakan perintah "say" kit suara AIY. Sila lihat video yang disertakan.

Peranti ini mungkin berguna sebagai contoh untuk peranti sensor I2C yang disambungkan ke HAT suara AIY.

Langkah 1: Bahan Yang Digunakan

Raspberry Pi 3. ~ 35 US $ atau EUR

Kit suara AIY, dengan tajuk yang disolder ke HAT. ~ 25US $ atau EUR

Adafruit TCS34725 pelarian, dengan tajuk disolder. ~ 8 US $ atau EUR

Kabel pelompat.

Papan roti (pilihan)

Untuk perumahan sensor: - kapsul kopi "Dolce Gusto" terpakai - sekeping bulat kecil Forex 2mm (plat busa PVC), berdiameter kira-kira 37mm - bahan hitam yang tidak dapat dipantulkan untuk menutup dinding dalaman perumahan. Saya menggunakan busa getah hitam pelekat diri.

Pilihan: suis kecil untuk membangkitkan pengukuran

Beberapa tetes gam plastik dan pisau pemotong.

Langkah 2: Pemasangan dan Penggunaan

Pemasangan dan Penggunaan
Pemasangan dan Penggunaan
Pemasangan dan Penggunaan
Pemasangan dan Penggunaan
Pemasangan dan Penggunaan
Pemasangan dan Penggunaan

Raspberry Pi dengan suara AIY HAT telah disiapkan seperti yang dijelaskan dalam manual AIY. Sebelum pemasangan, header disolder ke port di HAT. Untuk penutup sensor, kapsul kopi "Dulce Gusto" dikosongkan, dibersihkan, dan bahagian bawahnya dibuang dengan hati-hati dengan pisau. Anda mungkin menggunakan sesuatu yang lain untuk tujuan ini, kapsul kopi mempunyai ukuran dan bentuk yang tepat. Sepotong bulat 2mm Forex dipotong dari piring, pelarian kemudian diletakkan di tengah-tengah plat Forex, kedudukan yang ditandai dengan pena, dan slot untuk tajuk pada pelarian dipotong pada posisi yang sesuai.

Sekarang bahagian Forex dilekatkan pada perumahan dan pelarian sensor terpasang pada plat Forex, menggunakan jalur Velcro. Kemudian dinding dalam ditutup dengan bahan hitam yang menyerap cahaya, saya menggunakan busa getah pelekat sendiri. Karton hitam juga boleh berfungsi. Sekarang, dengan menggunakan kabel jumper, port HAT "3.3V" I2C disambungkan ke "V in" pada sensor, Ground to Gnd, sda to sda dan scl to scl. Saya pernah menggunakan papan roti untuk menghubungkan kedua-dua bahagian, tetapi itu tidak diperlukan.

Letakkan skrip python AIY_TCS34725 di folder src dan jalankan skrip dari terminal dev, masukkan "sec / AIY_TCS34752.py". Anda mungkin perlu membuat skrip python dapat dilaksanakan terlebih dahulu. Apabila ditanya, letakkan unit sensor di atas objek yang akan diukur, tekan butang di peranti AIY dan tunggu satu atau dua saat.

Kemudian, berdasarkan nilai RGB dan putih yang diukur, peranti ini terlebih dahulu mengira nilai rona yang sesuai, kemudian menganggarkan warna berdasarkan nilai ini dan menyampaikannya secara lisan melalui sistem suara AIY, e. g. sebagai "merah tua", tetapi juga memberikan nilai rona. Nilai RGB, rona dan kecerahan (ringan, tepat) juga dicetak ke skrin.

Untuk mempermudah proses anotasi warna, nilai RGB diubah menjadi format HSV (rona, tepu, nilai). Ini memungkinkan untuk memberi anotasi warna ke rentang sudut tertentu (iaitu potongan pai), dan memilih warna berdasarkan nilai rona yang dihitung.

Anda perlu menormalkan peranti anda dengan rujukan putih dan hitam. Cukup ukur kepingan kertas paling putih dan hitam yang anda ada, lakukan pengukuran masing-masing, dan masukkan nilai ini sebagai nilai maksimum dan minimum ke dalam kod. Hanya nilai rujukan yang optimum yang akan memberikan pengecaman warna yang baik.

Satu masalah asas adalah refleksi. Sekiranya anda mempunyai objek dengan permukaan berkilau atau digilap, ia akan memantulkan banyak cahaya yang dipancarkan oleh LED, kelihatan jauh lebih ringan daripada yang sebenarnya. Anda mungkin menggunakan selaput membran untuk menyebarkan cahaya, tetapi anda mungkin perlu menerapkan faktor pembetulan.

Sekiranya objek lut, mungkin berguna untuk meletakkannya di atas kertas putih, jika tidak, jumlah cahaya yang dipantulkan akan menjadi kecil dan objek tersebut dilaporkan sebagai "hitam".

Sekiranya anda ingin mengukur warna objek yang memancarkan cahaya, anda harus mematikan LED pada pelarian dengan menyambungkan port "LED" pada pelarian ke "Tanah". Sekarang tetapkan nilai normalisasi dengan sewajarnya.

Masalah umum lain ialah pencahayaan objek. LED putih hangat pada pelarian memancarkan spektrum cahaya yang tidak berterusan. Oleh itu, warna tertentu mungkin berlebihan atau kurang ditunjukkan dalam spektrum RGB. Untuk maklumat lebih lanjut mengenai topik ini, sila perhatikan instruksiku sebelumnya mengenai pewarna / fotometer dan spektrometer:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Langkah 3: Kodnya

Kod tersebut
Kod tersebut

Kod tersebut adalah gabungan dari pengubahsuaian kod dari manual suara AIY, dan kod sensor TCS34725 oleh Bradspi.

Saya juga pernah cuba menggunakan kod python TCS34725 dari Adafruit, tetapi menghadapi masalah menjalankannya dan beberapa kod lain yang menggunakan perpustakaan luaran dalam kombinasi dengan AIY HAT. Sebarang pertolongan dialu-alukan.

Seperti disebutkan sebelumnya, anotasi warna didasarkan pada transformasi pada nilai RGB ke rona. Anda mesti menetapkan tetapan normalisasi berdasarkan ukuran eksperimen bahan penghormatan putih dan hitam. Isi nilai mutlak untuk R, G dan B min atau maksimum yang sesuai.

Skrip menggunakan versi baru dari perintah "say" yang memungkinkan untuk mengatur volume dan nada. Sekiranya berlaku, anda mungkin perlu mengemas kini fail pemacu audio.py dan tty atau menghapus "bahagian kelantangan dan nada" dari skrip.

#! / usr / bin / env python3 # Skrip ini adalah penyesuaian dari skrip servo_demo.py untuk suara AIY HAT, # dioptimumkan untuk pengecaman warna menggunakan impak pelarian Afafruit TCS34725 aiy.audio import aiy.cloudspeech import aiy.voicehat #dari gpiozero import LED # boleh berguna untuk LED luaran pada servo-port #dari gpiozero import Butang # boleh membantu untuk butang luaran pada servo-port import waktu import bus smbus = smbus. SMBus (1) import colorsys def hue2color (rona): # tafsiran warna berdasarkan nilai rona yang dikira jika ((rona> 12) dan (rona 25) dan (rona 69) dan (rona 164) dan (rona 194) dan (rona 269) dan (rona 319) atau (rona <20)): warna = "merah" kembali warna lain: cetak ("ada yang tidak kena")

def tcs34725 (): # pengukuran dan tafsiran.

# Pengukuran dilakukan dengan skrip Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # version # hendaklah 0x44 jika ver == 0x44: print ("Device found / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ENABLE register bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Hidupkan, Sensor 0x02 RGB diaktifkan bus.write_byte (0x29, 0x80 | 0x14) # Hasil pembacaan mula mendaftar 14, LSB kemudian data MSB = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] merah = data [3] << 8 | data [2] hijau = data [5] << 8 | data [4] biru = data [7] << 8 | data [6] crgb = "Kiraan mutlak: C:% s, R:% s, G:% s, B:% s / n"% (jelas, merah, hijau, biru) masa cetak (crgb). tidur (1) lain: cetak ("Peranti tidak dijumpai / n") # normalisasi dan transformasi nilai RGBW yang diukur col = "" # Nilai maksimum Faktor normalisasi, mesti didefinisikan secara eksperimen # mis. lwn sehelai kertas putih. Periksa dan betulkan dari semasa ke semasa. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Latar belakang / Nilai minimum faktor normalisasi, mesti ditentukan secara eksperimen # mis. vs kepingan kertas hitam. Periksa dan betulkan dari semasa ke semasa. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # nilai dinormalisasi, antara 0 dan 1 rel_bright = ((jelas - min_bright) / (max_bright - min_bright)) rel_red = ((merah - min_red) / (max_red - min_red)) rel_green = ((hijau - min_green) / (max_green - min_green)) rel_blue = ((biru - min_blue) / (max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hsv_col [0] hsv_col [0] jika rel_bright> 0.9: col = "white" # if sangat terang -> elif putih rel_bright hitam lain: col = hue2color (hue) # pemilihan warna mengikut nilai rona # cetak ("nilai relatif terang, merah, hijau, biru:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("Nilai HSV (hue, saturation, value):", hsv_col) # print ("hue in °", hue) kembali [col, rel_bright, rel_red, rel_green, rel_blue, rona]

def utama ():

butang = aiy.voicehat.get_button () # ubah Status butang dipimpin = aiy.voicehat.get_led () # ubah status Button-LED aiy.audio.get_recorder (). start () # buttoni = Button (5) # sensor jarak atau butang luaran lain, disambungkan ke servo3 / GPIO 05

aiy.audio.say ("Hello!", volume = 50, pitch = 100) # volume dan nada memerlukan semakan November 2017 pemacu audio.py dan _tty.py!

aiy.audio.say ("Untuk memulakan, gerakkan sensor di atas objek. Kemudian tekan butang biru", volume = 50, nada = 100) cetak ("Untuk mengaktifkan pengukuran warna tempat sensor di atas objek, kemudian tekan butang biru ") sementara True: led.set_state (aiy.voicehat. LED. ON) butang.wait_for_press () # untuk butang luaran, ganti butang dengan butang led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Mengukur ",, volume = 50, nada = 100) hasil = tcs34725 () # membangkitkan pengukuran dan interpretasi col = hasil [0] # warna, sebagai teks hue = str (int (hasil [5])) # rona dalam °, sebagai teks r_red = str (int (hasil [2] * 255)) Nilai # R, sebagai teks r_green = str (int (hasil [3] * 255)) # Nilai G, sebagai teks r_blue = str (int (hasil [4] * 255)) # Nilai B, sebagai teks r_bright = str (int (hasil [1] * 100)) Nilai # W, sebagai teks dipimpin.set_state (aiy.voicehat. LED. OFF) jika col == "putih "atau col ==" hitam ": terang =" "elif (hasil [1]> 0.69): # kecerahan / cahaya warna terang =" cahaya "elif (hasil [1] <0.25): terang =" gelap "yang lain: terang = "sederhana" # berkomunikasi t dia hasilkan color_text = ("Warna objek adalah" + terang + "" + col) cetak (color_text) aiy.audio.say (color_text, volume = 75, pitch = 100) hue_text = ("Nilai rona adalah "+ hue +" darjah ") cetak (hue_text) aiy.audio.say (hue_text, volume = 75, pitch = 100)

jika _name_ == '_main_': utama ()

Langkah 4: Beberapa Pautan dan Catatan

Lembaran data sensor TCS34725 boleh didapati di sini:

Kod untuk membaca sensor yang telah saya gunakan dijelaskan di sini:

Anda mungkin mendapat beberapa maklumat tambahan mengenai pengukuran warna dengan ini dan sensor lain dalam arahan saya sebelumnya:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Disyorkan: