Përmbajtje:

Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY: 4 Hapa
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY: 4 Hapa

Video: Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY: 4 Hapa

Video: Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY: 4 Hapa
Video: My CHEAP 997 Porsche 911 Turbo Gets An INSANE New Engine! 2024, Nëntor
Anonim
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY
Një Sensor i Ngjyrës që Flet, Bazuar në Kompletin e Zërit AIY

Duke mësuar pak për Braille kohët e fundit, po pyesja veten nëse mund të ndërtoja diçka duke përdorur kompletin e zërit AIY për Raspberry Pi, që mund të ketë një përfitim të vërtetë për personat me shikim të dobët. Kështu e përshkruar në vijim do të gjeni një prototip të një pajisjeje të thjeshtë të zbulimit të ngjyrave që lexon gjetjet e saj me zë të lartë.

Një version më i përpunuar i këtij sistemi mund të jetë i dobishëm për personat me shikim të dëmtuar ose verbëri të ngjyrave.

Sistemi po përdor një Raspberry Pi me një kapelë zëri AIY të bashkangjitur. Një ndarje e sensorit TCS34725 RGB është e lidhur me portën I2C të HAT. Zbërthimi përmban një LED të ndritshëm të bardhë të ngrohtë për të ndriçuar objektin që do të analizohet. Zbërthimi u vendos në një strehë për të optimizuar dhe standardizuar kushtet e matjes.

Sensori me tre ngjyra mat të njëjtat tre varg frekuencash si sensorët e ngjyrave në sytë tuaj. Pastaj vlerat e kuqe, jeshile dhe blu (RGB) përdoren për të llogaritur përshtypjen e përgjithshme të ngjyrës.

Gjëja e bukur për këtë sistem të veçantë është se tani ju tregon ngjyrën me gojë, duke përdorur komandën "thuaj" të kompleteve të zërit të AIY. Ju lutemi shikoni videon shoqëruese.

Pajisja mund të jetë gjithashtu e dobishme si një shembull për një pajisje sensor I2C të lidhur me AIY voice HAT.

Hapi 1: Materialet e përdorura

Raspberry Pi 3. ~ 35 US $ ose EUR

Kompleti i zërit AIY, me tituj të ngjitur në HAT. US 25 US $ ose EUR

Ndarja Adafruit TCS34725, me një kokë të bashkuar. 8 dollarë amerikanë ose euro

Kabllo kërcyes.

Një dërrasë buke (opsionale)

Për strehimin e sensorit:- një kapsulë kafeje e përdorur "Dolce Gusto"- një copë e vogël e rrumbullakët prej 2mm Forex (pllakë shkumë PVC), rreth 37 mm në diametër- një material i zi jo reflektues për të mbuluar muret e brendshme të strehimit. Kam përdorur shkumë gome të zezë vetë-ngjitëse.

Opsionale: një ndërprerës i vogël për të evokuar matjet

Disa pika zam plastik dhe një thikë prestar.

Hapi 2: Montimi dhe Përdorimi

Montimi dhe Përdorimi
Montimi dhe Përdorimi
Montimi dhe Përdorimi
Montimi dhe Përdorimi
Montimi dhe Përdorimi
Montimi dhe Përdorimi

Raspberry Pi me zërin AIY HAT u konfigurua siç përshkruhet në manualin e AIY. Para montimit, titujt u ngjitën në portet në HAT. Për strehimin e sensorit, një kapsulë kafeje "Dulce Gusto" u zbraz, u pastrua dhe një pjesë e pjesës së poshtme u hoq me kujdes me thikë. Ju mund të përdorni diçka tjetër për këtë qëllim, kapsula e kafesë sapo kishte madhësinë dhe formën e duhur. Një copë e rrumbullakët prej Forex 2 mm u pre nga një pjatë, shpërthimi u vendos më pas në qendër në pllakën Forex, pozicioni i shënuar me një stilolaps të ndjerë dhe një çarë për kokën në dalje ishte prerë në pozicionin e duhur.

Tani pjesa Forex ishte ngjitur në strehim dhe ndarja e sensorit u ngjit në pllakën Forex, duke përdorur një shirit Velcro. Pastaj muret e brendshme u mbuluan me një material të zi që thith dritën, unë përdor një shkumë gome vetë-ngjitëse. Kartoni i zi gjithashtu duhet të funksionojë. Tani, duke përdorur kabllo kërcyes, porta I2C "3.3V" e HAT ishte e lidhur me "V in" në sensor, Ground to Gnd, sda në sda dhe scl në scl. Unë kisha përdorur një dërrasë buke për të lidhur të dy pjesët, por kjo nuk është e nevojshme.

Vendosni shkrimin python AIY_TCS34725 në dosjen src dhe ekzekutoni skriptin nga terminali dev, duke futur "sec/AIY_TCS34752.py". Ju mund të keni nevojë ta bëni skriptin python së pari të ekzekutueshëm. Kur pyetet, vendosni njësinë e sensorit mbi objektin që do të matet, shtypni butonin në pajisjen AIY dhe prisni një sekondë ose dy.

Pastaj, bazuar në vlerat e matura RGB dhe të bardha, pajisja së pari llogarit vlerën përkatëse të nuancës, pastaj vlerëson ngjyrën bazuar në këtë vlerë dhe i komunikon ato me gojë përmes sistemit të zërit AIY, p.sh. g si "e kuqe e errët", por gjithashtu jep vlerën e ngjyrës. Vlerat RGB, nuanca dhe shkëlqimi (butësia, për të qenë të saktë) gjithashtu printohen në ekran.

Për të thjeshtuar procesin e shënimit të ngjyrave, vlerat RGB transformohen në formatin HSV (nuancë, ngopje, vlerë). Kjo ju lejon të shënoni një ngjyrë në një gamë të caktuar këndesh (domethënë një fetë byrek) dhe të zgjidhni ngjyrën bazuar në vlerën e llogaritur të ngjyrës.

Ju duhet të normalizoni pajisjen tuaj kundër një reference të bardhë dhe të zezë. Thjesht matni copat më të bardha dhe më të zeza të letrës që keni në dispozicion, bëni një matje secila dhe vendosni këto vlera si vlera maksimale dhe minimale në kod. Vetëm vlerat optimale të referencës do të japin një njohje të mirë të ngjyrave.

Një problem themelor është reflektimi. Nëse keni një objekt me një sipërfaqe me shkëlqim ose të lëmuar, ai do të reflektojë shumë dritë të emetuar nga LED, duke u dukur shumë më e lehtë se sa është në të vërtetë. Ju mund të përdorni një fletë membrana për të shpërndarë dritën, por mund t'ju duhet të zbatoni një faktor korrigjimi.

Në rastin e objekteve të tejdukshme, mund të jetë e dobishme t'i vendosni ato në një letër të bardhë, përndryshe sasia e dritës së reflektuar do të jetë e vogël dhe objekti do të raportohet si "i zi".

Nëse dëshironi të matni ngjyrën e objekteve që lëshojnë dritë, duhet të fikni LED -in në ndarje duke lidhur portën "LED" në dalje me "Ground". Tani vendosni vlerat e normalizimit në përputhje me rrethanat.

Një problem tjetër i përgjithshëm është ndriçimi i objektit. LED e ngrohtë e bardhë në prishje lëshon një spektër jo të vazhdueshëm të dritës. Prandaj, ngjyra të caktuara mund të jenë të tepërta ose të nënpërfaqësuara në spektrin RGB. Për më shumë informacion mbi këtë temë, ju lutemi hidhini një sy udhëzimeve të mia të mëparshme në një kolimetër/ fotometër dhe spektrometër:

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

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

Hapi 3: Kodi

Kodi
Kodi

Kodi është një kombinim i një modifikimi të një kodi nga manuali i zërit AIY, dhe kodit të sensorit TCS34725 nga Bradspi.

Unë gjithashtu u përpoqa të përdor kodin python TCS34725 nga Adafruit, por kisha probleme me këtë dhe disa kode të tjera që përdorin biblioteka të jashtme në kombinim me AIY HAT. Çdo ndihmë e mirëpritur.

Siç u përmend më parë, shënimi i ngjyrave bazohet në një transformim në RGB në vlerat e ngjyrave. Ju duhet të vendosni cilësimet e normalizimit bazuar në matjet eksperimentale të materialeve të nderimit të bardhë dhe të zi. Plotësoni vlerat absolute për R, G dhe B min ose max në përputhje me rrethanat.

Skenari përdor një version të ri të komandës "thuaj" që lejon rregullimin e volumit dhe lartësisë. Në rast, mund t'ju duhet të përditësoni skedarët e shoferit audio.py dhe tty ose të fshini "pjesët e volumit dhe katranit" nga skenari.

#!/usr/bin/env python3 # Ky skenar është një përshtatje e skriptit servo_demo.py për AIY voice HAT, # i optimizuar për njohjen e ngjyrave duke përdorur importin e thyerjes Afafruit TCS34725 aiy.audio import aiy.cloudspeech import aiy.voicehat # nga gpiozero import LED # mund të jetë i dobishëm për një LED të jashtëm në servo-port # nga gpiozero Butoni i importit # mund të jetë i dobishëm për një buton të jashtëm në kohën e importimit të servo-portit import smbus bus = smbus. SMBus (1) importimi i ngjyrave def hue2color (nuancë): # interpretim ngjyra bazuar në vlerat e llogaritura të nuancës nëse ((nuanca> 12) dhe (nuanca 25) dhe (nuanca 69) dhe (nuanca 164) dhe (nuanca 194) dhe (nuanca 269) dhe (nuanca 319) ose (nuanca <20)): ngjyra = "e kuqe" kthe ngjyrën tjetër: print ("diçka nuk shkoi mirë")

def tcs34725 (): # matja dhe interpretimi.

# Matja kryhet me shkrimin Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # version # duhet të jetë 0x44 nëse ver == 0x44: print ("Pajisja u gjet / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = Çaktivizo regjistrimin e bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Aktivizo, Sensorët 0x02 RGB aktivizuan bus.write_byte (0x29, 0x80 | 0x14) # Leximi i rezultateve fillon regjistrin 14, LSB pastaj MSB të dhëna = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | të dhëna [0] e kuqe = të dhëna [3] << 8 | të dhëna [2] jeshile = të dhëna [5] << 8 | të dhëna [4] blu = të dhëna [7] << 8 | të dhënat [6] crgb = "Numërimet absolute: C: %s, R: %s, G: %s, B: %s / n" %(e qartë, e kuqe, jeshile, blu) koha e printimit (crgb). gjumi (1) tjetër: print ("Pajisja nuk u gjet / n") # normalizimi dhe transformimi i vlerave të matura RGBW col = "" # Vlerat maksimale Faktorët e normalizimit, duhet të përcaktohen në mënyrë eksperimentale # p.sh. kundrejt një fletë të bardhë letre. Kontrolloni dhe korrigjoni herë pas here. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Sfondi/Vlerat minimale faktorët e normalizimit, duhet të përcaktohen në mënyrë eksperimentale # p.sh. kundrejt fletës së zezë të letrës. Kontrolloni dhe korrigjoni herë pas here. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # vlera të normalizuara, midis 0 dhe 1 rel_bright = ((qartë - min_bright)/(max_bright - min_bright)) rel_red = ((e kuqe - min_red)/(max_red - min_red)) rel_green = ((jeshile - min_green)/(max_green - min_green)) rel_blue = ((blu - min_blue)/(max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blv_) 35 h9 = nëse rel_bright> 0.9: col = "bardhë" # nëse është shumë e ndritshme -> e bardhë elif rel_bright zi tjetër: col = hue2color (nuancë) # përzgjedhje ngjyrash sipas vlerave të nuancës # print ("vlerat relative të ndritshme, të kuqe, jeshile, blu:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("Vlerat e HSV (nuanca, ngopja, vlera):", hsv_col) # print ("nuanca në °", nuanca) kthehen [col, rel_bright, rel_red, rel_green, rel_blue, nuancë]

def kryesore ():

button = aiy.voicehat.get_button () # ndrysho statusin e butonit led = aiy.voicehat.get_led () # ndrysho statusin e butonit-LED aiy.audio.get_recorder (). fillimi () # buttoni = Butoni (5) # sensori i distancës ose buton tjetër i jashtëm, i lidhur me servo3/GPIO 05

aiy.audio.say ("Përshëndetje!",, vëllimi = 50, pitch = 100) # vëllimi dhe hapi kërkojnë rishikimin e nëntorit 2017 të shoferit audio.py dhe _tty.py!

aiy.audio.say ("Për të filluar, lëvizni sensorin mbi objektin. Pastaj shtypni butonin blu",, volumi = 50, pitch = 100) printoni ("Për të aktivizuar matjen e ngjyrës vendosni sensorin mbi objektin, pastaj shtypni butonin blu ") ndërsa True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # për butonin e jashtëm, zëvendësoni butonin me buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Matja ",, vëllimi = 50, pitch = 100) rezultati = tcs34725 () # evokon matjen dhe interpretimin col = rezultat [0] # ngjyra, si tekst nuancë = str (int (rezultati [5])) # nuancë në °, si tekst r_red = str (int (rezultati [2]*255)) # V vlera, si teksti r_green = str (int (rezultati [3]*255)) # Vlera G, si teksti r_blue = str (int (rezultati [4]*255)) # Vlera B, si tekst r_bright = str (int (rezultati [1]*100)) # Vlera W, si tekst led.set_state (aiy.voicehat. LED. OFF) nëse col == "bardhë "ose col ==" black ": bright =" "elif (rezultati [1]> 0.69): #shkëlqimi/ndriçimi i ngjyrës bright =" light "elif (rezultati [1] <0.25): bright =" dark "tjetër: bright = "medium" # duke komunikuar t ai rezulton color_text = ("Ngjyra e objektit është" + e ndritshme + "" + col) print (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("Vlera e nuancës është "+ hue+" gradë ") print (hue_text) aiy.audio.say (hue_text,, volumi = 75, pitch = 100)

nëse _name_ == '_majt_': kryesore ()

Hapi 4: Disa lidhje dhe vërejtje

Fleta e të dhënave të sensorit TCS34725 mund të gjendet këtu:

Kodi për të lexuar sensorin që kam përdorur u përshkrua këtu:

Ju mund të gjeni disa informacione shtesë mbi matjet e ngjyrave me këtë dhe një sensor tjetër në udhëzimet e mia të mëparshme:

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

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

Recommended: