Innholdsfortegnelse:
- Trinn 1: Materialer som brukes
- Trinn 2: Montering og bruk
- Trinn 3: Koden
- Trinn 4: Noen lenker og kommentarer
Video: En talende fargesensor, basert på AIY Voice Kit: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
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
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 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:
Enkel DIY fargesensor fra Magicbit: 5 trinn
Enkel DIY fargesensor fra Magicbit: I denne opplæringen lærer vi om hvordan du lager en enkel fargesensor ved hjelp av Magicbit med Arduino
Arduino -basert ikke -kontakt infrarødt termometer - IR -basert termometer ved bruk av Arduino: 4 trinn
Arduino -basert ikke -kontakt infrarødt termometer | IR -basert termometer ved bruk av Arduino: Hei folkens i denne instruksjonsboken vil vi lage et kontaktfritt termometer ved hjelp av arduino. Siden noen ganger temperaturen på væsken/faststoffet er for høy eller for lav, og da er det vanskelig å få kontakt med det og lese dets temperaturen da i den situasjonen
Fargesensor med LCD -skjerm: 6 trinn
Fargesensor med LCD -skjerm: Målet er å lage en enhet som lar fargeblindede mennesker oppdage farger uten å måtte se fargen. Ved å bruke LCD -skjermen med sensoren ville fargen bli plukket opp og deretter overført til ord på LCD -skjermen. Denne enheten ville
A Voice Controlled Jumping Jack- Google Voice AIY-versjon: 3 trinn
A Voice Controlled Jumping Jack- Google Voice AIY-versjon: Så du har det AIY-stemmesettet til jul, og har lekt med det etter instruksjonene. Det er morsomt, men nå? Prosjektet beskrevet i det følgende presenterer en enkel enhet som kan bygges ved hjelp av AIY -stemmen HAT for Raspbe
Legg til triggerlyd til Google AIY Voice Kit: 6 trinn (med bilder)
Legg til Trigger Start Sound til Google AIY Voice Kit: Denne opplæringen er ganske enkel. Jeg har virkelig hatt glede av Google AIY Voice Kit, men liker veldig godt støyen fra mitt vanlige Google Home for å bekrefte at de lytter aktivt. Dette er ikke konfigurert som standard i noen av eksemplene