Sommario:

Un sensore di colore parlante, basato sul kit vocale AIY: 4 passaggi
Un sensore di colore parlante, basato sul kit vocale AIY: 4 passaggi

Video: Un sensore di colore parlante, basato sul kit vocale AIY: 4 passaggi

Video: Un sensore di colore parlante, basato sul kit vocale AIY: 4 passaggi
Video: Recensione 70Mai OMNI: la DASH CAM A 360° CON ADAS CI È PIACIUTA! 2024, Dicembre
Anonim
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY
Un sensore di colore parlante, basato sul kit vocale AIY

Avendo imparato qualcosa sul Braille di recente, mi chiedevo se potevo costruire qualcosa usando il kit vocale AIY per Raspberry Pi, che potrebbe avere un beneficio reale per i non vedenti. Così descritto di seguito troverai un prototipo di un semplice dispositivo di rilevamento del colore che legge ad alta voce i suoi risultati.

Una versione più elaborata di questo sistema potrebbe essere utile per le persone con problemi di vista o daltonismo.

Il sistema utilizza un Raspberry Pi con un HAT vocale AIY collegato. Un breakout del sensore RGB TCS34725 è collegato alla porta I2C dell'HAT. Il breakout contiene un luminoso LED bianco caldo per illuminare l'oggetto da analizzare. Il breakout è stato collocato in un alloggiamento per ottimizzare e standardizzare le condizioni di misurazione.

Il sensore a tre colori misura circa le stesse tre gamme di frequenza dei sensori di colore nei tuoi occhi. Quindi i valori di rosso, verde e blu (RGB) vengono utilizzati per calcolare l'impressione cromatica complessiva.

La cosa bella di questo sistema speciale è che ora ti dice il colore verbalmente, usando il comando "say" dei kit vocali AIY. Si prega di dare un'occhiata al video allegato.

Il dispositivo potrebbe anche essere utile come esempio per un dispositivo sensore I2C collegato all'HAT vocale AIY.

Passaggio 1: materiali utilizzati

Raspberry Pi 3. ~ 35 US$ o EUR

Kit vocale AIY, con intestazioni saldate al HAT. ~ 25US$ o EUR

Breakout Adafruit TCS34725, con un'intestazione saldata. ~ 8 US$ o EUR

Cavi di collegamento.

Una breadboard (opzionale)

Per l'alloggiamento del sensore:- una capsula di caffè "Dolce Gusto" usata- un piccolo pezzo rotondo di 2 mm di Forex (piatto in schiuma di PVC), di circa 37 mm di diametro- un materiale nero non riflettente per coprire le pareti interne dell'alloggiamento. Ho usato schiuma di gomma nera autoadesiva.

Opzionale: un piccolo interruttore per evocare le misure

Qualche goccia di colla per plastica e un taglierino.

Passaggio 2: assemblaggio e utilizzo

Assemblaggio e utilizzo
Assemblaggio e utilizzo
Assemblaggio e utilizzo
Assemblaggio e utilizzo
Assemblaggio e utilizzo
Assemblaggio e utilizzo

Il Raspberry Pi con AIY voice HAT è stato configurato come descritto nel manuale AIY. Prima dell'assemblaggio, le intestazioni sono state saldate alle porte dell'HAT. Per l'alloggiamento del sensore è stata svuotata, pulita una capsula di caffè "Dulce Gusto" e rimossa con cura una parte del fondo con un coltello. Puoi usare qualcos'altro per questo scopo, la capsula del caffè aveva solo le dimensioni e la forma giuste. Un pezzo rotondo di Forex da 2 mm è stato tagliato da una piastra, il breakout è stato quindi posizionato centralmente sulla piastra Forex, la posizione contrassegnata con un pennarello e una fessura per l'intestazione sul breakout è stata tagliata nella posizione appropriata.

Ora il pezzo in Forex è stato incollato sull'alloggiamento e il sensore di rottura è stato attaccato alla piastra in Forex, utilizzando una striscia di velcro. Quindi le pareti interne sono state ricoperte con un materiale nero che assorbe la luce, ho usato una gommapiuma autoadesiva. Anche il cartone nero dovrebbe funzionare. Ora, usando cavi jumper, la porta I2C "3.3V" dell'HAT è stata collegata a "V in" sul sensore, Ground a Gnd, sda a sda e scl a scl. Avevo usato una breadboard per collegare entrambe le parti, ma non è necessario.

Posiziona lo script python AIY_TCS34725 nella cartella src ed esegui lo script dal terminale di sviluppo, inserendo "sec/AIY_TCS34752.py". Potrebbe essere necessario rendere eseguibile prima lo script python. Quando richiesto, posizionare l'unità sensore sull'oggetto da misurare, premere il pulsante nel dispositivo AIY e attendere un secondo o due.

Quindi, in base ai valori RGB e bianco misurati, il dispositivo calcola prima il valore della tonalità corrispondente, quindi stima il colore in base a questo valore e li comunica verbalmente tramite il sistema vocale AIY, ad es. G. come "rosso scuro", ma dà anche il valore della tonalità. Anche i valori RGB, tonalità e luminosità (luminosità, per l'esattezza) vengono stampati sullo schermo.

Per semplificare il processo di annotazione del colore, i valori RGB vengono trasformati in formato HSV (tonalità, saturazione, valore). Ciò consente di annotare un colore in un determinato intervallo di angoli (ad esempio una fetta di torta) e selezionare il colore in base al valore di tonalità calcolato.

Devi normalizzare il tuo dispositivo rispetto a un riferimento bianco e nero. Basta misurare i pezzi di carta più bianchi e più neri che hai a disposizione, prendere una misura ciascuno e inserire questi valori come valori massimi e minimi nel codice. Solo i valori di riferimento ottimali daranno un buon riconoscimento del colore.

Un problema fondamentale è la riflessione. Se hai un oggetto con una superficie lucida o lucida, rifletterà molta della luce emessa dal LED, apparendo molto più leggero di quanto non sia in realtà. È possibile utilizzare un foglio di membrana per diffondere la luce, ma potrebbe essere necessario implementare un fattore di correzione.

Nel caso di oggetti traslucidi, potrebbe essere utile posizionarli su un foglio bianco, altrimenti la quantità di luce riflessa sarà troppo piccola e l'oggetto segnalato come "nero".

Se vuoi misurare il colore degli oggetti che emettono luce, devi spegnere il LED sul breakout collegando la porta "LED" sul breakout a "Ground". Ora imposta i valori di normalizzazione di conseguenza.

Un altro problema generale è l'illuminazione dell'oggetto. Il LED bianco caldo sul breakout emette uno spettro di luce non continuo. Pertanto alcuni colori potrebbero essere sovra o sottorappresentati nello spettro RGB. Per ulteriori informazioni su questo argomento, dai un'occhiata alle mie precedenti istruzioni su colorimetri/fotometri e spettrometri:

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

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

Passaggio 3: il codice

Il codice
Il codice

Il codice è una combinazione di una modifica di un codice dal manuale vocale AIY e il codice del sensore TCS34725 di Bradspi.

Avevo anche provato a utilizzare il codice Python TCS34725 di Adafruit, ma ho riscontrato problemi durante l'esecuzione di questo e di altri codici che utilizzano librerie esterne in combinazione con AIY HAT. Qualsiasi aiuto è benvenuto.

Come accennato in precedenza, l'annotazione del colore si basa su una trasformazione dei valori RGB in tonalità. È necessario impostare le impostazioni di normalizzazione basate su misurazioni sperimentali di materiali di riverenza bianchi e neri. Compila i valori assoluti per R, G e B min o max di conseguenza.

Lo script utilizza una nuova versione del comando "say" che permette di regolare volume e tono. Nel caso, potrebbe essere necessario aggiornare i file del driver audio.py e tty o eliminare le "parti volume e pitch" dallo script.

#!/usr/bin/env python3# Questo script è un adattamento dello script servo_demo.py per AIY voice HAT, # ottimizzato per il riconoscimento del colore utilizzando il breakout Afafruit TCS34725 import aiy.audio import aiy.cloudspeech import aiy.voicehat #from gpiozero import LED # potrebbe essere utile per un LED esterno su servo-port #from gpiozero import Button # potrebbe essere utile per un pulsante esterno su servo-port import time import smbus bus = smbus. SMBus(1) import colorsys def hue2color (tonalità): # interpretazione del colore basata sui valori di tonalità calcolati if ((tonalità > 12) e (tonalità 25) e (tonalità 69) e (tonalità 164) e (tonalità 194) e (tonalità 269) e (tonalità 319) oppure (tonalità< 20)): color="rosso" return color else: print ("qualcosa è andato storto")

def tcs34725(): # misurazione e interpretazione.

# La misurazione viene eseguita dallo script Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte(0x29, 0x80|0x12) ver = bus.read_byte(0x29) # version # dovrebbe essere 0x44 se ver == 0x44: print ("Dispositivo trovato\n") bus.write_byte(0x29, 0x80|0x00) # 0x00 = ENABLE register bus.write_byte(0x29, 0x01|0x02) # 0x01 = Accendi, 0x02 Sensori RGB abilitati bus.write_byte(0x29, 0x80|0x14) # La lettura dei risultati avvia il registro 14, LSB poi MSB data = bus.read_i2c_block_data(0x29, 0) clear = clear = data[1] << 8 | data[0] rosso = data[3] << 8 | dati[2] verde = dati[5] << 8 | dati[4] blu = dati[7] << 8 | data[6] crgb = "Conteggi assoluti: C: %s, R: %s, G: %s, B: %s\n" % (clear, red, green, blue) print (crgb) time.sleep(1) else: print ("Dispositivo non trovato\n") # normalizzazione e trasformazione dei valori RGBW misurati # Valori massimi Fattori di normalizzazione, da definire sperimentalmente # es. contro un foglio di carta bianco. Controllare e correggere di volta in volta. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Fattori di normalizzazione valori di fondo/minimi, devono essere definiti sperimentalmente # es. contro foglio di carta nero. Controllare e correggere di volta in volta. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # valori normalizzati, compresi tra 0 e 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((red - min_red)/(max_red - min_red)) rel_green = ((green - min_green)/(max_green - min_green)) rel_blue = ((blue - 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 = "bianco" # se molto luminoso -> bianco elif rel_bright nero else: col = hue2color(hue) # selezione del colore per valori di tonalità # print("valori relativi bright, red, green, blue:") # print (rel_bright, rel_red, rel_green, rel_blue) # print("Valori HSV (hue, saturation, value):", hsv_col) # print ("hue in ° ", hue) return [col, rel_bright, rel_red, rel_green, rel_blue, tonalità]

def principale():

button = aiy.voicehat.get_button() # cambia LED di stato del pulsante = aiy.voicehat.get_led() # cambia lo stato del LED del pulsante aiy.audio.get_recorder().start() # buttoni= Button(5) # sensore di distanza o altro pulsante esterno, collegato a servo3/GPIO 05

aiy.audio.say("Hello!",, volume=50, pitch=100) # volume e pitch richiedono la revisione di novembre 2017 del driver audio.py e _tty.py!

aiy.audio.say("Per iniziare, sposta il sensore sopra l'oggetto. Quindi premi il pulsante blu",, volume=50, passo = 100) print("Per attivare la misurazione del colore posizionare il sensore sopra l'oggetto, quindi premere il pulsante blu ") while True: led.set_state(aiy.voicehat. LED. ON) button.wait_for_press() # per pulsante esterno, sostituisci pulsante con buttoni led.set_state(aiy.voicehat. LED. BLINK) aiy.audio.say(" Misurazione",, volume=50, altezza = 100) risultato = tcs34725() # evoca misurazione e interpretazione col = risultato[0] # colore, come testo tonalità = str(int(risultato[5])) # tonalità in °, come testo r_rosso = str(int(risultato[2]*255)) # Valore R, come testo r_verde = str(int(risultato[3]*255)) # Valore G, come testo r_blu = str(int(risultato[4]*255)) # Valore B, come testo r_bright = str(int(result[1]*100)) # Valore W, come testo led.set_state(aiy.voicehat. LED. OFF) if col == "bianco " o col=="nero": luminoso = "" elif (risultato[1] >0.69): #luminosità/luminosità del colore luminoso ="chiaro" elif (risultato[1] <0.25): luminoso ="scuro" else: luminoso ="medio" # comunicante t ne risulta color_text =("Il colore dell'oggetto è " + bright + " " + col) print (color_text) aiy.audio.say(color_text,, volume=75, pitch=100) hue_text = ("Il valore della tonalità è "+ tonalità+ " gradi") print (tonalità_testo) aiy.audio.say(tonalità_testo,, volume=75, altezza = 100)

if _name_ == '_main_': main()

Passaggio 4: alcuni collegamenti e osservazioni

La scheda tecnica del sensore TCS34725 è disponibile qui:

Il codice per leggere il sensore che ho usato è stato descritto qui:

Potresti trovare alcune informazioni aggiuntive sulle misurazioni del colore con questo e un altro sensore nelle mie precedenti istruzioni:

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

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

Consigliato: