Innholdsfortegnelse:

En talende fargesensor, basert på AIY Voice Kit: 4 trinn
En talende fargesensor, basert på AIY Voice Kit: 4 trinn

Video: En talende fargesensor, basert på AIY Voice Kit: 4 trinn

Video: En talende fargesensor, basert på AIY Voice Kit: 4 trinn
Video: Part 03 - Moby Dick Audiobook by Herman Melville (Chs 026-040) 2024, November
Anonim
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit
En talende fargesensor, basert på AIY Voice Kit

Etter å ha lært litt om punktskrift nylig, lurte jeg på om jeg kunne bygge noe ved hjelp av AIY-talesettet for Raspberry Pi, som kan ha en virkelig fordel for synshemmede. Så beskrevet i det følgende finner du en prototype av en enkel fargedeteksjonsenhet som leser funnene høyt.

En mer forseggjort versjon av dette systemet kan være nyttig for personer med nedsatt syn eller fargeblindhet.

Systemet bruker en Raspberry Pi med en AIY stemmehatt festet. En TCS34725 RGB -sensorbrudd er koblet til I2C -porten på HAT. Utbruddet inneholder en lysende varm hvit LED for å belyse objektet som skal analyseres. Utbruddet ble plassert i et hus for å optimalisere og standardisere måleforholdene.

De tre fargesensoren måler omtrent de samme tre frekvensområdene som fargesensorene i øynene dine. Deretter brukes de røde, grønne og blå (RGB) verdiene for å beregne det totale fargeinntrykket.

Det fine med dette spesielle systemet er at det nå forteller deg fargen verbalt, ved hjelp av AIY -talesettets "si" -kommando. Ta en titt på den medfølgende videoen.

Enheten kan også være nyttig som et eksempel for en I2C -sensorenhet som er koblet til AIY voice HAT.

Trinn 1: Materialer som brukes

Raspberry Pi 3. ~ 35 US $ eller EUR

AIY talesett, med overskrifter loddet til HATEN. ~ 25US $ eller EUR

Adafruit TCS34725 breakout, med en header loddet. ~ 8 US $ eller EUR

Hoppekabler.

Et brødbrett (valgfritt)

For sensorhuset:- en brukt "Dolce Gusto" kaffekapsel- et lite rundt stykke 2 mm Forex (PVC-skumplate), ca 37 mm diameter- et ikke-reflekterende svart materiale for å dekke husets indre vegger. Jeg brukte selvklebende svart gummiskum.

Valgfritt: en liten bryter for å fremkalle målingene

Noen dråper plastlim og en kniv.

Trinn 2: Montering og bruk

Montering og bruk
Montering og bruk
Montering og bruk
Montering og bruk
Montering og bruk
Montering og bruk

Raspberry Pi med AIY voice HAT ble satt opp som beskrevet i AIY manualen. Før montering ble hoder loddet til portene på HAT. For huset til sensoren ble en "Dulce Gusto" kaffekapsel tømt, rengjort og en del av bunnen fjernet forsiktig med en kniv. Du kan bruke noe annet til dette formålet, kaffekapslen hadde akkurat riktig størrelse og form. Et rundt stykke på 2 mm Forex ble kuttet fra en tallerken, utbruddet ble deretter plassert sentralt på Forex -tallerkenen, posisjonen merket med en tusj og et spor for hodet på utbruddet ble kuttet i riktig posisjon.

Nå ble Forex -stykket limt på huset og sensorbrudd festet til Forex -platen ved hjelp av en borrelås. Deretter ble de indre veggene dekket med et lett absorberende svart materiale, jeg brukte et selvklebende gummiskum. Svart papp burde også fungere. Ved hjelp av jumperkabler ble I2C "3.3V" -porten på HAT koblet til "V in" på sensoren, Ground to Gnd, sda to sda og scl to scl. Jeg hadde brukt et brødbrett for å koble begge delene, men det er ikke nødvendig.

Plasser AIY_TCS34725 python -skriptet i src -mappen og kjør skriptet fra dev -terminalen, og skriv inn "sec/AIY_TCS34752.py". Du må kanskje gjøre python -skriptet kjørbart først. Når du blir spurt, plasser sensorenheten over objektet som skal måles, trykk på knappen i AIY -enheten og vent ett eller to sekunder.

Basert på de målte RGB- og hvite verdiene, beregner enheten først den tilsvarende fargetonen, deretter estimerer fargen basert på denne verdien og kommuniserer dem verbalt via AIY -stemmesystemet, f.eks. g. som "mørkerød", men gir også nyanseverdien. RGB, fargetone og lysstyrke (lyshet, for å være nøyaktig) skrives også ut på skjermen.

For å forenkle fargeanmerkingsprosessen, blir RGB -verdiene transformert til HSV -format (fargetone, metning, verdi). Dette gjør det mulig å kommentere en farge i et bestemt område av vinkler (dvs. en kakeskive), og velge fargen basert på den beregnede fargetonen.

Du må normalisere enheten mot en hvit og en svart referanse. Bare mål de hviteste og svarteste papirbitene du har tilgjengelig, ta en måling hver, og legg disse verdiene som maksimums- og minimumsverdier i koden. Bare optimale referanseverdier gir god fargegjenkjenning.

Et grunnleggende problem er refleksjon. Hvis du har et objekt med en blank eller blank overflate, reflekterer det mye av lyset som LED -en gir ut, og det ser mye lettere ut enn det egentlig er. Du kan bruke et membranark for å spre lyset, men du må kanskje implementere en korreksjonsfaktor.

Når det gjelder gjennomsiktige objekter, kan det være praktisk å plassere dem på et hvitt papir, ellers vil mengden reflektert lys være for liten og objektet rapporteres som "svart".

Hvis du vil måle fargen på objekter som avgir lys, bør du slå av LED -en på breakout ved å koble "LED" -porten på breakout til "Ground". Sett nå normaliseringsverdiene tilsvarende.

Et annet generelt problem er belysning av objektet. Den varmhvite LED-lampen på utbruddet avgir et ikke-kontinuerlig lysspekter. Derfor kan visse farger være over- eller underrepresentert i RGB-spekteret. For mer informasjon om dette emnet, kan du se på mine tidligere instrukser om kolorimeter/ fotometre og spektrometre:

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

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

Trinn 3: Koden

Koden
Koden

Koden er en kombinasjon av en modifikasjon av en kode fra AIY stemmehåndbok, og TCS34725 sensorkoden av Bradspi.

Jeg hadde også prøvd å bruke TCS34725 python -koden fra Adafruit, men hadde problemer med å kjøre denne og noen andre koder som bruker eksterne biblioteker i kombinasjon med AIY HAT. All hjelp velkommen.

Som nevnt tidligere, er fargeanmerkningen basert på en transformasjon av RGB til fargetoneverdier. Du må angi normaliseringsinnstillinger basert på eksperimentelle målinger av hvite og svarte ærbødighetsmaterialer. Fyll ut de absolutte verdiene for R, G og B min eller maks tilsvarende.

Skriptet bruker en ny versjon av kommandoen "si" som gjør det mulig å regulere volum og tonehøyde. I tilfelle må du enten oppdatere driverene for audio.py og tty eller slette "volum og tonehøyde" fra skriptet.

#!/usr/bin/env python3 # Dette skriptet er en tilpasning av servo_demo.py -skriptet for AIY -stemmehatten, # optimalisert for fargegjenkjenning av Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat # fra gpiozero import LED # kan være nyttig for en ekstern LED på servoport (fargetone): # fargetolkning basert på de beregnede fargetoneverdiene hvis ((fargetone> 12) og (fargetone 25) og (fargetone 69) og (fargetone 164) og (fargetone 194) og (fargetone 269) og (fargetone 319) eller (fargetone <20)): color = "rød" returfarge else: print ("noe gikk galt")

def tcs34725 (): # måling og tolkning.

# Målingen utføres av Bradspi TCS34725-skriptet: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # versjon # skal være 0x44 hvis ver == 0x44: print ("Enhet funnet / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = AKTIVER registrer bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Slå på, 0x02 RGB -sensorer aktivert bus.write_byte (0x29, 0x80 | 0x14) # Leseresultater starter register 14, LSB deretter MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] red = data [3] << 8 | data [2] grønn = data [5] << 8 | data [4] blå = data [7] << 8 | data [6] crgb = "Absolutte tellinger: C: %s, R: %s, G: %s, B: %s / n" %(klar, rød, grønn, blå) utskrift (crgb) time.sleep (1) else: print ("Enhet ikke funnet / n") # normalisering og transformasjon av de målte RGBW -verdiene col = "" # Maksimumsverdier Normaliseringsfaktorer, må defineres eksperimentelt # f.eks. vs. et hvitt ark. Kontroller og korriger fra tid til annen. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Bakgrunn/minimumsverdier normaliseringsfaktorer, må defineres eksperimentelt # f.eks. vs. svart ark. Kontroller og korriger fra tid til annen. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normaliserte verdier, mellom 0 og 1 rel_bright = ((klar - min_bright)/(max_bright - min_bright)) rel_red = ((rød - min_rød)/(maks_rød - min_rød)) 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]* hvis rel_bright> 0,9: col = "hvit" # hvis veldig lys -> hvit elif rel_bright svart annet: col = hue2color (fargetone) # fargevalg etter fargetoneverdier # print ("relative verdier lys, rød, grønn, blå:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV -verdier (fargetone, metning, verdi):", hsv_col) # print ("hue in °", hue) return [col, rel_bright, rel_red, rel_green, rel_blue, hue]

def main ():

button = aiy.voicehat.get_button () # change Button status led = aiy.voicehat.get_led () # change Button-LED status aiy.audio.get_recorder (). start () # buttoni = Button (5) # distance sensor or annen ekstern knapp, koblet til servo3/GPIO 05

aiy.audio.say ("Hello!",, volume = 50, pitch = 100) # volume and pitch krever november 2017 revisjon av audio.py og _tty.py driver!

aiy.audio.say ("For å starte, flytt sensoren over objektet. Trykk deretter på den blå knappen", volum = 50, tonehøyde = 100) print ("For å aktivere fargemåling plasseringssensoren over objektet, trykk deretter på den blå knappen ") mens True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # for ekstern knapp, bytt ut knappen med buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Measuring ",, volume = 50, pitch = 100) result = tcs34725 () # fremkaller måling og tolkning col = result [0] # color, as text hue = str (int (result [5])) # hue in °, som tekst r_red = str (int (resultat [2]*255)) # R -verdi, som tekst r_green = str (int (resultat [3]*255)) # G -verdi, som tekst r_blue = str (int (resultat [4]*255)) # B -verdi, som tekst r_bright = str (int (resultat [1]*100)) # W -verdi, som tekst led.set_state (aiy.voicehat. LED. OFF) hvis col == "hvit "eller col ==" black ": bright =" "elif (resultat [1]> 0,69): #lysstyrke/lysstyrke for farge bright =" light "elif (resultat [1] <0,25): bright =" dark "annet: bright = "medium" # kommuniserer t han resultater color_text = ("Fargen på objektet er" + bright + "" + col) print (color_text) aiy.audio.say (color_text,, volum = 75, pitch = 100) hue_text = ("fargetonen er "+ fargetone+" grader ") print (hue_text) aiy.audio.say (hue_text,, volum = 75, pitch = 100)

hvis _name_ == '_main_': main ()

Trinn 4: Noen lenker og kommentarer

Sensordatabladet TCS34725 finner du her:

Koden for å lese sensoren jeg har brukt ble beskrevet her:

Du kan finne ytterligere informasjon om fargemålinger med denne og en annen sensor i mine tidligere instrukser:

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

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

Anbefalt: