Sisällysluettelo:

Puhuva värianturi, joka perustuu AIY -äänisarjaan: 4 vaihetta
Puhuva värianturi, joka perustuu AIY -äänisarjaan: 4 vaihetta

Video: Puhuva värianturi, joka perustuu AIY -äänisarjaan: 4 vaihetta

Video: Puhuva värianturi, joka perustuu AIY -äänisarjaan: 4 vaihetta
Video: J. Krishnamurti - Сан-Диего, США 1974 - 12 беседа с А. Андерсоном - Любовь, секс и удовольствие 2024, Marraskuu
Anonim
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan
Puhuva värianturi, joka perustuu AIY -äänisarjaan

Opittuani vähän pistekirjoituksesta äskettäin mietin, voisinko rakentaa jotain käyttämällä AIY-äänisarjaa Raspberry Pi: lle, josta voi olla todellista hyötyä näkövammaisille. Seuraavassa kuvatulla tavalla löydät yksinkertaisen värinilmaisulaitteen prototyypin, joka lukee havaintonsa ääneen.

Kehittyneempi versio tästä järjestelmästä voi olla hyödyllinen henkilöille, joilla on näkövamma tai värisokeus.

Järjestelmä käyttää Raspberry Pi -laitetta, johon on liitetty AIY -äänihattu. TCS34725 RGB -anturikatkaisu on kytketty HAT: n I2C -porttiin. Läpivienti sisältää kirkkaan lämpimän valkoisen LED -valon, joka valaisee analysoitavan kohteen. Läpivienti sijoitettiin koteloon mittausolosuhteiden optimoimiseksi ja standardoimiseksi.

Kolme värianturia mittaa suunnilleen samat kolme taajuusaluetta kuin silmiesi värianturit. Sitten punaisia, vihreitä ja sinisiä (RGB) -arvoja käytetään kokonaisvärivaikutelman laskemiseen.

Mukava asia tässä erikoisjärjestelmässä on se, että se kertoo nyt värin suullisesti käyttämällä AIY -äänisarjojen "sano" -komentoa. Katso oheinen video.

Laite voi olla hyödyllinen myös esimerkkinä I2C -anturilaitteesta, joka on kytketty AIY -äänihattuun.

Vaihe 1: Käytetyt materiaalit

Raspberry Pi 3. ~ 35 US dollaria tai euroa

AIY -äänisarja, otsikot juotettuna HAT -laitteeseen. ~ 25USD tai EUR

Adafruit TCS34725 breakout, juotettu otsikko. ~ 8 Yhdysvaltain dollaria tai euroa

Käynnistyskaapelit.

Leipälauta (valinnainen)

Anturikotelo:- käytetty "Dolce Gusto" -kapseli- pieni pyöreä 2 mm: n Forex-palanen (PVC-vaahtolevy), halkaisija noin 37 mm- heijastamaton musta materiaali kotelon sisäseinien peittämiseksi. Käytin itseliimautuvaa mustaa kumivaahtoa.

Valinnainen: pieni kytkin mittausten käynnistämiseksi

Muutama tippa muoviliimaa ja leikkuuterä.

Vaihe 2: Kokoaminen ja käyttö

Kokoonpano ja käyttö
Kokoonpano ja käyttö
Kokoonpano ja käyttö
Kokoonpano ja käyttö
Kokoonpano ja käyttö
Kokoonpano ja käyttö

Raspberry Pi, jossa on AIY -äänihattu, määritettiin AIY -käsikirjan mukaisesti. Ennen kokoonpanoa otsikot juotettiin HAT -portteihin. Anturin koteloa varten "Dulce Gusto" -kapseli tyhjennettiin, puhdistettiin ja osa pohjasta poistettiin varovasti veitsellä. Voit käyttää tähän tarkoitukseen jotain muuta, kahvikapseli oli juuri oikean kokoinen ja muotoinen. Pyöreä 2 mm: n Forex -kappale leikattiin levyltä, katkaisu sijoitettiin sitten keskelle Forex -levyä, huopakynällä merkitty paikka ja aukko otsikolle aukossa leikattiin oikeaan kohtaan.

Nyt Forex -kappale liimattiin koteloon ja anturirikko kiinnitettiin Forex -levyyn tarranauhalla. Sitten sisäseinät peitettiin valoa absorboivalla mustalla materiaalilla, käytin itseliimautuvaa kumivaahtoa. Mustan pahvin pitäisi myös toimia. Nyt, hyppyjohtojen avulla, HAT: n I2C "3.3V" -portti liitettiin anturin "V in" -liittimeen, Ground to Gnd, sda to sda ja scl to scl. Olin käyttänyt leipälautaa molempien osien yhdistämiseen, mutta se ei ole välttämätöntä.

Aseta AIY_TCS34725 python -skripti src -kansioon ja suorita komentosarja kehittäjäpäätteestä kirjoittamalla "sec/AIY_TCS34752.py". Sinun on ehkä tehtävä python -komentosarja suoritettavaksi ensin. Aseta pyydettäessä anturiyksikkö mitattavan kohteen päälle, paina AIY -laitteen painiketta ja odota sekunti tai kaksi.

Sitten laite laskee ensin mitatun RGB- ja valkoisen arvon perusteella vastaavan sävyarvon, arvioi sitten värin tämän arvon perusteella ja kommunikoi ne suullisesti AIY -äänijärjestelmän kautta, esim. g. "tummanpunaisena", mutta antaa myös sävyn arvon. RGB-, värisävy- ja kirkkausarvot (tarkkuus, vaaleus) tulostetaan myös näytölle.

Värien huomautusprosessin yksinkertaistamiseksi RGB -arvot muunnetaan HSV -muotoon (värisävy, kylläisyys, arvo). Tämän avulla voit merkitä värin tiettyyn kulma -alueeseen (eli piirakkaviipaleeseen) ja valita värin lasketun sävyarvon perusteella.

Laitteesi on normalisoitava valkoista ja mustaa viitettä vasten. Mittaa vain valkoisimmat ja mustimmat paperinpalat, mittaa kukin ja aseta nämä arvot enimmäis- ja vähimmäisarvoiksi koodiin. Vain optimaaliset vertailuarvot antavat hyvän väritunnistuksen.

Yksi perusongelma on heijastuminen. Jos sinulla on kiiltävä tai kiillotettu esine, se heijastaa paljon LEDin lähettämää valoa ja näyttää paljon kevyemmältä kuin se todellisuudessa on. Voit käyttää kalvolevyä valon hajottamiseen, mutta sinun on ehkä otettava käyttöön korjauskerroin.

Läpikuultavien esineiden tapauksessa saattaa olla kätevää sijoittaa ne valkoiselle paperille, muuten heijastuneen valon määrä on pieni ja esine ilmoitetaan "mustana".

Jos haluat mitata valoa lähettävien esineiden värin, katkaise katkaisijan LED -valo kytkemällä katkaisun "LED" -portti maahan. Aseta nyt normalisointiarvot vastaavasti.

Toinen yleinen ongelma on kohteen valaistus. Läpinäkyvä lämmin valkoinen LED-valo lähettää epäjatkuvan valonspektrin. Siksi tietyt värit saattavat olla yliedustettuja tai aliedustettuja RGB-spektrissä. Jos haluat lisätietoja tästä aiheesta, tutustu aikaisempiin ohjeisiini kolorimetreistä/ fotometreistä ja spektrometreistä:

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

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

Vaihe 3: Koodi

Koodi
Koodi

Koodi on yhdistelmä AIY -puheoppaan koodin muunnosta ja Bradspin TCS34725 -anturikoodia.

Olin myös yrittänyt käyttää Adafruutin TCS34725 -python -koodia, mutta minulla oli ongelmia tämän ja joidenkin muiden koodien käyttämisessä, jotka käyttävät ulkoisia kirjastoja yhdessä AIY HAT: n kanssa. Kaikki apu tervetullutta.

Kuten aiemmin mainittiin, värimerkinnät perustuvat RGB: n muuttamiseen värisävyiksi. Sinun on määritettävä normalisointiasetukset valkoisten ja mustien kunnioitustarvikkeiden kokeellisten mittausten perusteella. Täytä R, G ja B min tai max absoluuttiset arvot vastaavasti.

Skripti käyttää uutta versiota "sano" -komennosta, jonka avulla voidaan säätää äänenvoimakkuutta ja äänenvoimakkuutta. Siinä tapauksessa sinun on ehkä joko päivitettävä audio.py- ja tty -ajuritiedostot tai poistettava "äänenvoimakkuuden ja sävelkorkeuden osat" komentosarjasta.

#!/usr/bin/env python3 # Tämä skripti on mukautus servo_demo.py -komentosarjasta AIY -äänihattuun, # joka on optimoitu Afafruit TCS34725 -katkaisun tuonnin väritunnistukseen. # gpiozero-tuonti-LED-valosta # voisi olla hyötyä servoportin ulkoisessa LED-valossa # gpiozero-tuonti-painikkeesta # voisi olla apua servoportin tuontiajan ulkoisessa painikkeessa smbus-väylä = smbus. SMBus (1) tuo värit (värisävy): # värin tulkinta laskettujen sävyarvojen perusteella, jos ((sävy> 12) ja (sävy 25) ja (sävy 69) ja (sävy 164) ja (sävy 194) ja (sävy 269) ja (sävy 319)) tai (sävy <20)): color = "red" palauta väri else: print ("jotain meni pieleen")

def tcs34725 (): # mittaus ja tulkinta.

# Mittaus suoritetaan Bradspi TCS34725 -skriptillä: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # -versio # pitäisi olla 0x44, jos ver == 0x44: print ("Laite löytyi / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ENABLE register bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Virta päällä, 0x02 RGB -anturit käytössä väylä.write_byte (0x29, 0x80 | 0x14) # Lukutulokset aloittavat rekisterin 14, LSB ja MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] punainen = data [3] << 8 | data [2] vihreä = data [5] << 8 | data [4] sininen = data [7] << 8 | data [6] crgb = "Absoluuttiset määrät: C: %s, R: %s, G: %s, B: %s / n" %(kirkas, punainen, vihreä, sininen) print (crgb) time.sleep (1) else: print ("Laitetta ei löydy / n") # mitattujen RGBW -arvojen normalisointi ja muunnos col = "" # Suurimmat arvot Normalisointikertoimet on määritettävä kokeellisesti # esim. vs. valkoinen paperiarkki. Tarkista ja korjaa aika ajoin. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Tausta/Vähimmäisarvojen normalisointikertoimet, on määritettävä kokeellisesti # esim. vs. musta paperiarkki. Tarkista ja korjaa aika ajoin. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normalisoidut arvot välillä 0-1 rel_bright = ((kirkas - min_bright)/(max_bright - min_bright)) rel_red = ((punainen - min_punainen)/(max_red - min_red)) rel_green = ((vihreä - min_vihreä)/(max_vihreä - min_vihreä)) rel_blue = ((sininen - minisininen)/(max_sininen - minisininen)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hsv_col [0] jos rel_bright> 0.9: col = "valkoinen" # jos erittäin kirkas -> valkoinen elif rel_bright black else: col = hue2color (hue) # värin valinta sävyarvojen mukaan # print ("suhteelliset arvot kirkas, punainen, vihreä, sininen:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV -arvot (hue, saturation, value):", 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 Painikkeen tila led = aiy.voicehat.get_led () # muutos Painike-LED-tila aiy.audio.get_recorder (). start () # buttoni = Painike (5) # etäisyysanturi tai muu ulkoinen painike, kytketty servo3/GPIO 05: een

aiy.audio.say ("Hei!",, äänenvoimakkuus = 50, sävelkorkeus = 100) # äänenvoimakkuus ja äänenvoimakkuus edellyttävät marraskuussa 2017 tarkistettavaa audio.py- ja _tty.py -ajuria!

aiy.audio.say ("Aloita siirtämällä anturi kohteen yläpuolelle. Paina sitten sinistä painiketta",, äänenvoimakkuus = 50, sävelkorkeus = 100) print ("Aktivoi värimittauspaikkaanturi kohteen yläpuolella ja paina sitten sinistä painiketta ") kun True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # ulkoiselle painikkeelle, korvaa painike buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Mittaus ",, tilavuus = 50, sävelkorkeus = 100) tulos = tcs34725 () # herättää mittauksen ja tulkinnan col = tulos [0] # väri, tekstinä sävy = str (int (tulos [5])) # sävy °, tekstinä r_punainen = str (int (tulos [2]*255)) # R -arvo, tekstinä r_vihreä = str (int (tulos [3]*255)) # G -arvo, tekstinä r_sininen = str (int (tulos [4]*255)) # B -arvo, tekstinä r_bright = str (int (tulos [1]*100)) # W -arvo, tekstinä led.set_state (aiy.voicehat. LED. OFF), jos col == "valkoinen "tai col ==" musta ": kirkas =" "elif (tulos [1]> 0,69): #värin kirkkaus/vaaleus kirkas =" vaalea "elif (tulos [1] <0,25): kirkas =" tumma "muu: bright = "medium" # kommunikoiva t hän tulokset color_text = ("Objektin väri on" + kirkas + "" + col) print (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("Sävyn arvo on "+ sävy+" astetta ") tulosta (hue_text) aiy.audio.say (hue_text,, volume = 75, pitch = 100)

jos _nimi_ == '_main_': main ()

Vaihe 4: Joitakin linkkejä ja huomautuksia

TCS34725-anturin tietolomake löytyy täältä:

Käyttämäni anturin lukukoodi on kuvattu täällä:

Saat lisätietoja tämän ja toisen anturin värimittauksista aiemmista ohjeistani:

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

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

Suositeltava: