Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • TV (Smart TV)
  • Njohja e numrave në mikrokontrollues. Kontrolli i zërit Arduino duke përdorur përpunimin dhe API të të folurit të Google

Njohja e numrave në mikrokontrollues. Kontrolli i zërit Arduino duke përdorur përpunimin dhe API të të folurit të Google

Në këtë tutorial Arduino, ne do t'ju tregojmë se si të përdorni aplikacionin celular Android dhe modulin Bluetooth HC-05 për të kontrolluar me zë një LED.

Për këtë mësim, na duhen një minimum përbërësish. Pasi të bëni mësimin, mund ta ndërlikoni qarkun dhe ta plotësoni atë me pajisje sipas dëshirës tuaj.

  • Arduino UNO
  • Moduli Bluetooth HC-05
  • Tabela e bukës
  • telat
  • Rezistencë 330 ohm
  • Diodat që lëshojnë dritë (LED)

Hapi 2: Lidhja e modulit Bluetooth HC-05

Moduli standard Bluetooth HC-05 ka gjashtë kunja. Megjithatë, në këtë projekt, ne do të përdorim vetëm 4.

Ne do të përdorim pinin VCC, pinin GND, pinin TXD dhe pinin RXD. Pini VCC i modulit bluetooth është i lidhur me +3.3V nga Arduino. Pini GND i modulit është i lidhur me GND (tokë) të Arduino. Pini TX i modulit bluetooth është i lidhur me pinin dixhital 0 (RXD) dhe kunja RXD është e lidhur me pinin dixhital 1 (TXD).

Hapi 3: Lidhja e LED-ve

Hapi tjetër në krijimin e LED-ve të kontrolluara me zë është lidhja e LED-ve me Arduino përmes tabelës së bukës.

Së pari, lidhni skajin e shkurtër të LED me tokën. Më pas lidhni skajin e gjatë të secilës prej LED-ve me një rezistencë 330 ohm. Më në fund, lidhni rezistencën aktuale nga LED me kunjat dixhitale në Arduino.

Në këtë projekt, ne do të lidhim një LED me pinin dixhital 2, një tjetër me pinin dixhital 3 dhe LED-in e fundit me pinin dixhital 4.

Hapi 4: Ushqyerja

Për këtë projekt, ne mund ta fuqizojmë Arduino-n përmes çdo furnizimi me energji +5V. Mund të përdorni portën USB nga kompjuteri juaj për të fuqizuar Arduino-n, por për këtë projekt, ne do të përdorim një bateri portative 5V. Përpara se të lidhni një burim energjie me Arduino-n tuaj, sigurohuni që GND i Arduino-s të jetë i lidhur me tokën e tabelës së bukës.

Hapi 5: Kodi

Kodi për projektin tonë është më poshtë.

Hapi 6: Përdorimi i aplikacionit celular

Mund të filloni të testoni projektin tuaj duke shkarkuar aplikacionin Android - BT Voice Control për Arduino (BT Voice Control për Arduino), krijuar nga SimpleLabsIN.

Pasi të keni shkarkuar dhe instaluar aplikacionin në telefonin tuaj Android, klikoni në shiritin e menusë në këndin e sipërm djathtas dhe zgjidhni Connect Robot. Në dritaren e re që shfaqet, zgjidhni modulin Bluetooth HC-05 dhe lidheni atë.

Tani, kur shqiptoni komanda të caktuara nga kodi në pajisjen tuaj përmes aplikacionit, disa LED duhet të ndizen dhe fiken. Shikoni më nga afër kodin, ku tregohen komandat dhe vendosni tuajin. Për shembull, në vend të "*ndizni të kuqe" ju mund të specifikoni vetëm "të kuqe". Kështu që komandat do të jenë më të shpejta, më të shkurtra dhe më të qarta.

Hapi 7: Rezultati përfundimtar

Rezultati përfundimtar mund të shihet në videon më poshtë.

Ju urojmë projekte të suksesshme! Mos harroni të lini komente për projektin në faqen tonë

Në këtë projekt, unë kombinova një detektor për zbulimin e fytyrës dhe një sistem gjurmimi.

Shkurtimisht, thelbi i projektit: një kamerë në internet e instaluar në një mekanizëm rrotullues është e lidhur me një kompjuter që funksionon sistemin operativ Windows dhe me softuerin e instaluar OpenCV. Nëse programi zbulon një fytyrë në fushën e shikimit të kamerës së internetit, atëherë llogaritet qendra e fytyrës. Koordinatat X dhe Y transmetohen në kontrolluesin Arduino, i cili është i lidhur me kompjuterin nëpërmjet USB-së. Nga ana tjetër, kontrolluesi Arduino, sipas komandave të marra, kontrollon dy servomotorë: përgjatë koordinatës X dhe përgjatë koordinatës Y, d.m.th. ofrohet sistemi i monitorimit.

Biblioteka OpenCV (Open Source Computer Vision Library) mund të shkarkohet. Biblioteka është me shumë platforma, aktualisht ekziston në sistemet e mëposhtme operative: Windows, Linux, Android, Mac OS dhe madje edhe iOS. Biblioteka ofron përpunimin e imazhit në kohë reale. Shkruar në C/C++.

Se. ky projekt është një përzierje e zgjidhjeve të buta dhe të forta. Përpunimi i imazhit kryhet në një kompjuter, dhe kontrolli i servo kryhet duke përdorur një kontrollues.

Pra, ajo që përdora për projektin:

Softueri:
Arduino IDE 1.0 për Windows

Microsoft Visual C++ 2010 Express SP1
Biblioteka serike C++ për Win32 (nga Thierry Schneider)

Hekuri:
kompjuter me Windows 7 SP1
Arduino Uno ose i pajtueshëm + PSU
2 servo
Uebkamera USB

Pra, le të shkojmë.

Hapi 1. Instalimi i softuerit

1) Nëse keni një OS Windows, atëherë shkarkoni skedarin OpenCV-2.3.1-win-superpack.exe (ose më vonë) dhe instaloni bibliotekën.

2) Shkarkoni dhe instaloni Microsoft Visual C++ 2010 Express. Nëse keni një version 64-bit të Windows, atëherë do t'ju duhet gjithashtu të shkarkoni SDK-në e Windows (por për versionin 64-bit mund të ketë probleme, nuk mund ta bëj OpenCV të funksionojë nën Windows 7 x64).

Lexoni procesin e konfigurimit të OpenCV për Visual C++ në faqen zyrtare të internetit.

Hapi 2 Ngjitja e kamerës dhe servo motorëve

Dizenjimin nuk e bëra “të qëndrueshëm”, sepse pasi të arrij qëllimin final, e shkëput gjithçka për projektin e radhës.
Kam bashkangjitur webkamerën me servomotorin e boshtit X dhe, nga ana tjetër, e fiksova në servomotorin e boshtit Y. Dhe e rregullova të gjithë këtë strukturë në një kapëse të dorës së tretë.

Hapi 3 Lidhuni

Lidhja e servomotorëve:
Kunja e verdhë nga servo e boshtit X është e lidhur me pinin 9 të Arduino.
Kunja e verdhë nga servo e boshtit Y është e lidhur me pinin 10 të kontrolluesit Arduino
Pini i kuq Vcc nga servo lidhja me pinin 5V
Pini i zi GND nga servo është i lidhur me pinin GND të kontrolluesit Arduino.

Lidhja me uebkamerën:
Webkamera lidhet me kompjuterin nëpërmjet një ndërfaqe USB. Programi C++ e identifikon uebkamerën me numrin e portës USB. Mund t'ju duhet të specifikoni portin në program.

Lidhja e kontrolluesit Arduino UNO:
Kontrolluesi gjithashtu lidhet me një kompjuter nëpërmjet një ndërfaqe USB. Një port virtual COM shfaqet në sistem, i cili duhet të futet në kodin e programit në C ++.

Në njëfarë mënyre lindi ideja për të bërë kontrollin e zërit Arduino, por një Arduino nuk mjafton, sepse. për një sistem shtëpie inteligjente, duhet gjithashtu të komunikoni me një kompjuter dhe sistemet e tij.

Gjetja e një zgjidhjeje:

BitVoice
Kam hasur në artikuj të ndryshëm duke përdorur BitVoicer në lidhje me Arduino, por i gjithë problemi është se BitVoicer funksionon vetëm në Windows dhe kjo nuk lejon përdorimin e sistemit në pajisje të thjeshta si Rasberry Pi që funksionon Unix.
Njohja e zërit Arduino
Arduino mund të kontrollohet edhe me zë falë modulit të njohjes së zërit, por deri më tani nuk kam mjete për ta blerë dhe ka një sërë shqetësimesh gjatë përdorimit të këtij moduli: një numër i kufizuar komandash, trajnime të lodhshme, komanda të reja kërkojnë ndezjen e modulit, i cili tashmë është një minus nëse sistemi korrigjohet dhe instalohet.

Zgjidhje

Fillova të kërkoja një zgjidhje ndër-platformë që do të lejonte sistemin të punonte në sisteme të shumta operative. E gjeta këtë: Biblioteka e fjalës në tekst për Java/Përpunim. Kompleksi zbatohet në bazë të gjuhës Përpunim (Java) Dhe Google Speach API për të cilën ka shkruar tashmë më parë. Kjo zgjidhje ju lejon të monitoroni zërin në kohë reale aktivizo AutoRecord(), vendosni kufirin e volumit enableAutoThreshold(), lidhni mikrofonat e jashtëm getLineIn(), specifikoni gjuhën e njohjes setLanguage (string). Një listë e plotë e veçorive dhe specifikave gjendet në faqen e internetit të zhvilluesit: http://stt.getflourish.com. Për të punuar, na duhet çelësi i API i të folurit të Google. Si ta merrni atë përshkruhet këtu: www.chromium.org/developers/how-tos/api-keys. E vetmja pikë negative është se Google Speech ju lejon të përpunoni vetëm 50 kërkesa në ditë, por në praktikë kalojnë më shumë se 500 kërkesa.

Për ta bërë më të lehtë navigimin nëpër tekst në të ardhmen, po i bashkangjit të gjitha burimet që tashmë përmbajnë komanda zanore, lidhjen me tabelën Arduino, një skicë për tabelën Arduino, konfirmimin zanor të frazave dhe gjithçka tjetër që është tashmë. atje dhe duke punuar: burimet. Pas shkarkimit, ne vendosim dosjen GoogleTTS në libraritë e Përpunimit "a. Skica e Arduino është në dosjen GoogleTTS / ArduinoSerial. Gjithçka është shkruar në Processing 3.0a4, e disponueshme në para-publikim në faqen zyrtare të internetit.

Zbatimi("Dëgjo urdhrin tim!"):
Njohja është bërë. Tani duhet të kapim komandat që na duhen dhe të marrim vendime për to. Ky seksion është përgjegjës për:
void commands() ( if (rezultat. barabartë ("arduino")) ( // Kërkoni një përputhje // Ekzekutoni komandën kur të merret një përputhje ) tjetër nëse (rezultati është i barabartë ("për sa kohë")) ( // Ekzekutoni komanda kur merret një ndeshje ) )
Përgjigje me zë
Tani na duhet një mjet që do të na përgjigjet me zë njerëzor nëse gjendet një ndeshje. Google Translate u zgjodh si një mjet implementimi, ose më mirë një modul që konverton tekstin në zë. Teksti dërgohet me një kërkesë në serverin e Google, konvertohet në një skedar audio dhe na dërgohet përsëri në format mp3. Ky seksion është përgjegjës për:
void googleTTS (String txt, String language) ( // konvertimi i tekstit në tingull bëhet me komandën googleTTS("text", "language") String u = "http://translate.google.com/translate_tts?tl=" ; u = u + gjuha + "&q=" + txt; u = u.replace(" ", "%20"); provo (URL url = URL e re(u); provo (lidhje URLConnection = url.openConnection() ; lidhje. setRequestProperty("User-Agent", "Mozilla/4.0 (i pajtueshëm; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 1.2.30"); .connect(); InputStream është = lidhje.getInputStream(); Skedari f = Skedar i ri (sketchPath + "/" + txt + ".mp3"); OutputStream out = FileOutputStream i ri (f); byte buf = bajt i ri; int len; while ((len = është.lexo(buf)) > 0) (out.write(buf, 0, len); ) out.close(); is.close(); println("Skedari i krijuar: " + txt + " .mp3"); ) catch (IOException e) (e.printStackTrace(); ) ) catch (MalformedURLException e) (e.printStackTrace(); ) )

Seksioni është përgjegjës për përpunimin e drejtpërdrejtë të frazave të tekstit:
void voicer(String s) ( // Kryhet nga voicer("tekst") println(s); // përdoret për të monitoruar tekstin Skedari f = Skedari i ri(sketchPath + "/" + s + ".mp3"); // Kontrollimi i skedarit // Nëse skedari ekziston tashmë, luani skedarin if(f.exists())( println("Skedari ekziston tashmë! Po luhet skedari!"); player = minim.loadFile(s + ".mp3") ; player.play (); ) // Nëse skedari nuk ekziston ende, krijoni atë tjetër ( println("Nuk ka ende një skedar! Unë po e krijoj!"); googleTTS(s, "ru" ); player = minim.loadFile(s + ".mp3"); player.play(); ) )

Një shembull i zbatimit të njohjes dhe konfirmimit zanor:
komandat void() (nëse (rezultati është i barabartë ("kompjuter")) ( // Kërkoni një zëdhënës të përputhjes ("Dëgjo"); // Merrni një konfirmim zanor // Ekzekutoni komandën kur merret një përputhje) )
Ai është gjallë!

Përpunim + Arduino

Epo, duket se funksionon, por diçka mungon. Tani le të miqësohemi me Arduino.
Inicializoni lidhjen serike në Përpunim për të dërguar të dhëna te Arduino (për përdoruesit e Mac dhe Unix):
Emri i portit të vargut = Serial.list(); myPort = serial i ri (ky, emri i portit, 9600); myPort.bufferUntil("\n");

Për përdoruesit e Windows:
String myPort = serial i ri (kjo, "porti juaj COM", 9600); myPort.bufferUntil("\n");

Dhe ne do të dërgojmë një komandë atje kur të gjendet një përputhje zanore:
void commands() ( if (rezultati është i barabartë ("ndiz dritën")) ( // Nëse fraza zanore u njoh si "ndize dritën", atëherë ekzekuto kërkesën myPort.write("High"); / / Dërgon komandën e Lartë te zëdhënësi i lidhjes serike ("Ndiz dritën"); // Konfirmim zanor i ekzekutimit të komandës ) tjetër nëse (rezultati është i barabartë ("fik dritën")) ( myPort. write( "Low"); // Dërgon komandën Low te zëdhënësi i lidhjes serike ("Fik dritën"); // Konfirmim // Ekzekutimi i komandës kur merret një ndeshje) )

Tani le t'i hedhim një sy tabelës Arduino. Duhet të dëgjojmë portin Serial dhe, kur të gjendet një komandë nga lista, të kryejmë veprimin e kërkuar sipas komandës. Skica është shumë e thjeshtë:
int led = 13; // PIN LED në bord void setup() ( Serial.begin(9600); // Inicializimi i lidhjes serike pinMode(led, OUTPUT); // Pini LED transmeton të dhëna ) void loop() ( int i=0; // ndryshore për të futur një varg në një tampon tampon char; // grup buffer për të futur një varg në të if(Serial.available())( // Kontrollo portën serike për vonesë të të dhënave (100); //drejto atë që është lexuar në buffer while(Serial.disponohet () && i< 99) { buffer = Serial.read(); } //закрываем массив buffer="\0"; String val = buffer; if (val == "High") { // Если получили значение High Serial.println("Led is On"); // Отправляем в Serial подтверждение получения digitalWrite(led, HIGH); // Включаем светодиод } if (val == "Low") { // Если получили значение Low Serial.println("Led is Off"); // Отправляем в Serial подтверждение получения digitalWrite(led, LOW); // Выключаем светодиод } } }
Gjithçka. Ne kontrollojmë.

Problemet dhe planet:

Sepse Unë nuk kam bërë programim më parë këtë herë, nuk i kuptoj plotësisht disa gjëra në procesin e korrigjimit. Do të isha mirënjohës nëse dikush mund të më tregonte se si t'i zgjidh problemet nga lista e mëposhtme:

Problemi më themelor është se fraza zanore nuk shqiptohet në tërësi. Shkronjat e fundit mungojnë. Megjithëse skedari i zërit vjen nga serveri i Google në formën e tij normale. Siç e kuptoj situatën: problemi është audio player, por ku saktësisht nuk është ende e qartë.
- Tashmë kam shkruar që Google Speech API ka një kufi prej 50 kërkesash në ditë, por në fakt rezulton më shumë. Në çdo rast, kjo nuk mjafton. Kam në plan të regjistroj njohjen lokale të komandës kryesore dhe vetëm pas njohjes së saj, ta dërgoj pjesën tjetër të tekstit në Google për përpunim. Po kërkoj një zgjidhje.
- Unë mendoj se nuk do të dëmtojë dërgimi i komandave në mburojën Arduino Ethernet, sepse. disa sisteme mund të jenë në një distancë të mirë nga kompjuteri pritës dhe lidhja serike nuk do të funksionojë këtu. Do të merrem me këtë vendim një nga këto ditë, sepse. Unë nuk kam një ruter për të lidhur një Arduino me një mburojë Ethernet me të.

Kjo është e gjitha për tani! Ju lutemi, mos gjykoni rreptësisht nga rreshtat e kodit! Sapo fillova të studioja këtë trampolinë dhe do të isha jashtëzakonisht mirënjohës nëse më thesni me hundë se si të mos e bëja dhe më tregoni se si ta bëj. Do të jem i lumtur gjithashtu nëse të interesuarit e tjerë i bashkohen këtij projekti - jam gjithmonë i hapur për komunikim!

A ju kujtohet se si disa vite më parë (dhe ndoshta edhe tani) ishte e popullarizuar ideja për të kontrolluar dritën në një dhomë me ndihmën e kapëseve? Por, në fund të fundit, është shumë i përshtatshëm, ju jeni shtrirë në shtrat, shumë dembel për t'u ngritur dhe për të duartrokitur për të fikur dritën ose shkojmë në shtëpi, është errësirë, kërkon shumë kohë për të gjetur çelësin, dhe pastaj që nga pragu bie një ose dy duartrokitje dhe drita tashmë është ndezur. Më duket se ky koncept është ende i rëndësishëm, por teknologjitë më të larta mund të aplikohen në të në krahasim me ato që ishin 5 vjet, 10 vjet më parë. Tani, për një sasi relativisht të vogël, mund të blini disa pjesë dhe të programoni dizajnin për funksione të ngjashme, të cilat do të diskutohen më poshtë.

Sot do të shqyrtojmë një modul të krijuar për të njohur komandat zanore (duke përfshirë vetëm zërat brenda një komande zanore të regjistruar) - Moduli i njohjes së zërit V3.1 (V3) ose emri kodues i përdorur zakonisht FZ0475.

Paketa përfshin vetë modulin (bordi i qarkut të printuar është i një cilësie shumë të mirë), një mikrofon në një këmbë fleksibël me një lidhës fole 3,5 mm dhe kontakte PLS me kënd me një hap prej 2,56 mm për tabelën e modulit (ato mund të hiqen nëse lidhur me kontaktet e modulit me një mënyrë tjetër).

Deri më sot, ekzistojnë disa lloje modulesh me funksionalitet të ngjashëm nga prodhues dhe zhvillues ose versione të ndryshme. Ky modul i njohjes së zërit, për mendimin tim, ka një ekuilibër të caktuar midis kostos, funksionalitetit dhe komoditetit. Moduli EasyVR do të jetë më i fuqishëm dhe dukshëm më i shtrenjtë. Modulet e bazuara në LD3320 do të jenë më të lira dhe më të papërshtatshëm (të papërshtatshëm të paktën sepse nuk është e lehtë të gjesh përshkrime normale për ta, por përndryshe është tashmë subjektive).

Karakteristikat e modulit të njohjes së zërit V3.1 (V3):

  • Tensioni i furnizimit - 5 volt
  • Konsumi aktual - deri në 40 mA
  • Ndërfaqet - UART, GPIO
  • Saktësia e njohjes - 99% (në kushte ideale)
  • Gama - varet nga mikrofoni i përdorur, për një mikrofon standard nga kompleti, diapazoni është 0,5 - 1 metër i distancës maksimale me një zë mjaft të lartë, nëse zëri është i qetë, do të duhet ta afroni mikrofonin më afër gojës

Moduli është një tabelë e vogël e pastër në të cilën ndodhet mikrokontrolluesi kryesor (njolla e zezë), një lidhës fole 3,5 mm për lidhjen e një mikrofoni, një çip memorie flash, GPIO, UART dhe kontaktet e energjisë, një palë LED dhe pjesa tjetër. kompleti i nevojshëm i nevojshëm për funksionimin e qarkut - rezistorë, kondensatorë, kuarc. Madhësia kompakte e tabelës do t'ju lejojë të integroni modulin në modelet tuaja pa shumë vështirësi. Për të rritur gamën e komandave zanore, supozohet se është e nevojshme të përdorni një mikrofon me një përforcues. Kur arrihet një interval i pranueshëm, moduli është i përshtatshëm për përdorim në sistemet e shtëpive inteligjente. Pa modifikime për të përmirësuar diapazonin e funksionimit, moduli mund të përdoret në sistemet e kontrollit të desktopit, si dhe në sistemet e sigurisë (kontrolli i aksesit dhe kufizimi). Me një mikrofon standard, për shkak të distancës së shkurtër, është më e besueshme të përdorni modulin e njohjes së zërit si kufje dhe të transmetoni komanda me valë te kontrolluesi, i cili kontrollon diçka duke përdorur një bateri dhe module me valë (për shembull, HC-05 ose HC -12 ose ndonjë tjetër i përshtatshëm). Moduli është në gjendje të funksionojë pa një mikrokontrollues të jashtëm, pasi prodhuesi ka siguruar pavarësi funksionale, është e nevojshme vetëm të regjistroni komandat zanore një herë dhe të vendosni cilësimet për funksionim të pavarur duke përdorur një pajisje të jashtme (PC ose MK).

Pra, për të filluar punën me modulin e njohjes së zërit, duhet ta lidhim atë ose me një kompjuter (duhet një përshtatës USB-UART) ose me një mikrokontrollues (është e nevojshme të zhvillohet një kod programi për të kontrolluar modulin).

Nuk ka asnjë ndryshim thelbësor në menaxhimin dhe konfigurimin e modulit midis lidhjes me një kompjuter ose me një mikrokontrollues, kështu që për qartësi, ne do të përdorim një PC për konfigurim. Udhëzimet përshkruajnë komandat për modulin në formë heksadecimal, kështu që për lehtësi, do t'ju duhet gjithashtu një terminal që transmeton bajt në formë heksadecimal, për shembull, AccessPort (mund të shkarkohet në fund të artikullit). Për më tepër, prodhuesi fokusohet te përdoruesit e platformës Arduino dhe ofron një bibliotekë për përdorimin e këtij moduli dhe udhëzime për përdorimin e kësaj biblioteke. Sidoqoftë, shumë prej nesh janë shumë më të interesuar të punojnë me vetë modulin drejtpërdrejt sesa përmes mbështjellësit Arduino.

Para se të fillojmë punën, le të merremi me bordin. Nga skajet e tabelës në të djathtë është një fole për lidhjen e një mikrofoni, në anën tjetër ka katër kontakte të ndërfaqes UART. Më poshtë janë tetë kunjat e përdorura për të nxjerrë sinjale të shkaktuara nga njohja e komandave zanore. Në krye, katër kunja të konfiguruara si një hyrje sinjali përdoren për të kaluar midis grupeve (nga shtatë komanda zanore secila) komandash, nëse përdoret një funksion i tillë. Dhe gjashtë kunjat e tjera në krye janë përdorur ndoshta për t'u lidhur me kujtesën e modulit.

Një sistem komandash përdoret për të operuar dhe konfiguruar modulin. Pamja e përgjithshme e kornizës duket si kjo:

Katër komandat e para 00, 01, 02, 03 përdoren për të kontrolluar statusin e modulit dhe cilësimet e tij. Gjashtë komandat e ardhshme 10, 11, 12, 13, 14, 15 përdoren për të ndryshuar cilësimet e modulit, duke përfshirë kontrollin e portës së daljes dhe cilësimet e ngarkimit automatik. Më pas, tre komanda 20,21, 22 përdoren për të regjistruar komandat zanore. Tre komandat e ardhshme 30,31,32 përdoren për të kontrolluar njohjen e komandave zanore. Komandat 0A, 0D, FF përdoren vetëm kur të dhënat kthehen nga vetë moduli. Në fakt nuk ka shumë komanda, dhe e gjithë kjo nuk është aq e frikshme sa duket në shikim të parë në dokumentacionin për modulin. Le të shqyrtojmë komandat e nevojshme për të punuar me modulin e njohjes së zërit. Jo të gjitha komandat ekzistuese janë praktike.

Vlen të përmendet se moduli mund të funksionojë pa një mikrokontrollues kontrolli të jashtëm, si dhe të menaxhojë në mënyrë të pavarur diçka me portat e tij të daljes. Për ta bërë këtë, ju duhet t'i konfiguroni ato (komandat 12, 13, 14).

Skuadra 12 – konfiguroni portat e daljes. Kjo komandë cakton mënyrën e funksionimit të portave të daljes së modulit të njohjes së zërit.

Formati: | AA | 03 | 12 | MODE | 0A |

Ku MODE mund të marrë katër vlera: 0 - modaliteti i pulsit (kur aktivizohet një komandë zanore, dalja që korrespondon me komandën do të ndryshojë gjendjen e saj për kohën e caktuar nga komanda 13), 1 - modaliteti i ndërrimit (ndryshoni ose rrotulloni) (çdo herë komanda zanore aktivizohet, dalja që korrespondon me komandën zanore është përmbysur), 2 - modaliteti i ndezjes (kur aktivizohet një komandë zanore, dalja do të shkojë në gjendjen e një njësie logjike dhe nuk do të shkojë më në gjendjen e një logjike zero, rivendosja kryhet me komandën 14), 3 - modaliteti i fikur (i ngjashëm me modalitetin e ndezjes, vetëm anasjelltas, kur aktivizohet një komandë zanore, dalja shkon në zero logjike).

Më praktike është mënyra e kalimit, e cila nuk kërkon komanda shtesë. Modaliteti i pulsit do të ishte i mirë, por logjika e këtij modaliteti është e tillë që kur aktivizohet një komandë zanore, lëshon një njësi logjike një herë, për një periudhë prej 10 ms deri në 1 s. nuk mjafton. Edhe pse, në varësi të kërkesave për këtë mënyrë, mund të jetë e dobishme. Mënyrat e ndezjes dhe fikjes zbatohen në mënyrë të papërshtatshme, pasi ato kërkojnë ekzekutimin e komandave shtesë.

Skuadra 13 – vendosja e kohëzgjatjes së pulsit të modalitetit përkatës.

Formati: | AA | 03 | 13 | NIVELI | 0A |

Ku LEVEL merr një vlerë nga 00 në 0F (që korrespondon me një kohëzgjatje nga 10 ms në 1 s).

NIVELI kohëzgjatja
0x00 10 ms
0x01 15 ms
0x02 20 ms
0x03 25 ms
0x04 30 ms
0x05 35 ms
0x06 40 ms
0x07 45 ms
0x08 50 ms
0x09 75 ms
0x0A 100 ms
0x0B 200 ms
0x0C 300 ms
0x0D 400 ms
0x0E 500 ms
0x0F 1 s

Skuadra 14 – rivendosja e portave të daljes në gjendjen e specifikuar nga mënyrat e ndezjes ose çaktivizimit.

Formati: | AA| 03 | 14 | FF | 0A | - rivendosni të gjitha portat e daljes

| AA| 03+n | 14 | IO0 | ... | ION | 0A | - rivendosni portat e zgjedhura të daljes

Ku n është numri i kunjave që rivendosen në mënyrë selektive, IO0…ION është numërimi i këtyre kunjave në kornizën e të dhënave të dërgimit.

Më tej, në mënyrë që komandat zanore të ekzekutohen, ato duhet të shkruhen në modul (trajnoni modulin). Këtu ka një kufizim. Vetëm shtatë komanda mund të njihen në të njëjtën kohë, megjithëse shumë të tjera mund të regjistrohen. Për të zgjeruar gamën e komandave zanore që do të njihen, përdoret një sistem grupimi (komandë 32), i cili kontrollohet nga portat hyrëse të modulit. Duke vendosur konfigurimin e sinjaleve në këto kontakte, zgjidhet grupi i komandave që do të njihen. Kjo është për shkak të performancës së kufizuar të kontrolluesit të zërit të modulit të përdorur.

Ekipi 20 - regjistrimi i një ose më shumë komandave zanore.

Formati: | AA| 03+n | 20 | R0 | ... | Rn | 0A |

Ku n është numri i komandave zanore të regjistruara (nëse regjistrohet një komandë n=0, dy komanda n=1 e kështu me radhë në përputhje me formatin e përgjithshëm të transmetimit të komandës Gjatësia - gjatësia), R0...Rn numrat e komandave zanore ( AA 03 20 03 0A - komanda për të regjistruar komandën e tretë zanore).

Skuadra 21 - regjistrimi i një komande zanore dhe vendosja e një nënshkrimi për të.

Formati: | AA| 03+SIGLEN | 21 | REKORD | SIG | 0A |

Aty ku RECORD është numri i komandës zanore, SIG është nënshkrimi (mund të përbëhet nga disa bajt, në mënyrë që çdo bajt të mund të korrespondojë me kodimin e karaktereve të alfabetit nëse është e nevojshme), SIGLEN është numri i bajteve që përbëjnë nënshkrimin.

Skuadra 22 - Shtoni ose hiqni një nënshkrim për komandën zanore të zgjedhur.

Formati: | AA | 03+SIGLEN | 22 | REKORD | SIG | 0a | - shtimi i nënshkrimit

| AA | 03 | 22 | REKORD | 0A | - heqja e nënshkrimit

Në procesin e regjistrimit të komandave zanore, duhet të udhëhiqeni nga sinjalet e LED-ve. Pas futjes së komandës që fillon procesin e regjistrimit, LED-i i verdhë (portokalli) fillon të pulsojë me shpejtësi. Sapo ndizet LED e kuqe, duhet të thoni një komandë zanore në mikrofon. Nëse është e suksesshme, LED-ja e verdhë (portokalli) do të ndizet dhe më pas do të ndizet përsëri e kuqe - duhet të konfirmoni komandën zanore, ta thoni përsëri. Nëse janë të suksesshme, të dyja LED do të ndizen - komanda zanore është ruajtur.

Pasi të jenë shkruar komandat zanore në modul, asgjë nuk do të ndodhë derisa këto komanda të vendosen në "recognizer" (Njohës) të modulit. Për ta bërë këtë, përdorni komandën 30. Pas ekzekutimit të kësaj komande, moduli do të presë që komanda zanore të përputhet me mostrat e ruajtura. Vetëm shtatë komanda mund të njihen në të njëjtën kohë. Në këtë rast, LED-i i verdhë (portokalli) në tabelën e modulit do të pulsojë ngadalë.

Skuadra 30 - ngarkoni të dhënat në "recognizer" (Njohës) të modulit.

Formati: | AA| 2+n | 30 | R0 | ... | Rn | 0A |

Formati i përgjigjes është si më poshtë: | AA | 07 | 0D | 00 | GRP | R | RI | SIGLEN | SIG | 0A |

Kur GRPM është informacion rreth grupit të cilit i përket komanda (nëse përdoret), R është një komandë zanore e njohur (duke përdorur këto të dhëna, ju mund të dalloni komandën nga njëri-tjetri nëse nuk përdoren nënshkrimet), RI është indeksi i komandës në njohës, SIGLEN është gjatësia e nënshkrimit në bajt, SIG - nënshkrim (nëse përdoret).

Dhe së fundi, nëse moduli duhet të funksionojë në mënyrë të pavarur, atëherë duhet të përdorni komandën 15 për të nisur automatikisht sipas paracaktimit të njohësit. Në këtë rast, moduli i njohjes së zërit do të funksionojë vetë pa pasur nevojë për inicializim pasi të jetë ndezur.

Ekipi 15 - vendosja e nisjes automatike të njohësit kur e ndizni.

Formati: | AA| 03 | 15 | 00 | 0A | - çaktivizoni funksionin autorun

| AA| 03+n | 15 | BITMAP | R0 | ... | Rn | 0A | - vendosja e funksionit autorun

Për të kontrolluar korrektësinë e ekzekutimit të komandave, secila prej tyre ka përgjigjen e vet. Nëse është e nevojshme, të gjitha të dhënat mund të gjenden në dokumentacionin për modulin e njohjes së zërit, bashkangjitur në fund të artikullit. Mos harroni se të gjitha vlerat numerike janë të përfaqësuara në heksadecimal formë.

Kështu, duke përdorur sistemin e komandës, mund të konfiguroni në mënyrë mjaft fleksibël modulin e njohjes së zërit për përdorim në qëllime të ndryshme. Nëse thjesht kontrollimi i portave të daljes së modulit nuk mjafton, atëherë moduli i njohjes së zërit mund të lidhet me pajisje të tjera nëpërmjet UART ose GPIO. Për lidhje me valë, mund të përdorni modulet e diskutuara më parë.

Me ndihmën e moduleve me valë, mund të lidhni modulin e njohjes së zërit me çdo pajisje ku është e nevojshme. Për shembull, le ta lidhim atë me një mikrokontrollues, i cili, në lidhje me të dhënat e marra për njohjen e komandave zanore, do të kontrollojë LED-të. Modulet me valë ju lejojnë të transferoni të dhëna në dy drejtime, kështu që nëse është e nevojshme, mund të shkruani kodin për inicializimin e modulit zanor dhe regjistrimin e komandave zanore për mikrokontrolluesin. Në rastin tonë, nën kontrollin e një PC, disa komanda zanore janë regjistruar tashmë në modul dhe konfigurimi automatik i fillimit të njohjes është kur ndizet energjia, kështu që për mikrokontrolluesin do të shkruajmë vetëm marrjen e të dhënave dhe kontrollin e LED-ve. në lidhje me këto të dhëna. Mikrokontrolluesi STM32F103C8T6 përdor USART1 për të marrë të dhëna dhe pin PB10...PB15 të vendosur në dalje, i cili kontrollon LED-të. Kodi burimor gjendet në shtojcën në fund të artikullit.

Pak për rezultatet

Njohja e zërit nuk është plotësisht e saktë. Varet nga komandat e zgjedhura dhe zëri i përdoruesit. Gjatë testimit, gjeta disa pika negative. Gjatë mësimit të komandave të modulit, u zgjodhën komandat zanore "një" dhe "dy". Komanda "dy" gjithmonë kalonte qartë, por komanda "një" shpesh përkufizohej si komanda "dy" dhe, në përputhje me rrethanat, ekzekutohej kodi i komandës së dytë. Më tej, kur përpiqeshit të jepni komanda zanore në anglisht (dhe ato nuk u regjistruan në modulin zanor), komanda "një" pothuajse gjithmonë përcaktohej si "dy". Ndoshta gjithçka ka të bëjë me shqiptimin, intonacionin dhe aspekte të tjera të zërit të njeriut, të ngulitura në algoritmin për kodimin e modulit zanor të komandave të folura. Sidoqoftë, prodhuesit nuk i japin këto sekrete në domenin publik. Për më tepër, cilësia e njohjes ndikohet nga kushtet e zhurmës së jashtme - gjëmimi nga rruga, zhurma e ventilatorit, tingujt e rastësishëm etj. Prodhuesi tërheq vëmendjen për faktin se një nivel i lartë i saktësisë së njohjes ndodh në kushte ideale. Ideja e përdorimit të një mikrofoni me një përforcues, natyrisht, do të rrisë gamën e pajisjes, por gjithashtu do të rrisë gjasat e gabimeve, pasi përforcimi i zërit do të ndodhë edhe me përforcimin e zhurmës.

Përfundimisht, nëse keni kërkesa të ulëta për njohjen e zërit dhe ekzekutimin e komandave zanore, atëherë ky modul do të përpunojë me ndershmëri paratë e shpenzuara për të.

Lista e elementeve të radios

Emërtimi Lloji Emërtimi sasi shënimDyqanblloku im i shënimeve
IC1 MK STM32

STM32F103C8

1 Në bllokun e shënimeve
VR1 Rregullator linear

AMS1117-3.3

1 Në bllokun e shënimeve
MOD1, MOD3 Moduli me valëHC-122 Në bllokun e shënimeve
MOD2 Moduli i njohjes së zëritVR3.11 Në bllokun e shënimeve
Z1 Kuarci8 MHz1
  • DIY ose DIY
  • Hej Giktimes!

    Siç nënkupton edhe emri, ky artikull do të fokusohet në njohjen e numrave në mikrokontrollues. Unë dua të bëj një rezervë menjëherë që ky artikull nuk do të sigurojë kodin burimor, do të marrë parasysh teknologjinë ose algoritmin e njohjes, do të them vetëm se përdoren idetë e një qasjeje sistematike. Disa prej tyre janë paraqitur në artikujt tanë (, dhe këtu). Kjo për faktin se qasja jonë mbështetet në origjinalitet, por kërkon sqarim të disa çështjeve. Dikush mund të thotë: "një artikull tjetër rreth programimit të mikrokontrolluesve". Larg kësaj, kërkimi për projekte të ngjashme nuk dha ndonjë rezultat të kuptueshëm, përveç kësaj video. Një gjë është e qartë nga diskutimet në forume: ideja e marrjes së një pajisjeje të tillë (kamera + mikrokontrollues = rezultati i njohjes së daljes, dhe jo vetëm një foto e kapur) erdhi tek shumë njerëz, por mbeti pa zbatim. Po, dhe njohja, nga të gjitha llogaritë, kërkon shumë burime llogaritëse dhe mikrokontrolluesit nuk janë të përshtatshëm për këtë, në veçanti, kishte deklarata në lidhje me Arduino se kjo është përgjithësisht e pamundur. Nëse u bë interesante, pyes nën mace.

    Në mënyrë që të mos ketë pyetje të dukshme, ne do t'u përgjigjemi atyre:

    • Jo, ky nuk është një shërbim i njohjes së imazhit.
    • Jo, kjo nuk është OpenCV
    • Jo, këto nuk janë rrjete nervore.
    • Përdoret analiza morfologjike e objekteve që përbëjnë figurën
    • Po, njohja bëhet nga mikrokontrolluesi!

    Ideja

    Me pak fjalë, gjithçka filloi me dëshirën për të provuar dorën time dhe për të provuar idetë e mia në njohjen e imazhit. Gjatë diskutimit, arritëm në përfundimin se mund të bëjmë me fuqi të vogël kompjuterike për të zgjidhur këtë problem. Për arsye të dukshme, ne nuk do të përshkruajmë detajet e këtyre diskutimeve.

    Instalimi

    Pra, detyra është vendosur, duhet zbatimi. Pa u larguar nga e vendosura tashmë
    marrim atë që kemi në dorë. Dhe kisha në dorë disa Arduino Uno, një maus të vjetër optik dhe një CD. Nga rruga, ne u nxitëm të përdornim sensorin e një miu optik si një aparat fotografik për të marrë një imazh, të cilin e lexuam shumë kohë më parë, dhe, në fakt, të gjithë pjesën tjetër të materialit "miu". E vetmja gjë që duhej të bënim ishte të lidhnim sensorin dhe të gjithë rripin e tij për lehtësinë e përdorimit, si dhe ngjitjen e një lente në të, të cilën e "shqyen" me kujdes nga disku i CD-së. Kjo ishte e nevojshme për të rritur distancën nga subjekti te kamera, përndryshe numrat e përmasave tona nuk përshtateshin dhe dukej vetëm një pjesë e vogël. Nga rruga, përpara lenteve nga disku CD, u përpoqëm të lidhnim optikën nga kamera në internet, por disi ajo nuk u rrit së bashku.

    Ende


    Më pas lindi pyetja se si ta vendosni këtë aparat fotografik mbi subjekt. Këtu na ndihmoi shumë një mikroskop i vjetër i thyer, i cili rrinte boshe. Me respekt, ata hoqën mekanizmin e kontrollit të fazës së objektit. Ky mekanizëm na lejoi të lëviznim kamerën vetëm përgjatë dy akseve dhe menjëherë lindi ideja për të përdorur udhëzuesin e kokës lazer nga disku i CD-së. E gjithë kjo u fiksua në kasë nga CD-ja e shumëvuajtur. Si rezultat, ne morëm një mekanizëm të lezetshëm të pozicionimit të kamerës.

    Ende


    Si përmbledhje: kemi të ashtuquajturën kamerë, ekziston një mekanizëm pozicionimi, mbetet të vendosim një copë letre me një numër dhe të marrim një imazh nga kamera. Këtu filluan “problemet”. Meqenëse karakteristikat e sensorit optik të "miut" janë shumë të dobëta për ta përdorur atë si aparat fotografik, ata filluan të improvizojnë me dritën e prapme.

    Ende


    U bë e qartë se thjesht theksimi nuk funksionon, intensiteti është i rëndësishëm, drejtimi i dritës së jashtme gjithashtu bën rregullime. Më duhej të aktivizoja një "arduino" tjetër për të punuar në mënyrë që të kontrolloja intensitetin e dritës së prapme ( Natyrisht, ishte e mundur të kontrollohej ndryshe, por më vonë jo vetëm drita e prapme, por edhe ndërrimi i numrave në tregues). Si rezultat, doli se të shtënat në dritë është shumë më mirë. Dhe nëse, për shembull, përdorni një tregues të ndritshëm me shtatë segmente si objektiv, atëherë sensori e sheh atë në përgjithësi në mënyrë të përsosur. Pra, tani kemi një tregues dhe një shirit me numra të bardhë të mbushur me një sfond të zi si subjekte për shkrepje.

    në të majtë është një imazh në shkallë gri të marrë nga treguesi (ne marrim një imazh të tillë nga sensori), në të djathtë është i binarizuar.

    Ende


    Pamje e përgjithshme e asamblesë


    opsioni i instalimit të hershëm


    Blloku i njohjes


    Një rol të rëndësishëm në instalimin tonë luan i ashtuquajturi bllok i njohjes (në foton e mësipërme). Siç mund ta shihni, ai përbëhet nga një Arduino Uno dhe një transmetues i njohur wifi ESP8266. Unë shpjegoj, ne kemi nevojë për një transmetues wifi për të parë rezultatin e njohjes në tablet. Aplikacioni në tablet dërgon një kërkesë, "arduino", merr një kërkesë, "heq" imazhin nga sensori i miut, më pas e binarizon atë. Pas binarizimit, ndodh njohja dhe pas përfundimit të tij, formohet një përgjigje. Si përgjigje, ne dërgojmë rezultatin e njohjes dhe 41 bajt për të krijuar një imazh të binarizuar në ekranin e tabletit, si të thuash, për qartësi.

    Nëse shikoni prapa, atëherë "arduino" i është caktuar funksionalitet i mirë: puna me kamerën, njohja dhe puna me esp8266. Ajo që nuk mund të ndikonte në punë - më duhej të merresha me mungesën e kujtesës. Nuk kam menduar kurrë se do të më duhej të rifitoja çdo bajt kujtese.

    Demonstrimi i procesit të njohjes

    Në vend të një përfundimi

    Kjo eshte e gjitha. Ka ende shumë punë përpara. Dhe detyra e parë: njohja e numrave (vargjet e numrave) të marra nga një aparat fotografik "njerëzor" (dhe jo një "sensori i miut") dhe transferimi i teknologjisë së zhvilluar në ESP8266 dhe zvogëlimi i intensitetit të luftës për çdo bajt memorie.

    Ne me kënaqësi do t'u përgjigjemi pyetjeve.

    Artikujt kryesorë të lidhur