Obsah:

Hovoriaci farebný senzor založený na hlasovej súprave AIY: 4 kroky
Hovoriaci farebný senzor založený na hlasovej súprave AIY: 4 kroky

Video: Hovoriaci farebný senzor založený na hlasovej súprave AIY: 4 kroky

Video: Hovoriaci farebný senzor založený na hlasovej súprave AIY: 4 kroky
Video: Robobloq - Príklad 3 - Farebný senzor a sledovač čiar 2024, Júl
Anonim
Hovoriaci farebný senzor založený na hlasovej súprave AIY
Hovoriaci farebný senzor založený na hlasovej súprave AIY
Hovoriaci snímač farieb, založený na hlasovej súprave AIY
Hovoriaci snímač farieb, založený na hlasovej súprave AIY
Hovoriaci farebný senzor založený na hlasovej súprave AIY
Hovoriaci farebný senzor založený na hlasovej súprave AIY
Hovoriaci farebný senzor založený na hlasovej súprave AIY
Hovoriaci farebný senzor založený na hlasovej súprave AIY

Keď som sa nedávno dozvedel niečo o Braillovom písme, premýšľal som, či by som pomocou hlasovej súpravy AIY pre Raspberry Pi mohol niečo postaviť, čo môže mať pre zrakovo postihnutých skutočný prínos. V nasledujúcom texte nájdete prototyp jednoduchého zariadenia na detekciu farieb, ktoré nahlas číta svoje zistenia.

Prepracovanejšia verzia tohto systému môže byť užitočná pre osoby so zhoršeným zrakom alebo farbosleposťou.

Systém používa Raspberry Pi s pripojeným hlasovým klobúkom AIY. Rozbitý snímač TCS34725 RGB je pripojený k portu I2C HAT. Breakout obsahuje jasnú teplú bielu LED diódu, ktorá osvetľuje analyzovaný objekt. Úlomok bol umiestnený do puzdra na optimalizáciu a štandardizáciu podmienok merania.

Trojfarebný snímač meria približne rovnaké tri frekvenčné rozsahy ako farebné senzory vo vašich očiach. Potom sa na výpočet celkového farebného dojmu použijú červené, zelené a modré (RGB) hodnoty.

Sympatické na tomto špeciálnom systéme je, že vám teraz povie farbu verbálne pomocou príkazu „povedať“hlasových súprav AIY. Pozrite sa prosím na sprievodné video.

Zariadenie môže byť tiež užitočné ako príklad pre senzorové zariadenie I2C pripojené k hlasovej HAT AIY.

Krok 1: Použitý materiál

Raspberry Pi 3. ~ 35 US $ alebo EUR

Hlasová súprava AIY so hlavičkami spájkovanými do HAT. ~ 25 USD alebo EUR

Odlamovací adaptér Adafruit TCS34725 so spájkovanou hlavičkou. ~ 8 USD alebo EUR

Prepojovacie káble.

Doska na chlieb (voliteľné)

Pre puzdro senzora:- použitá kávová kapsula „Dolce Gusto“- malý okrúhly kus 2 mm Forex (penová doska z PVC) s priemerom asi 37 mm- nereflexný čierny materiál na pokrytie vnútorných stien krytu. Použil som samolepiacu čiernu gumovú penu.

Voliteľné: malý prepínač na vyvolanie meraní

Niekoľko kvapiek plastového lepidla a rezací nôž.

Krok 2: Montáž a použitie

Montáž a používanie
Montáž a používanie
Montáž a používanie
Montáž a používanie
Montáž a používanie
Montáž a používanie

Raspberry Pi s hlasovou čiarou AIY HAT bolo nakonfigurované podľa popisu v príručke AIY. Pred montážou boli hlavičky spájkované k portom na HAT. Pre puzdro senzora bola kávová kapsula „Dulce Gusto“vyprázdnená, vyčistená a časť dna opatrne odstránená nožom. Na tento účel môžete použiť niečo iné, kávová kapsula mala správnu veľkosť a tvar. Okrúhly kus 2 mm Forexu bol odrezaný z platne, zlomok bol potom umiestnený centrálne na Forex platňu, poloha označená plsteným perom a v príslušnej polohe bol vyrezaný otvor pre hlavičku na priereze.

Teraz bol kus Forex prilepený na puzdro a prerušenie snímača bolo pripevnené k Forex doske pomocou suchého zipsu. Potom boli vnútorné steny pokryté svetlom absorbujúcim čiernym materiálom, použil som samolepiacu gumovú penu. Fungovať by mala aj čierna lepenka. Teraz pomocou prepojovacích káblov bol port I2C "3,3 V" na HAT pripojený k "V in" na senzore, uzemnenie na Gnd, sda na sda a scl na scl. Na prepojenie oboch častí som použil breadboard, ale to nie je potrebné.

Umiestnite skript python AIY_TCS34725 do priečinka src a spustite ho z vývojového terminálu a zadajte „sec/AIY_TCS34752.py“. Možno budete musieť najskôr spustiť spustiteľný skript pythonu. Na výzvu položte senzorovú jednotku na meraný objekt, stlačte tlačidlo na zariadení AIY a počkajte sekundu alebo dve.

Potom na základe nameraných hodnôt RGB a bielej zariadenie najskôr vypočíta zodpovedajúcu hodnotu odtieňa, potom odhadne farbu na základe tejto hodnoty a verbálne ich oznámi prostredníctvom hlasového systému AIY, napr. g. ako „tmavo červená“, ale tiež udáva hodnotu odtieňa. Na obrazovku sa vytlačia aj hodnoty RGB, odtieň a jas (presnejšie svetlosť).

Na zjednodušenie postupu farebnej anotácie sú hodnoty RGB transformované do formátu HSV (odtieň, sýtosť, hodnota). To umožňuje anotovať farbu v určitom rozsahu uhlov (t.j. koláčový plátok) a vybrať farbu na základe vypočítanej hodnoty odtieňa.

Zariadenie musíte normalizovať voči bielej a čiernej referencii. Stačí zmerať najbelšie a najčernejšie kúsky papiera, ktoré máte k dispozícii, každý zmerajte a vložte tieto hodnoty ako maximálne a minimálne hodnoty do kódu. Iba optimálne referenčné hodnoty poskytnú dobré rozpoznanie farieb.

Jedným zo základných problémov je odraz. Ak máte predmet s lesklým alebo lešteným povrchom, bude odrážať veľa svetla vyžarovaného diódou LED, pričom bude pôsobiť oveľa svetlejšie, ako v skutočnosti je. Na rozptýlenie svetla môžete použiť list membrány, ale možno budete musieť implementovať korekčný faktor.

V prípade priesvitných predmetov môže byť vhodné umiestniť ich na biely papier, inak bude množstvo odrazeného svetla malé a predmet bude označený ako „čierny“.

Ak chcete merať farbu predmetov, ktoré vyžarujú svetlo, mali by ste vypnúť LED diódu na breakoutu pripojením portu „LED“na breakout k „Ground“. Teraz podľa toho nastavte hodnoty normalizácie.

Ďalším všeobecným problémom je osvetlenie predmetu. Teplá biela LED dióda na Breakout vyžaruje nesúvislé spektrum svetla. Niektoré farby preto môžu byť v spektre RGB nadmerne alebo nedostatočne zastúpené. Ak chcete získať ďalšie informácie o tejto téme, pozrite sa na moje predchádzajúce návody na kolorimetre/ fotometre a spektrometre:

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

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

Krok 3: Kód

Kód
Kód

Kód je kombináciou úpravy kódu z hlasovej príručky AIY a kódu senzora TCS34725 od spoločnosti Bradspi.

Skúsil som tiež použiť pythonový kód TCS34725 od spoločnosti Adafruit, ale mal som problémy so spustením tohto a niektorých ďalších kódov, ktoré používajú externé knižnice v kombinácii s AIY HAT. Akákoľvek pomoc vítaná.

Ako už bolo spomenuté, farebná anotácia je založená na transformácii hodnôt RGB na odtieň. Normalizačné nastavenia musíte nastaviť na základe experimentálnych meraní materiálov úcty k bielej a čiernej farbe. Podľa toho zadajte absolútne hodnoty R, G a B min alebo max.

Skript používa novú verziu príkazu „povedz“, ktorý umožňuje regulovať hlasitosť a výšku tónu. V prípade potreby budete musieť buď aktualizovať súbory ovládača audio.py a tty, alebo zo skriptu odstrániť „časti hlasitosti a výšky“.

#!/usr/bin/env python3 # Tento skript je adaptáciou skriptu servo_demo.py pre hlasovú čiapku AIY, # optimalizovaného na rozpoznávanie farieb pomocou prerušovaného importu Afafruit TCS34725 aiy.audio import aiy.cloudspeech import aiy.voicehat # z LED importu gpiozero # môže byť nápomocné pre externú diódu LED na servo porte # z gpiozero importu Tlačidlo # môže byť nápomocné pre externé tlačidlo v čase importu servo portu import smbus bus = smbus. SMBus (1) import colorys def hue2color (odtieň): # interpretácia farieb na základe vypočítaných hodnôt odtieňa, ak ((odtieň> 12) a (odtieň 25) a (odtieň 69) a (odtieň 164) a (odtieň 194) a (odtieň 269) a (odtieň 319) alebo (odtieň <20)): color = "red" vrátiť farbu else: print ("niečo sa pokazilo")

def tcs34725 (): # meranie a interpretácia.

# Meranie vykonáva skript Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # verzia # by malo byť 0x44, ak ver == 0x44: print ("Zariadenie nájdené / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = POVOLIŤ registráciu bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Zapnúť, 0x02 RGB senzory povolené bus.write_byte (0x29, 0x80 | 0x14) # Výsledky čítania spustia register 14, LSB potom údaje MSB = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] red = data [3] << 8 | údaje [2] zelené = údaje [5] << 8 | údaje [4] modré = údaje [7] << 8 | data [6] crgb = "Absolútne počty: C: %s, R: %s, G: %s, B: %s / n" %(jasný, červený, zelený, modrý) print (crgb) time.sleep (1) else: print ("Zariadenie nebolo nájdené / n") # normalizácia a transformácia nameraných hodnôt RGBW col = "" # Maximálne hodnoty Normalizačné faktory, je potrebné definovať experimentálne # napr. vs biely list papiera. Čas od času skontrolujte a opravte. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Pozadie/Minimálne hodnoty normalizačné faktory, musia byť definované experimentálne # napr. vs čierny list papiera. Čas od času skontrolujte a opravte. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normalizovaných hodnôt, medzi 0 a 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((červená - min_red)/(max_red - min_red)) rel_green = ((zelená - min_green)/(max_green - min_green)) rel_blue = ((modrá - min_blue)/(max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) odtieň = hsv_col [0]*359 if rel_bright> 0,9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color (hue) # color selection by hue values # print ("relative values bright, red, green, blue:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("Hodnoty HSV (odtieň, sýtosť, hodnota):", hsv_col) # print ("odtieň v °", odtieň) návrat [col, rel_bright, rel_red, rel_green, rel_blue, odtieň]

def main ():

button = aiy.voicehat.get_button () # change LED button status led = aiy.voicehat.get_led () # change Button-LED status aiy.audio.get_recorder (). start () # buttoni = Button (5) # senzor vzdialenosti alebo ďalšie externé tlačidlo, pripojené k servo3/GPIO 05

aiy.audio.say („Ahoj!“,, hlasitosť = 50, výška = 100) # hlasitosť a výška vyžadujú revíziu ovládača audio.py a _tty.py z novembra 2017!

aiy.audio.say („Ak chcete začať, presuňte snímač nad objekt. Potom stlačte modré tlačidlo“,, hlasitosť = 50, výška = 100) vytlačte („Ak chcete aktivovať snímač merania miesta nad objektom, potom stlačte modré tlačidlo ") zatiaľ čo True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # pre externé tlačidlo, tlačidlo nahraďte tlačidlom ledi led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Meranie ",, objem = 50, výška = 100) výsledok = tcs34725 () # evokuje meranie a interpretáciu col = výsledok [0] # farba, ako odtieň textu = str (int (výsledok [5])) # odtieň v °, ako text r_red = str (int (výsledok [2]*255)) # hodnota R, ako text r_green = str (int (výsledok [3]*255)) # hodnota G, ako text r_blue = str (int (výsledok [4]*255)) # B hodnota, ako text r_bright = str (int (výsledok [1]*100)) # W hodnota, ako text led.set_state (aiy.voicehat. LED. OFF) if col == "biela "alebo stĺp ==" čierny ": jasný =" "elif (výsledok [1]> 0,69): #jas/svetlosť farby jasný =" svetlý "elif (výsledok [1] <0,25): jasný =" tmavý "inak: bright = "medium" # komunikujúca t výsledkom je color_text = ("Farba objektu je" + svetlá + "" + stĺpce) print (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("Hodnota odtieňa je "+ odtieň+" stupne ") tlač (hue_text) aiy.audio.say (hue_text,, hlasitosť = 75, výška = 100)

if _name_ == '_main_': main ()

Krok 4: Niektoré odkazy a poznámky

Dátový list snímača TCS34725 nájdete tu:

Kód na čítanie senzora, ktorý som použil, bol popísaný tu:

Niektoré ďalšie informácie o meraniach farieb pomocou tohto a iného snímača nájdete v mojich predchádzajúcich pokynoch:

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

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

Odporúča: