Daftar Isi:

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

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

Video: Sensor Warna Berbicara, Berdasarkan Kit Suara AIY: 4 Langkah
Video: Haduww.. Niat Kasih Minum Malah Dikasih Kartu Merah sama Wasit #shorts 2024, November
Anonim
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY
Sensor Warna Berbicara, Berdasarkan Kit Suara AIY

Setelah belajar sedikit tentang Braille baru-baru ini, saya bertanya-tanya apakah saya dapat membuat sesuatu menggunakan kit suara AIY untuk Raspberry Pi, yang mungkin memiliki manfaat nyata bagi tunanetra. Jadi dijelaskan berikut ini Anda akan menemukan prototipe perangkat pendeteksi warna sederhana yang membacakan temuannya dengan keras.

Versi yang lebih rumit dari sistem ini mungkin berguna bagi orang-orang dengan gangguan penglihatan atau buta warna.

Sistem ini menggunakan Raspberry Pi dengan HAT suara AIY terpasang. Breakout sensor RGB TCS34725 terhubung ke port I2C HAT. Breakout berisi LED putih hangat terang untuk menerangi objek yang akan dianalisis. Breakout ditempatkan di housing untuk mengoptimalkan dan menstandardisasi kondisi pengukuran.

Tiga sensor warna mengukur sekitar tiga rentang frekuensi yang sama dengan sensor warna di mata Anda. Kemudian nilai merah, hijau dan biru (RGB) digunakan untuk menghitung kesan warna secara keseluruhan.

Hal yang menyenangkan tentang sistem khusus ini adalah sekarang ia memberi tahu Anda warna secara verbal, menggunakan perintah "katakan" dari kit suara AIY. Silakan lihat di video terlampir.

Perangkat mungkin juga berguna sebagai contoh untuk perangkat sensor I2C yang terhubung ke HAT suara AIY.

Langkah 1: Bahan yang Digunakan

Raspberry Pi 3. ~ 35 US$ atau EUR

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

Adafruit TCS34725 breakout, dengan header yang disolder. ~ 8 US$ atau EUR

Kabel jumper.

Papan tempat memotong roti (opsional)

Untuk rumah sensor:- kapsul kopi bekas "Dolce Gusto"- potongan bulat kecil Forex 2mm (pelat busa PVC), berdiameter sekitar 37mm- bahan hitam yang tidak memantulkan untuk menutupi dinding bagian dalam rumahan. Saya menggunakan busa karet hitam berperekat.

Opsional: sakelar kecil untuk membangkitkan pengukuran

Beberapa tetes lem plastik dan pisau pemotong.

Langkah 2: Perakitan dan Penggunaan

Perakitan dan Penggunaan
Perakitan dan Penggunaan
Perakitan dan Penggunaan
Perakitan dan Penggunaan
Perakitan dan Penggunaan
Perakitan dan Penggunaan

Raspberry Pi dengan HAT suara AIY telah diatur seperti yang dijelaskan dalam manual AIY. Sebelum perakitan, header disolder ke port pada HAT. Untuk rumah sensor, kapsul kopi "Dulce Gusto" dikosongkan, dibersihkan, dan bagian bawahnya dilepas dengan hati-hati dengan pisau. Anda dapat menggunakan sesuatu yang lain untuk tujuan ini, kapsul kopi hanya memiliki ukuran dan bentuk yang tepat. Potongan bulat Forex 2mm dipotong dari piring, breakout kemudian ditempatkan secara terpusat di piring Forex, posisi ditandai dengan pena, dan slot untuk header pada breakout dipotong pada posisi yang sesuai.

Sekarang bagian Forex direkatkan ke housing dan sensor breakout terpasang pada pelat Forex, menggunakan strip Velcro. Kemudian dinding bagian dalam ditutupi dengan bahan hitam yang menyerap cahaya, saya menggunakan busa karet berperekat. Karton hitam juga bisa digunakan. Sekarang, dengan menggunakan kabel jumper, port I2C "3.3V" dari HAT terhubung ke "V in" pada sensor, Ground ke Gnd, sda ke sda dan scl ke scl. Saya telah menggunakan papan tempat memotong roti untuk menghubungkan kedua bagian, tetapi itu tidak perlu.

Tempatkan skrip python AIY_TCS34725 di folder src dan jalankan skrip dari terminal dev, masukkan "sec/AIY_TCS34752.py". Anda mungkin harus membuat skrip python dapat dieksekusi terlebih dahulu. Saat diminta, letakkan unit sensor di atas objek yang akan diukur, tekan tombol di perangkat AIY dan tunggu satu atau dua detik.

Kemudian, berdasarkan nilai RGB dan putih yang diukur, perangkat terlebih dahulu menghitung nilai rona yang sesuai, kemudian memperkirakan warna berdasarkan nilai ini dan mengomunikasikannya secara verbal melalui sistem suara AIY, mis. G. sebagai "merah tua", tetapi juga memberikan nilai rona. Nilai RGB, hue and brightness (lightness, tepatnya) juga dicetak ke layar.

Untuk mempermudah proses anotasi warna, nilai RGB ditransformasikan ke dalam format HSV (hue, saturation, value). Ini memungkinkan untuk membubuhi keterangan warna pada rentang sudut tertentu (yaitu irisan pai), dan memilih warna berdasarkan nilai rona yang dihitung.

Anda perlu menormalkan perangkat Anda terhadap referensi putih dan hitam. Cukup ukur potongan kertas paling putih dan paling hitam yang Anda miliki, lakukan pengukuran masing-masing, dan tempatkan nilai-nilai ini sebagai nilai maksimum dan minimum ke dalam kode. Hanya nilai referensi optimal yang akan memberikan pengenalan warna yang baik.

Salah satu masalah mendasar adalah refleksi. Jika Anda memiliki objek dengan permukaan yang mengkilap atau dipoles, benda itu akan memantulkan banyak cahaya yang dipancarkan oleh LED, tampak jauh lebih terang daripada yang sebenarnya. Anda dapat menggunakan selembar membran untuk menyebarkan cahaya, tetapi Anda mungkin perlu menerapkan faktor koreksi.

Dalam kasus objek tembus cahaya, mungkin berguna untuk menempatkannya di atas kertas putih, jika tidak, jumlah cahaya yang dipantulkan akan menjadi kecil dan objek dilaporkan sebagai "hitam".

Jika ingin mengukur warna benda yang memancarkan cahaya, sebaiknya matikan LED pada breakout dengan menghubungkan port "LED" pada breakout ke "Ground". Sekarang atur nilai normalisasi yang sesuai.

Masalah umum lainnya adalah iluminasi objek. LED putih hangat pada breakout memancarkan spektrum cahaya non-kontinyu. Oleh karena itu warna tertentu mungkin terlalu atau kurang terwakili dalam spektrum RGB. Untuk informasi lebih lanjut tentang topik ini, silakan lihat instruksi saya sebelumnya tentang kolorimeter/fotometer dan spektrometer:

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

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

Langkah 3: Kode

Kode
Kode

Kode tersebut merupakan kombinasi dari modifikasi kode dari manual suara AIY, dan kode sensor TCS34725 oleh Bradspi.

Saya juga mencoba menggunakan kode python TCS34725 dari Adafruit, tetapi mengalami masalah saat menjalankan ini dan beberapa kode lain yang menggunakan perpustakaan eksternal dalam kombinasi dengan AIY HAT. Bantuan apa pun diterima.

Seperti disebutkan sebelumnya, anotasi warna didasarkan pada transformasi pada RGB ke nilai rona. Anda harus mengatur pengaturan normalisasi berdasarkan pengukuran eksperimental bahan penghormatan putih dan hitam. Isi nilai absolut untuk R, G dan B min atau maks.

Script menggunakan versi baru dari perintah "say" yang memungkinkan untuk mengatur volume dan nada. Dalam hal ini, Anda mungkin harus memperbarui file driver audio.py dan tty atau menghapus "bagian volume dan nada" dari skrip.

#!/usr/bin/env python3# Skrip ini merupakan adaptasi dari skrip servo_demo.py untuk AIY voice HAT, # dioptimalkan untuk pengenalan warna menggunakan breakout Afafruit TCS34725 import aiy.audio import aiy.cloudspeech import aiy.voicehat #dari gpiozero impor LED # dapat membantu untuk LED eksternal pada port servo #dari Tombol impor gpiozero # dapat membantu untuk tombol eksternal pada port servo waktu impor impor smbus bus = smbus. SMBus(1) import colorsys def hue2color (hue): # interpretasi warna berdasarkan nilai hue yang dihitung jika ((hue> 12) dan (hue 25) dan (hue 69) dan (hue 164) dan (hue 194) dan (hue 269) dan (hue 319) atau (hue< 20)): color="red" mengembalikan warna lain: print ("ada yang tidak beres")

def tcs34725(): # pengukuran dan interpretasi.

# 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) # versi # harus 0x44 jika ver == 0x44: print ("Device found\n") bus.write_byte(0x29, 0x80|0x00) # 0x00 = ENABLE register bus.write_byte(0x29, 0x01|0x02) # 0x01 = Power on, Sensor 0x02 RGB diaktifkan bus.write_byte(0x29, 0x80|0x14) # Hasil pembacaan mulai register 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 = "Jumlah mutlak: C: %s, R: %s, G: %s, B: %s\n" % (bening, merah, hijau, biru) print (crgb) time.sleep(1) else: print ("Perangkat tidak ditemukan\n") # normalisasi dan transformasi nilai RGBW terukur # Nilai maksimum Faktor normalisasi, harus ditentukan secara eksperimental # mis vs. selembar kertas putih. Periksa dan perbaiki dari waktu ke waktu. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Latar belakang/Faktor normalisasi nilai minimum, harus didefinisikan secara eksperimental # mis. vs. kertas hitam. Periksa dan perbaiki dari waktu ke waktu. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # nilai yang dinormalisasi, antara 0 dan 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((red - 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]*359 if rel_bright > 0.9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color(hue) # pemilihan warna berdasarkan nilai hue # print("nilai relatif cerah, merah, hijau, biru:") # print (rel_bright, rel_red, rel_green, rel_blue) # print("Nilai HSV (hue, saturation, value):", hsv_col) # print ("hue in ° ", hue) return [col, rel_bright, rel_red, rel_green, rel_biru, rona]

def utama():

button = aiy.voicehat.get_button() # ubah Status tombol led = aiy.voicehat.get_led() # ubah status Button-LED aiy.audio.get_recorder().start() # buttoni= Button(5) # sensor jarak atau tombol eksternal lainnya, terhubung ke servo3/GPIO 05

aiy.audio.say("Halo!",, volume=50, pitch=100) # volume dan pitch memerlukan revisi driver audio.py dan _tty.py November 2017!

aiy.audio.say("Untuk memulai, gerakkan sensor di atas objek. Kemudian tekan tombol biru",, volume=50, pitch = 100) print("Untuk mengaktifkan sensor tempat pengukuran warna di atas objek, lalu tekan tombol biru ") while True: led.set_state(aiy.voicehat. LED. ON) button.wait_for_press() # untuk tombol eksternal, ganti tombol dengan buttoni led.set_state(aiy.voicehat. LED. BLINK) aiy.audio.say(" Pengukuran",, volume=50, pitch = 100) result = tcs34725() # membangkitkan pengukuran dan interpretasi col = result[0] # warna, sebagai teks hue = str(int(result[5])) # hue in °, sebagai teks r_red = str(int(hasil[2]*255)) # Nilai R, sebagai teks r_hijau = str(int(hasil[3]*255)) # Nilai G, sebagai teks r_blue = str(int(hasil[4]*255)) # Nilai B, sebagai teks r_bright = str(int(result[1]*100)) # Nilai W, sebagai teks led.set_state(aiy.voicehat. LED. OFF) jika col == "putih " or col=="black": bright = "" elif (result[1] >0.69): #brightness/lightness of color bright ="light" elif (result[1] <0.25): bright ="dark" else: bright ="medium" # berkomunikasi t dia menghasilkan color_text =("Warna objek adalah " + bright + " " + col) print (color_text) aiy.audio.say(color_text,, volume=75, pitch=100) hue_text = ("Nilai hue adalah "+ hue+ " derajat") print (hue_text) aiy.audio.say(hue_text,, volume=75, pitch = 100)

if _name_ == '_main_': main()

Langkah 4: Beberapa Tautan dan Komentar

Lembar data sensor TCS34725 dapat ditemukan di sini:

Kode untuk membaca sensor yang saya gunakan dijelaskan di sini:

Anda mungkin menemukan beberapa informasi tambahan tentang pengukuran warna dengan ini dan sensor lain dalam instruksi saya sebelumnya:

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

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

Direkomendasikan: