Kazalo:
- Korak: Uporabljeni materiali
- 2. korak: Montaža in uporaba
- 3. korak: Koda
- 4. korak: Nekaj povezav in opomb
Video: Barvni senzor, ki govori, na podlagi AIY Voice Kit: 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Ko sem se pred kratkim naučil nekaj o brajici, sem se spraševal, ali bi lahko z glasovnim kompletom AIY za Raspberry Pi ustvaril nekaj, kar bi lahko imelo resne koristi za slabovidne. Tako opisano v nadaljevanju boste našli prototip preproste naprave za zaznavanje barv, ki na glas bere svoje ugotovitve.
Bolj izpopolnjena različica tega sistema je lahko koristna za osebe z okvaro vida ali barvno slepoto.
Sistem uporablja Raspberry Pi s pritrjenim glasovnim klobukom AIY. Prekinitev tipala TCS34725 RGB je priključena na vrata I2C HAT. Odlom vsebuje svetlo toplo belo LED, ki osvetljuje predmet, ki ga je treba analizirati. Preboj je bil postavljen v ohišje za optimizacijo in standardizacijo merilnih pogojev.
Trije barvni senzor meri približno enaka tri frekvenčna območja kot barvni senzorji v vaših očeh. Nato se vrednosti rdeče, zelene in modre (RGB) uporabijo za izračun celotnega barvnega vtisa.
Lepota tega posebnega sistema je, da vam zdaj ustno pove barvo z ukazom "say" glasovnih kompletov AIY. Oglejte si priloženi video.
Naprava je lahko uporabna tudi kot primer za senzorsko napravo I2C, priključeno na glasovni HAT AIY.
Korak: Uporabljeni materiali
Raspberry Pi 3. ~ 35 USD ali EUR
Glasovni komplet AIY, z glavami, spajkanimi na HAT. ~ 25 USD ali EUR
Adafruit TCS34725 prelom, z glavo spajkano. ~ 8 USD ali EUR
Mostični kabli.
Okvir (neobvezno)
Za ohišje senzorja:- rabljena kavna kapsula "Dolce Gusto"- majhen okrogel kos 2 mm Forex (PVC penasta plošča), premera približno 37 mm- ne odsevni črni material, ki pokriva notranje stene ohišja. Uporabil sem samolepilno peno iz črne gume.
Izbirno: majhno stikalo za vzbujanje meritev
Nekaj kapljic plastičnega lepila in nož za rezanje.
2. korak: Montaža in uporaba
Raspberry Pi z AIY voice HAT je bil nastavljen, kot je opisano v priročniku AIY. Pred montažo so bile glave spajkane na vrata na HAT. Za ohišje senzorja smo izpraznili kavno kapsulo "Dulce Gusto", jo očistili in del dna previdno odstranili z nožem. V ta namen lahko uporabite kaj drugega, kavna kapsula je imela pravo velikost in obliko. Okrogli kos 2 mm Forex je bil izrezan iz plošče, odsek je bil nato postavljen na sredino plošče Forex, položaj označen s flomastrom, reža za glavo na prelomu pa je bila izrezana na ustreznem mestu.
Sedaj je bil Forex kos pritrjen na ohišje, senzor pa je pritrjen na ploščo Forex s pomočjo Velcro traku. Nato so bile notranje stene prekrite s črnim materialom, ki absorbira svetlobo, uporabil sem samolepilno gumijasto peno. Črni karton bi moral delovati tudi. S pomočjo mostičnih kablov so bila vrata I2C "3.3V" HAT priključena na "V in" na senzorju, Ground to Gnd, sda to sda in scl to scl. Za povezavo obeh delov sem uporabil ploščo, vendar to ni potrebno.
Skript python AIY_TCS34725 postavite v mapo src in zaženite skript iz terminala dev in vnesite "sec/AIY_TCS34752.py". Morda boste morali najprej narediti izvedljiv skript python. Ko vas vprašajo, postavite senzorsko enoto na predmet, ki ga želite izmeriti, pritisnite gumb v napravi AIY in počakajte sekundo ali dve.
Nato naprava na podlagi izmerjenih vrednosti RGB in bele barve najprej izračuna ustrezno vrednost odtenka, nato na podlagi te vrednosti oceni barvo in jih ustno sporoči prek glasovnega sistema AIY, npr. g. kot "temno rdeča", vendar daje tudi vrednost odtenka. Na zaslon se natisnejo tudi vrednosti RGB, odtenka in svetlosti (natančnost, lahkotnost).
Za poenostavitev postopka označevanja barv se vrednosti RGB pretvorijo v format HSV (odtenek, nasičenost, vrednost). To omogoča označevanje barve za določeno območje kotov (tj. Rezino pite) in izbiranje barve na podlagi izračunane vrednosti odtenka.
Napravo morate normalizirati glede na belo in črno referenco. Preprosto izmerite najbolj bele in črne koščke papirja, ki jih imate na voljo, vsakega merite in te vrednosti vnesite kot največjo in najmanjšo vrednost v kodo. Le optimalne referenčne vrednosti bodo dobro prepoznale barve.
Eden od osnovnih problemov je refleksija. Če imate predmet s sijajno ali polirano površino, bo odseval veliko svetlobe, ki jo oddaja LED, in bo videti veliko lažja, kot je v resnici. Za razprševanje svetlobe lahko uporabite membranski list, vendar boste morda morali uporabiti korekcijski faktor.
V primeru prosojnih predmetov bi jih bilo morda priročno postaviti na bel papir, sicer bo količina odbite svetlobe premajhna, predmet pa kot "črn".
Če želite izmeriti barvo predmetov, ki oddajajo svetlobo, morate izklopiti LED na prekinitvi tako, da priključite vrata "LED" na prelomu na "ozemljitev". Zdaj ustrezno nastavite vrednosti normalizacije.
Druga splošna težava je osvetlitev predmeta. Topla bela LED na prelomu oddaja neprekinjen spekter svetlobe. Zato so nekatere barve lahko preveč ali premalo zastopane v spektru RGB. Za več informacij o tej temi si oglejte moja prejšnja navodila za kolorimetre/ fotometre in spektrometre:
www.instructables.com/id/An-Inexpensive-Ph…
www.instructables.com/id/A-Mimimal-Six-Col…
3. korak: Koda
Koda je kombinacija spremembe kode iz glasovnega priročnika AIY in kode senzorja TCS34725 podjetja Bradspi.
Poskušal sem uporabiti tudi kodo python TCS34725 iz Adafruit, vendar sem imel težave pri izvajanju te in nekaterih drugih kod, ki uporabljajo zunanje knjižnice v kombinaciji z AIY HAT. Vsaka pomoč dobrodošla.
Kot smo že omenili, barvni pripis temelji na preoblikovanju vrednosti RGB v odtenke. Nastavitve normalizacije morate nastaviti na podlagi eksperimentalnih meritev belih in črnih materialov za spoštovanje. V skladu s tem izpolnite absolutne vrednosti za R, G in B min ali max.
Skript uporablja novo različico ukaza "say", ki omogoča uravnavanje glasnosti in višine tona. V tem primeru boste morda morali posodobiti datoteke gonilnikov audio.py in tty ali izbrisati "dele glasnosti in višine tona" iz skripta.
#!/usr/bin/env python3 # Ta skript je prilagoditev skripta servo_demo.py za glasovno klobuk AIY, # optimiziran za prepoznavanje barv z uvajanjem izbruha Afafruit TCS34725 aiy.audio uvoz aiy.cloudspeech uvoz aiy.voicehat #iz gpiozero import LED # je lahko v pomoč pri zunanji LED na servo vratih #from gpiozero import Gumb # bi lahko bil v pomoč pri zunanjem gumbu na servo-port uvoznem času import smbus bus = smbus. SMBus (1) import coloursys def hue2color (odtenek): # barvna razlaga na podlagi izračunanih vrednosti odtenkov if ((odtenek> 12) in (odtenek 25) in (odtenek 69) in (odtenek 164) in (odtenek 194) in (odtenek 269) in (odtenek 319) ali (odtenek <20)): color = "rdeča" vrnitev barve else: print ("nekaj je šlo narobe")
def tcs34725 (): # merjenje in razlaga.
# Merjenje izvede skript Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # različica # mora biti 0x44, če je ver == 0x44: print ("Naprava je najdena / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ENABLE register bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Vklop, 0x02 RGB senzorji omogočeni bus.write_byte (0x29, 0x80 | 0x14) # Rezultati branja začnejo register 14, LSB nato MSB podatki = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | podatki [0] rdeči = podatki [3] << 8 | podatki [2] zelena = podatki [5] << 8 | podatki [4] modra = podatki [7] << 8 | data [6] crgb = "Absolutno štetje: C: %s, R: %s, G: %s, B: %s / n" %(čisto, rdeče, zeleno, modro) tisk (crgb) time.sleep (1) else: print ("Naprava ni najdena / n") # normalizacija in transformacija izmerjenih vrednosti RGBW col = "" # Največje vrednosti Normalizacijske faktorje je treba določiti eksperimentalno # npr. v primerjavi z belim listom papirja. Občasno preverite in popravite. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Ozadje/Faktorje normalizacije minimalnih vrednosti je treba eksperimentalno določiti # npr. v primerjavi s črnim listom papirja. Občasno preverite in popravite. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normalizirane vrednosti, med 0 in 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((red - min_red)/(max_red - min_red)) rel_green = ((zeleno - min_zeleno)/(največ_zeleno - min_zeleno)) rel_blue = ((modro - min_blue)/(max_blue - min_blue)) hsv_col = coloursys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hs = hs = 0 če je rel_bright> 0,9: col = "bela" # če je zelo svetla -> bela elif rel_bright črna druga: col = hue2color (hue) # izbira barve glede na vrednosti odtenkov # print ("relativne vrednosti svetla, rdeča, zelena, modra:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("Vrednosti HSV (odtenek, nasičenost, vrednost):", hsv_col) # print ("odtenek v °", odtenek) return [col, rel_bright, rel_red, rel_green, rel_blue, odtenek]
def main ():
button = aiy.voicehat.get_button () # spremenite stanje gumba led = aiy.voicehat.get_led () # spremenite stanje gumba-LED aiy.audio.get_recorder (). start () # buttoni = Button (5) # senzor razdalje ali drugi zunanji gumb, priključen na servo3/GPIO 05
aiy.audio.say ("Pozdravljeni!",, glasnost = 50, višina = 100) # glasnost in višina zahtevata november 2017 revizije gonilnikov audio.py in _tty.py!
aiy.audio. ") medtem ko je True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # za zunanji gumb, gumb zamenjajte z buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Merjenje ",, prostornina = 50, višina = 100) rezultat = tcs34725 () # prikliče meritev in interpretacijo col = rezultat [0] # barva, kot odtenek besedila = str (int (rezultat [5])) # odtenek v °, kot besedilo r_red = str (int (rezultat [2]*255)) # vrednost R, kot besedilo r_green = str (int (rezultat [3]*255)) # vrednost G, kot besedilo r_blue = str (int (rezultat [4]*255)) # Vrednost B, kot besedilo r_bright = str (int (rezultat [1]*100)) # Vrednost W, kot besedilo led.set_state (aiy.voicehat. LED. OFF), če je col == "bela "or col ==" black ": bright =" "elif (rezultat [1]> 0,69): #svetlost/svetlost barve bright =" light "elif (rezultat [1] <0,25): bright =" temno "drugače: bright = "medium" # sporoča t rezultat je color_text = ("Barva predmeta je" + svetla + "" + stolpec) print (color_text) aiy.audio.say (color_text,, obseg = 75, pitch = 100) hue_text = ("Vrednost nians je "+ hue+" stopinje ") print (hue_text) aiy.audio.say (hue_text,, volume = 75, pitch = 100)
če _name_ == '_main_': main ()
4. korak: Nekaj povezav in opomb
Podatkovni list senzorja TCS34725 najdete tukaj:
Koda za branje senzorja, ki sem ga uporabil, je bila opisana tukaj:
Nekaj dodatnih informacij o meritvah barv s tem in drugim senzorjem lahko najdete v mojih prejšnjih navodilih:
www.instructables.com/id/An-Inexpensive-Ph…
www.instructables.com/id/A-Mimimal-Six-Col…
Priporočena:
Preprost DIY barvni senzor znamke Magicbit: 5 korakov
Preprost barvni senzor DIY podjetja Magicbit: V tem vodiču se bomo naučili, kako narediti preprost barvni senzor z uporabo Magicbita z Arduinom
Senzor/detektor svetlobe na podlagi LDR: 3 koraki
Svetlobni senzor/detektor na podlagi LDR: Svetlobni senzorji in detektorji so izjemno uporabni za mikrokrmilnike in vgrajene sisteme, prav tako pa je treba izvesti nadzor intenzivnosti. Eden najpreprostejših in najcenejših takšnih senzorjev so LDR. LDR ali svetlobno odvisni upori se lahko enostavno uporabljajo z
Barvni senzor z LCD zaslonom: 6 korakov
Barvni senzor z LCD zaslonom: Cilj je ustvariti napravo, ki bi daltonistikom omogočila zaznavanje barv, ne da bi jih morali videti. Z uporabo LCD zaslona s senzorjem se barva pobere in nato prenese v besede na LCD zaslon. Ta naprava bo
Arduino WiFi omrežje (senzorji in aktuatorji) - barvni senzor: 4 koraki
Arduino WiFi omrežje (senzorji in aktuatorji) - barvni senzor: Kolikokrat v svojih aplikacijah imate senzor ali kakšen aktuator daleč od sebe? Koliko bi bilo udobno uporabljati samo eno glavno napravo v bližini računalnika za upravljanje različnih podrejenih naprav, povezanih prek omrežja wi-fi? V tem projektu
Arduino + barvni senzor TCS230: 4 koraki
Arduino + Sensor De Color TCS230: PovzetekARDUINO + BARVNI SENZOR TCS230 je projekt, namenjen študentskemu okolju, tako da ga učitelj uporablja kot interaktivni učni predmet in tudi učencem, pri čemer cilji dosegajo konceptualno, metodološko in funkcijo