Բովանդակություն:

Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա. 4 քայլ
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա. 4 քայլ
Anonim
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա
Խոսող գույնի տվիչ ՝ հիմնված AIY ձայնային հավաքածուի վրա

Վերջերս մի փոքր սովորելով Բրայլյան տառի մասին, ես մտածում էի ՝ կարո՞ղ եմ ինչ-որ բան կառուցել ՝ օգտագործելով Raspberry Pi- ի համար նախատեսված AIY ձայնային հավաքածուն, որը կարող է իրական օգուտ ունենալ տեսողության խնդիրներ ունեցողների համար: Հետևյալում նկարագրված, դուք կգտնեք պարզ գույնի հայտնաբերման սարքի նախատիպ, որը բարձրաձայն կարդում է դրա արդյունքները:

Այս համակարգի ավելի մշակված տարբերակը կարող է օգտակար լինել տեսողության կամ գունային կուրության խանգարում ունեցող մարդկանց համար:

Համակարգը օգտագործում է Raspberry Pi- ն ՝ կցված AIY ձայնային գլխարկով: TCS34725 RGB սենսորային անջատումը միացված է HAT- ի I2C նավահանգստին: Բեկումը պարունակում է պայծառ տաք սպիտակ LED, որը լուսավորում է վերլուծվող օբյեկտը: Բեկումը տեղադրվել է պատյանում `չափման պայմանների օպտիմալացման և ստանդարտացման համար:

Երեք գույնի տվիչը չափում է մոտավորապես նույն երեք հաճախականությունների տիրույթը, ինչ ձեր աչքերի գույնի տվիչները: Այնուհետև կարմիր, կանաչ և կապույտ (RGB) արժեքները օգտագործվում են ընդհանուր գույնի տպավորությունը հաշվարկելու համար:

Այս հատուկ համակարգի հաճելի բանն այն է, որ այն այժմ ձեզ բանավոր է ասում գույնը ՝ օգտագործելով AIY ձայնային հավաքածուների «ասա» հրամանը: Խնդրում ենք դիտել կից տեսանյութը:

Սարքը կարող է նաև օգտակար լինել որպես օրինակ I2C սենսորային սարքի համար, որը միացված է AIY ձայնային HAT- ին:

Քայլ 1: Օգտագործված նյութեր

Raspberry Pi 3. ~ 35 ԱՄՆ դոլար կամ եվրո

AIY ձայնային հավաքածու, վերնագրերով զետեղված HAT- ին: US 25 ԱՄՆ դոլար կամ եվրո

Adafruit TCS34725 ճեղքվածք ՝ գլխիկով զոդված: US 8 ԱՄՆ դոլար կամ եվրո

Թռիչքային մալուխներ:

Հացաթուղթ (ըստ ցանկության)

Սենսորային պատյանների համար. Ես օգտագործել եմ սոսնձվող սեւ ռետինե փրփուր:

Լրացուցիչ `փոքր անջատիչ` չափումները առաջացնելու համար

Մի քանի կաթիլ պլաստիկ սոսինձ և դանակ:

Քայլ 2: Հավաքում և օգտագործում

Հավաքում և օգտագործում
Հավաքում և օգտագործում
Հավաքում և օգտագործում
Հավաքում և օգտագործում
Հավաքում և օգտագործում
Հավաքում և օգտագործում

Raspberry Pi- ն AIY ձայնային գլխարկով տեղադրված էր, ինչպես նկարագրված է AIY ձեռնարկում: Հավաքվելուց առաջ գլխարկները կպչում էին HAT- ի նավահանգիստներին: Սենսորի պատյանների համար «Dulce Gusto» սուրճի պարկուճը դատարկվեց, մաքրվեց, իսկ ներքևի հատվածը զգուշորեն հանվեց դանակով: Այս նպատակի համար կարող եք օգտագործել այլ բան, սուրճի պարկուճը պարզապես ուներ ճիշտ չափս և ձև: 2 մմ Forex- ի կլոր կտորը կտրված էր ափսեից, այնուհետև բեկումը տեղադրվում էր կենտրոնականորեն Forex ափսեի վրա, դիրքը նշվում էր զգայական գրիչով, իսկ ճեղքումի վերնագրի համար անցքը կտրվում էր համապատասխան դիրքում:

Այժմ Forex- ի կտորը սոսնձված էր պատյանին և սենսորային ճեղքվածքը ամրացված էր Forex- ի ափսեին ՝ օգտագործելով Velcro ժապավեն: Այնուհետեւ ներքին պատերը ծածկված էին թեթեւ ներծծող սեւ նյութով, ես օգտագործեցի ինքնասոսնձվող ռետինե փրփուր: Սև ստվարաթուղթը նույնպես պետք է աշխատի: Այժմ, օգտագործելով jumper մալուխներ, HAT- ի I2C «3.3V» նավահանգիստը միացված էր սենսորի վրա «V in», Ground to Gnd, sda to sda և scl to scl: Երկու մասերը միացնելու համար ես օգտագործել էի հացահատիկ, բայց դա պարտադիր չէ:

Տեղադրեք AIY_TCS34725 պիթոնի սցենարը src պանակում և գործարկեք սցենարը dev տերմինալից ՝ մուտքագրելով «sec/AIY_TCS34752.py»: Հնարավոր է, որ սկզբում ստիպված լինեք Python սցենարը կատարելագործելի դարձնել: Երբ հարցնում եք, տեղադրեք սենսորային միավորը չափվող օբյեկտի վրա, սեղմեք AIY սարքի կոճակը և սպասեք մեկ -երկու վայրկյան:

Այնուհետև, չափված RGB և սպիտակ արժեքների հիման վրա, սարքը նախ հաշվարկում է համապատասխան երանգի արժեքը, այնուհետև գնահատում է գույնը այս արժեքի հիման վրա և դրանք բանավոր կերպով փոխանցում է AIY ձայնային համակարգի միջոցով, օրինակ. է. որպես «մուգ կարմիր», բայց նաև տալիս է երանգի արժեք: RGB- ի, երանգի և պայծառության (թեթևությունը, ճիշտն ասած) արժեքները նույնպես տպվում են էկրանին:

Գույնի անոտացիայի գործընթացը պարզեցնելու համար RGB արժեքները փոխակերպվում են HSV (երանգ, հագեցվածություն, արժեք) ձևաչափի: Սա թույլ է տալիս գույնը մեկնաբանել որոշակի տեսանկյունից (այսինքն ՝ կարկանդակի կտոր) և ընտրել գույնը ՝ հաշվարկված երանգի արժեքի հիման վրա:

Դուք պետք է նորմալացնեք ձեր սարքը սպիտակ և սև հղումների համեմատ: Պարզապես չափեք ձեր հասանելիք ամենաթեթև և սև կտորները, չափեք յուրաքանչյուրը և տեղադրեք այս արժեքները որպես առավելագույն և նվազագույն արժեքներ կոդի մեջ: Միայն օպտիմալ հղումների արժեքները կտան գույնի լավ ճանաչում:

Հիմնական խնդիրներից մեկը արտացոլումն է: Եթե ունեք փայլուն կամ փայլեցված մակերևույթ ունեցող մի առարկա, այն կարտացոլի LED- ի արտանետվող շատ լույս ՝ տեսնելով շատ ավելի թեթև, քան իրականում կա: Լույսը ցրելու համար կարող եք օգտագործել թաղանթաթերթ, բայց գուցե անհրաժեշտ լինի ուղղիչ գործոն ներդնել:

Թափանցիկ օբյեկտների դեպքում դրանք կարող են հարմար լինել դրանք տեղադրել սպիտակ թղթի վրա, հակառակ դեպքում արտացոլված լույսի քանակը փոքր կլինի, իսկ օբյեկտը `« սև »:

Եթե ցանկանում եք չափել լույս արձակող օբյեկտների գույնը, ապա պետք է անջատեք լուսամուտի լուսադիոդը ՝ ճեղքումի «LED» նավահանգիստը միացնելով «Ground» - ին: Այժմ համապատասխանաբար սահմանեք նորմալացման արժեքները:

Մեկ այլ ընդհանուր խնդիր է օբյեկտի լուսավորությունը: Warmերմ սպիտակ LED- ն ճեղքման վրա թողարկում է լույսի ոչ շարունակական սպեկտր: Հետևաբար, որոշ գույներ կարող են չափազանց կամ թեր ներկայացված լինել RGB սպեկտրում: Այս թեմայի վերաբերյալ լրացուցիչ տեղեկությունների համար խնդրում ենք ծանոթանալ իմ նախորդ հրահանգներին ՝ գունաչափերի/ լուսաչափերի և սպեկտրոմետրերի վերաբերյալ.

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

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

Քայլ 3: Կոդ

Օրենսգիրքը
Օրենսգիրքը

Կոդը AIY ձայնային ձեռնարկից ծածկագրի փոփոխման և Բրեդսպիի TCS34725 սենսորային կոդի համադրություն է:

Ես նաև փորձել էի օգտագործել Adafruit- ի TCS34725 պիթոնի ծածկագիրը, բայց խնդիրներ ունեցա այս և մի քանի այլ կոդերի գործարկման հետ, որոնք օգտագործում են արտաքին գրադարաններ AIY HAT- ի հետ համատեղ: Helpանկացած օգնություն ողջունելի է:

Ինչպես արդեն նշվեց, գունային ծանոթագրությունը հիմնված է RGB- ի վրա ստվերային արժեքների փոխակերպման վրա: Դուք պետք է կարգավորեք կարգավորումները ՝ հիմնվելով սպիտակ և սև ակնածանքի նյութերի փորձնական չափումների վրա: Լրացրեք համապատասխանաբար R, G և B min կամ max բացարձակ արժեքները:

Սցենարը օգտագործում է «ասա» հրամանի նոր տարբերակը, որը թույլ է տալիս կարգավորել ձայնը և բարձրությունը: Այն դեպքում, գուցե ստիպված լինեք կամ թարմացնել audio.py և tty վարորդի ֆայլերը կամ ջնջել «ձայնի և ձայնի մասերը» սցենարից:

#!/usr/bin/env python3 # Այս սկրիպտը servo_demo.py սցենարի հարմարեցում է AIY ձայնային գլխարկի համար, # օպտիմիզացված գույնի ճանաչման համար ՝ օգտագործելով Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat # gpiozero ներմուծման LED- ն # կարող է օգտակար լինել servo-port- ի արտաքին LED- ի համար # gpiozero ներմուծման կոճակից # կարող է օգտակար լինել servo-port- ի ներմուծման ժամանակի արտաքին կոճակի համար smbus bus = smbus. SMBus (1) ներմուծել colorsys def hue2color (երանգ). # գույնի մեկնաբանություն ՝ հիմնված հաշվարկված երանգների արժեքների վրա, եթե ((երանգ> 12) և (երանգ 25) և (երանգ 69) և (երանգ 164) և (երանգ 194) և (երանգ 269) և (երանգ 319) կամ (երանգ <20)).

def tcs34725 (): # չափում և մեկնաբանություն:

# Չափումը կատարվում է Bradspi TCS34725 սցենարով ՝ # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # տարբերակ # պետք է լինի 0x44, եթե ver == 0x44: print ("Device found / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ԱՆNAՆԵԼ գրանցել bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Միացնել, 0x02 RGB տվիչները միացված են bus.write_byte (0x29, 0x80 | 0x14) # Ընթերցման արդյունքները սկսում են գրանցամատյան 14, LSB, այնուհետև MSB տվյալներ = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | տվյալներ [0] կարմիր = տվյալներ [3] << 8 | տվյալներ [2] կանաչ = տվյալներ [5] << 8 | տվյալներ [4] կապույտ = տվյալներ [7] << 8 | տվյալներ [6] crgb = "Բացարձակ հաշվարկներ` C: %s, R: %s, G: %s, B: %s / n " %(պարզ, կարմիր, կանաչ, կապույտ) տպել (crgb) ժամանակը: քուն (1) այլ. Տպել («Սարքը չի գտնվել / n») # չափված RGBW արժեքների նորմալացում և փոխակերպում col = "" # Առավելագույն արժեքներ Նորմալացման գործոնները, պետք է փորձնականորեն սահմանվեն # օրինակ ընդդեմ սպիտակ թղթի: Checkամանակ առ ժամանակ ստուգեք և ուղղեք: max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Նախապատմություն/Նվազագույն արժեքների նորմալացման գործոնները, պետք է սահմանվեն փորձնականորեն # օրինակ ընդդեմ սև թղթի: Checkամանակ առ ժամանակ ստուգեք և ուղղեք: min_bright = 750 ր rel_green = ((կանաչ - min_green)/(max_green - min_green)) rel_blue = ((կապույտ - min_blue)/(max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blv_) 35 h9 = hue = 0 եթե rel_bright> 0.9: col = "սպիտակ" # եթե շատ պայծառ -> սպիտակ էլիֆ rel_bright սև այլ: col = hue2color (երանգ) # գույնի ընտրություն ըստ երանգների արժեքների # տպել ("հարաբերական արժեքները պայծառ, կարմիր, կանաչ, կապույտ:") # տպել (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV արժեքներ (երանգ, հագեցվածություն, արժեք).", hsv_col) # print ("hue in °", hue) վերադարձնել [col, rel_bright, rel_red, rel_green, rel_blue, երանգ]

def main ():

կոճակ = aiy.voicehat.get_button () # փոխել Կոճակի կարգավիճակը led = aiy.voicehat.get_led () # փոխել Կոճակ-LED կարգավիճակը aiy.audio.get_recorder (). սկիզբ () # buttoni = Կոճակ (5) # հեռավորության տվիչ կամ այլ արտաքին կոճակ ՝ միացված servo3/GPIO 05 -ին

aiy.audio.say («Բարև!»,, ծավալը = 50, սկիպիդար = 100) # ծավալը և սկիպիդարը պահանջում են audio.py և _tty.py վարորդի 2017 թ. նոյեմբեր ամսվա վերանայում:

aiy.audio.say («Սկսելու համար սենսորը տեղափոխեք օբյեկտի վերևում, այնուհետև սեղմեք կապույտ կոճակը»,, ծավալը = 50, սկիպիդար = 100) տպել («Գույնի չափման սենսորը օբյեկտի վերևում ակտիվացնելու համար, այնուհետև սեղմեք կապույտ կոճակը ") while True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # արտաքին կոճակի համար, կոճակը փոխարինեք buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Չափում »,, ծավալը = 50, սկիպիդար = 100) արդյունք = tcs34725 () # առաջացնում է չափում և մեկնաբանություն col = արդյունք [0] # գույն, որպես տեքստի երանգ = str (int (արդյունք [5])) # երանգ °, որպես տեքստ r_red = str (int (արդյունք [2]*255)) # R արժեք, որպես տեքստ r_green = str (int (արդյունք [3]*255)) # G արժեք, որպես տեքստ r_blue = str (int (արդյունք [4]*255)) # B արժեք, որպես տեքստ r_bright = str (int (արդյունք [1]*100)) # W արժեք, որպես տեքստ led.set_state (aiy.voicehat. LED. OFF), եթե col == "սպիտակ "կամ col ==" black ": bright =" "elif (արդյունք [1]> 0.69): #պայծառություն/գույնի լուսավորություն bright =" light "elif (արդյունք [1] <0.25): պայծառ =" մութ "այլ: պայծառ = "միջին" # հաղորդակցվող տ նա արդյունքներ է տալիս color_text = ("Օբյեկտի գույնը" + պայծառ + "" + col) տպագիր (գունային_տեքստ) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("The hue value is "+ երանգ+" աստիճան ") տպել (hue_text) aiy.audio.say (hue_text,, volume = 75, pitch = 100)

եթե _name_ == '_main_': main ()

Քայլ 4: Որոշ հղումներ և դիտողություններ

TCS34725 տվիչների տվյալների թերթիկը կարելի է գտնել այստեղ ՝

Իմ օգտագործած տվիչը կարդալու կոդը նկարագրված է այստեղ ՝

Այս և մեկ այլ սենսորով գունային չափումների վերաբերյալ լրացուցիչ տեղեկություններ կարող եք գտնել իմ նախորդ հրահանգներում:

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

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

Խորհուրդ ենք տալիս: