Mikrovlnný radar: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(57 medziľahlých úprav od jedného ďalšieho používateľa nie je zobrazených) | |||
Riadok 1: | Riadok 1: | ||
ToDo: pozri tento navod: http://johnmcnelly.com/arduino-radar-speed-sign/ | |||
{| | {| | ||
|Autori: || '''Boris Dobrovič, Filip Jančík''' | |Autori: || '''Boris Dobrovič, Filip Jančík''' | ||
Riadok 5: | Riadok 7: | ||
|} | |} | ||
== Zadanie == | == '''Zadanie''' == | ||
[[Súbor:DJ_radar_store.jpg|right|300px|Použitý radar]] | [[Súbor:DJ_radar_store.jpg|right|300px|Použitý radar]] | ||
Oboznámiť sa s mikrovlnným radarom HB100 MC420S otestovanie funkčnosti radaru a vytvorenie praktického programu. | |||
=== Úlohy === | |||
* Nájdite si datasheet k danému senzoru | |||
* Nájdite si schémy zapojenia dosky | |||
* Na základe predošlých vedomostí navrhnite spôsob pripojenia k riadiacej jednotke | |||
* Napíšte základný demonštračný program využívajúci vaše funkcie | |||
* Vymyslite a demonštrujte vhodnú aplikáciu | |||
'''Literatúra:''' | '''Literatúra:''' | ||
* [https://navody.arduino-shop.cz/navody-k-produktum/doppler-radar-hb100-10-525-ghz.html | * [https://navody.arduino-shop.cz/navody-k-produktum/doppler-radar-hb100-10-525-ghz.html Návod] | ||
* [http://www.theorycircuit.com/wp-content/uploads/2016/09/HB100_Microwave_Sensor_datasheet.pdf HB100 MC420S Doppler Radar Datasheet] | |||
* [https://www.nxp.com/pages/mcu-project-board:PBMCUSLK Doska PBMCUSLK:MCU Project Board] ([https://pubweb.eng.utah.edu/~cs5780/doc/PBMCUSLKUG.pdf Datasheet]) | * [https://www.nxp.com/pages/mcu-project-board:PBMCUSLK Doska PBMCUSLK:MCU Project Board] ([https://pubweb.eng.utah.edu/~cs5780/doc/PBMCUSLKUG.pdf Datasheet]) | ||
* [http://www.ti.com/product/LM324# Operačný zosilňovač Texas Instruments LM324] ([http://www.ti.com/lit/ds/symlink/lm324-n.pdf Datasheet]) | * [http://www.ti.com/product/LM324# Operačný zosilňovač Texas Instruments LM324] ([http://www.ti.com/lit/ds/symlink/lm324-n.pdf Datasheet]) | ||
Riadok 22: | Riadok 30: | ||
__TOC__ | __TOC__ | ||
== Analýza == | == '''Analýza''' == | ||
* Po zapojení senzora priamo na Arduino podľa | * Po zapojení senzora priamo na Arduino podľa návodu sme narazili na problém (pravdepodobne chybu senzora): v Arduino programe sme čítali nulovú hodnotu na analógovom vstupe (pin A1). | ||
* Osciloskopom sme zistili, že mikrovlnný senzor vracia na výstup záporné napätie v intervale - | * Osciloskopom sme zistili, že mikrovlnný senzor je v poriadku, ale vracia na výstup záporné napätie v intervale -200mV až -100mV. | ||
* Použili sme | * Použili sme projektovú dosku a invertujúci zosilňovač na pretransformovanie záporného napätia na interval 2 až 5V (Arduino dokáže detegovať napätie na analógovom vstupe od 0V do 5V). | ||
* Osciloskopom sme otestovali správne zapojenie a funkčnosť senzora. | * Osciloskopom sme otestovali správne zapojenie a funkčnosť senzora. | ||
* Vytvorili sme Arduino program, ktorý dokáže detegovať pohyb | * Vytvorili sme Arduino program, ktorý dokáže efektívne detegovať pohyb pred senzorom | ||
== Popis riešenia == | == '''Popis riešenia''' == | ||
Podľa návodu bolo zapojenie senzora jednoznačné. Potrebovali sme zapojiť 4 piny zo senzora na Arduino dosku: 2 uzemnenia, napájanie a výstupný analógový signál. | Podľa návodu bolo zapojenie senzora jednoznačné. Potrebovali sme zapojiť 4 piny zo senzora na Arduino dosku: 2 uzemnenia, napájanie a výstupný analógový signál. | ||
'''Schéma zapojenia snímača podľa návodu''' | '''Schéma zapojenia snímača podľa návodu''' | ||
[[Súbor:DJ_radar_scheme.png|500px|Schéma zapojenia]] | |||
Arduino program avšak detegoval nulovú hodnotu na pine A1. Najprv sme niekoľkokrát overili zapojenie senzora do Arduina. Po rovnakom výsledku sme sa rozhodli otestovať ostatné analógové piny na Arduine, ale bez úspechu. Nakoniec sme sa rozhodli vymeniť celú Arduino dosku. Napriek tomu sme stále dostávali nulový výstup v našom testovacom programe. Rozhodli sme sa senzor skontrolovať pomocou osciloskopu, aby sme si overili, či senzor vôbec posiela nejaké údaje. Na výstupe zo senzora sme namerali -160mV ustálené napätie, ktoré sa správne menilo pri manipulovaní senzorom. Overili sme teda funkčnosť senzora, ale museli sme napätie prehodiť do intervalu 0 až 5V, ktorý je interval detekcie Arduina na analógovom vstupe. | |||
Rozhodli sme sa vytvoriť schému s použitím invertujúceho zosilňovača a projektovej dosky aby sme dokázali previesť napätie zo záporných hodnôt do kladných hodnôť. Použili sme projektovú dosku [https://www.nxp.com/pages/mcu-project-board:PBMCUSLK PBMCUSLK:MCU Project Board] a operačný zosilňovač [http://www.ti.com/product/LM324# Texas Instruments LM324]. Vytvorili sme všeobecnú schému s invertujúcim zosilňovačom. Následne sme zapojili projektovú dosku, operačný zosilnovač a senzor do finálneho zapojenia aby sme otestovali funkčnosť tohto zapojenia. Náš výsledný projekt sme potom overili sme to pomocou osciloskopu. | |||
'''Všeobecná schéma zpojenia''' | |||
[[Súbor:DJ_schema_zapojenia.png|Schéma zapojenia]] | |||
'''Schéma zapojenia pre zosilňovač LM324''' | |||
[[Súbor:DJ_operacny_zosilnovac.png|Schéma zapojenia]] | |||
'''Finálne zapojenie senzora ''' | |||
[[Súbor:DJ_zapojenie_foto.jpg|400px|Konečné zapojenie]] | |||
Riadok 54: | Riadok 76: | ||
* Senzor | * Senzor dokáže efektívne detegovať pohyb do maximálnej vzdialenosti 25cm. V konkrétnom prípade je zobrazené kývanie ruky vzdialenosti 25cm: | ||
[[Súbor:DJ_oscilo_1.png]] | [[Súbor:DJ_oscilo_1.png]] | ||
* Senzor ostro deteguje vertikálny a horizontálny pohyb v snímanej oblasti. Nasledujúcu zmenu spôsobilo kývanie rukou | * Senzor ostro deteguje vertikálny a horizontálny pohyb v snímanej oblasti. Nasledujúcu zmenu spôsobilo kývanie rukou v tesnej blízkosti senzora: | ||
[[Súbor:DJ_oscilo_3.png]] | [[Súbor:DJ_oscilo_3.png]] | ||
Z našich meraní sme zistili, že senzor sníma v oblasti tvaru valca, do | Z našich meraní sme zistili, že senzor sníma v oblasti približne tvaru valca, do vzdialenosti cca 25cm(presná vyžarovacia charakteristika sa nachádza v [http://www.theorycircuit.com/wp-content/uploads/2016/09/HB100_Microwave_Sensor_datasheet.pdf Datasheet-e]). Vo väčšej vzdialenosti než 25cm je senzor nespoľahlivý, pretože zmena hodnôt(napätia) je príliš malá aby sa dala efektívne rozlíšiť. | ||
Na povrchu snímača je detegovaný aj pohyb 1mm širokého objektu (spojovací káblik). | Na povrchu snímača je detegovaný aj pohyb 1mm širokého objektu (spojovací káblik), čo znamená, že v primeranej vzdialenosti dokáže senzor detegovať v podstate akýkoľvek veľký predmet. | ||
Senzor je vhodný na vyslanie signálu k | Senzor je vhodný na vyslanie signálu k spusteniu systému pri detegovaní ľubovoľného pohybu, napr. pri automatickom zapnutí osvetlenia priestoru pri detekcii vstupu osoby alebo vypnutí po dlhšom čase bez detekcie. Jedná sa o mikrovlnný senzor, preto tento senzor dokáže pohyb aj za pevným objektom. Senzor nedokáže rozpoznávať gestá rúk. | ||
=== Algoritmus a program === | === '''Algoritmus a program''' === | ||
Vytvorili sme jednoduchý program na prácu s mikrovlnným radarom. Program je naprogramovaný v jazyku C a | Vytvorili sme jednoduchý program na prácu s mikrovlnným radarom. Program je naprogramovaný v jazyku C a vytvorený bol pomocou vývojového prostredia Arduino IDE 1.8.9. Princíp programu spočíva v získavaní hodnôt, ktoré vstupujú cez pin A1 umiestnený na Arduine a následné spracovanie a vyhodnotenie údajov v reálnom čase. Pri testovaní sme zistili, že v prípade ak sa v snímacej zóne mikrovlnného radaru nenachádza žiaden objekt, hodnoty vracajúce Arduinom sa nachádzajú v rozmedzí 740-800. Tieto dve hodnoty sme sa rozhodli nastaviť ako hraničné hodnoty pri porovnávaní. V prípade, že Arduino vráti hodnotu mimo našich hraničných hodnôt náš program zistí, že prišlo detekcii pohybu. Toto rozhodovanie sa nerobí z jedného údaju, ale vyhodnocuje sa priemer z 10-tich vzoriek pre lepšiu presnosť. Testovali sme aj vyhodnocovanie zo 100 a viac vzoriek, ale v našom prípade program už nebol veľmi presný. Pri rýchlej zmene pohybu predmetu bolo iba pár vzoriek mimo naše hraničné hodnoty a na celkový priemer to nemalo veľký vplyv, čo spôsobilo že náš program nedetegoval pohyb. | ||
V nasledujúcom odseku kódu je vidieť štandardné nastavenia pre Arduino UNO. Definovanie analógového pinu, konštanty a vo funkcii "setup()" nastavenie baudrate-u a vizuálna informácia o štarte programu. | |||
<source lang="c"> | <source lang="c"> | ||
/ | //definovanie pripojeniu pinu | ||
#define pin A1 | |||
float vstup; //vstup zo senzora | |||
int vypocty = 10; //pocet kalkulacii z ktorych sa robi priemer | |||
//int vypocty = 100; | |||
//setup | |||
void setup() { | |||
Serial.begin(9600); | |||
Serial.println("Start\n"); | |||
} | } | ||
</source> | </source> | ||
[[Médiá: | Jednoduchý rozhodovací mechanizmus či program našiel pohyb | ||
<source lang="c"> | |||
//vypis zmeny | |||
if (priemer < 740) { | |||
Serial.println(" POHYB"); | |||
delay(1000); | |||
} | |||
else if (priemer > 800) { | |||
Serial.println("POHYB"); | |||
delay(1000); | |||
} | |||
</source> | |||
Vytvorenie priemeru z načítaných vstupov z analógového pinu A1 na Arduine | |||
<source lang="c"> | |||
/// scitanie vstupov | |||
for (int i = 0; i < vypocty; i++) { | |||
vstup += analogRead(pin); | |||
delay(1); | |||
} | |||
//priemer zo vstupov | |||
float priemer = vstup / vypocty; | |||
</source> | |||
Celý zdrojový Arduino kód: [[Médiá:DJ_mvs.ino|DJ_mvs.ino]] | |||
=== Overenie === | === Overenie === | ||
Senzor vracia záporné napätie a preto nie je možné sa presne riadiť podľa návodu, ktorý sa nachádza ako online odkaz v sekcii literatúra. Na úspešné otestovanie(fungovanie) senzora je potrebné zapojiť senzor podľa presného postupu, ktorý je popísaný vyššie v tomto článku a zároveň okrem senzora a Arduina vlastniť dodatočné komponenty ako projektovú dosku a operačný zosilňovač. | |||
ako | Potrebné je správne nastaviť Arduino IDE aby toto rozhranie vedelo správne komunikovať s mikrokontrolerom Arduino UNO. V nástrojoch nastaviť dosku(board) na "Arduino/Genuino uno" a port na "COM4" (môže sa líšiť). Do textového poľa rozhrania vložiť priložený zdrojový kód a nahrať(upload). Otvoriť funkciu Sériový monitor(Serial Monitor), nastaviť baudrate na rovnaký ako v zdrojovom kóde(9600) a sledovať výsledky. | ||
[[Súbor:DJ_nastavenie.png|Schéma zapojenia]] | |||
[[MEMS_projekty#Projekty_2019|Späť na zoznam projektov...]] | [[MEMS_projekty#Projekty_2019|Späť na zoznam projektov...]] | ||
[[Category:MEMS2019]] [[Category:AVR]] | [[Category:MEMS2019]] [[Category:AVR]] |
Aktuálna revízia z 08:22, 4. júl 2021
ToDo: pozri tento navod: http://johnmcnelly.com/arduino-radar-speed-sign/
Autori: | Boris Dobrovič, Filip Jančík | |
Študijný odbor: | Aplikovaná mechatronika a elektromobilita | 1. Ing. (2019) |
Zadanie
Oboznámiť sa s mikrovlnným radarom HB100 MC420S otestovanie funkčnosti radaru a vytvorenie praktického programu.
Úlohy
- Nájdite si datasheet k danému senzoru
- Nájdite si schémy zapojenia dosky
- Na základe predošlých vedomostí navrhnite spôsob pripojenia k riadiacej jednotke
- Napíšte základný demonštračný program využívajúci vaše funkcie
- Vymyslite a demonštrujte vhodnú aplikáciu
Literatúra:
- Návod
- HB100 MC420S Doppler Radar Datasheet
- Doska PBMCUSLK:MCU Project Board (Datasheet)
- Operačný zosilňovač Texas Instruments LM324 (Datasheet)
Analýza
- Po zapojení senzora priamo na Arduino podľa návodu sme narazili na problém (pravdepodobne chybu senzora): v Arduino programe sme čítali nulovú hodnotu na analógovom vstupe (pin A1).
- Osciloskopom sme zistili, že mikrovlnný senzor je v poriadku, ale vracia na výstup záporné napätie v intervale -200mV až -100mV.
- Použili sme projektovú dosku a invertujúci zosilňovač na pretransformovanie záporného napätia na interval 2 až 5V (Arduino dokáže detegovať napätie na analógovom vstupe od 0V do 5V).
- Osciloskopom sme otestovali správne zapojenie a funkčnosť senzora.
- Vytvorili sme Arduino program, ktorý dokáže efektívne detegovať pohyb pred senzorom
Popis riešenia
Podľa návodu bolo zapojenie senzora jednoznačné. Potrebovali sme zapojiť 4 piny zo senzora na Arduino dosku: 2 uzemnenia, napájanie a výstupný analógový signál.
Schéma zapojenia snímača podľa návodu
Arduino program avšak detegoval nulovú hodnotu na pine A1. Najprv sme niekoľkokrát overili zapojenie senzora do Arduina. Po rovnakom výsledku sme sa rozhodli otestovať ostatné analógové piny na Arduine, ale bez úspechu. Nakoniec sme sa rozhodli vymeniť celú Arduino dosku. Napriek tomu sme stále dostávali nulový výstup v našom testovacom programe. Rozhodli sme sa senzor skontrolovať pomocou osciloskopu, aby sme si overili, či senzor vôbec posiela nejaké údaje. Na výstupe zo senzora sme namerali -160mV ustálené napätie, ktoré sa správne menilo pri manipulovaní senzorom. Overili sme teda funkčnosť senzora, ale museli sme napätie prehodiť do intervalu 0 až 5V, ktorý je interval detekcie Arduina na analógovom vstupe.
Rozhodli sme sa vytvoriť schému s použitím invertujúceho zosilňovača a projektovej dosky aby sme dokázali previesť napätie zo záporných hodnôt do kladných hodnôť. Použili sme projektovú dosku PBMCUSLK:MCU Project Board a operačný zosilňovač Texas Instruments LM324. Vytvorili sme všeobecnú schému s invertujúcim zosilňovačom. Následne sme zapojili projektovú dosku, operačný zosilnovač a senzor do finálneho zapojenia aby sme otestovali funkčnosť tohto zapojenia. Náš výsledný projekt sme potom overili sme to pomocou osciloskopu.
Schéma zapojenia pre zosilňovač LM324
Týmto zapojením sme namerali následné hodnoty:
- Pri pomalom priblížení objektu k senzoru spôsobí zmenu výstupnej hodnoty. Senzor dokáže detegovať pohyb smeriaci k senzoru a od senzora:
- Senzor dokáže efektívne detegovať pohyb do maximálnej vzdialenosti 25cm. V konkrétnom prípade je zobrazené kývanie ruky vzdialenosti 25cm:
- Senzor ostro deteguje vertikálny a horizontálny pohyb v snímanej oblasti. Nasledujúcu zmenu spôsobilo kývanie rukou v tesnej blízkosti senzora:
Z našich meraní sme zistili, že senzor sníma v oblasti približne tvaru valca, do vzdialenosti cca 25cm(presná vyžarovacia charakteristika sa nachádza v Datasheet-e). Vo väčšej vzdialenosti než 25cm je senzor nespoľahlivý, pretože zmena hodnôt(napätia) je príliš malá aby sa dala efektívne rozlíšiť. Na povrchu snímača je detegovaný aj pohyb 1mm širokého objektu (spojovací káblik), čo znamená, že v primeranej vzdialenosti dokáže senzor detegovať v podstate akýkoľvek veľký predmet.
Senzor je vhodný na vyslanie signálu k spusteniu systému pri detegovaní ľubovoľného pohybu, napr. pri automatickom zapnutí osvetlenia priestoru pri detekcii vstupu osoby alebo vypnutí po dlhšom čase bez detekcie. Jedná sa o mikrovlnný senzor, preto tento senzor dokáže pohyb aj za pevným objektom. Senzor nedokáže rozpoznávať gestá rúk.
Algoritmus a program
Vytvorili sme jednoduchý program na prácu s mikrovlnným radarom. Program je naprogramovaný v jazyku C a vytvorený bol pomocou vývojového prostredia Arduino IDE 1.8.9. Princíp programu spočíva v získavaní hodnôt, ktoré vstupujú cez pin A1 umiestnený na Arduine a následné spracovanie a vyhodnotenie údajov v reálnom čase. Pri testovaní sme zistili, že v prípade ak sa v snímacej zóne mikrovlnného radaru nenachádza žiaden objekt, hodnoty vracajúce Arduinom sa nachádzajú v rozmedzí 740-800. Tieto dve hodnoty sme sa rozhodli nastaviť ako hraničné hodnoty pri porovnávaní. V prípade, že Arduino vráti hodnotu mimo našich hraničných hodnôt náš program zistí, že prišlo detekcii pohybu. Toto rozhodovanie sa nerobí z jedného údaju, ale vyhodnocuje sa priemer z 10-tich vzoriek pre lepšiu presnosť. Testovali sme aj vyhodnocovanie zo 100 a viac vzoriek, ale v našom prípade program už nebol veľmi presný. Pri rýchlej zmene pohybu predmetu bolo iba pár vzoriek mimo naše hraničné hodnoty a na celkový priemer to nemalo veľký vplyv, čo spôsobilo že náš program nedetegoval pohyb.
V nasledujúcom odseku kódu je vidieť štandardné nastavenia pre Arduino UNO. Definovanie analógového pinu, konštanty a vo funkcii "setup()" nastavenie baudrate-u a vizuálna informácia o štarte programu.
//definovanie pripojeniu pinu
#define pin A1
float vstup; //vstup zo senzora
int vypocty = 10; //pocet kalkulacii z ktorych sa robi priemer
//int vypocty = 100;
//setup
void setup() {
Serial.begin(9600);
Serial.println("Start\n");
}
Jednoduchý rozhodovací mechanizmus či program našiel pohyb
//vypis zmeny
if (priemer < 740) {
Serial.println(" POHYB");
delay(1000);
}
else if (priemer > 800) {
Serial.println("POHYB");
delay(1000);
}
Vytvorenie priemeru z načítaných vstupov z analógového pinu A1 na Arduine
/// scitanie vstupov
for (int i = 0; i < vypocty; i++) {
vstup += analogRead(pin);
delay(1);
}
//priemer zo vstupov
float priemer = vstup / vypocty;
Celý zdrojový Arduino kód: DJ_mvs.ino
Overenie
Senzor vracia záporné napätie a preto nie je možné sa presne riadiť podľa návodu, ktorý sa nachádza ako online odkaz v sekcii literatúra. Na úspešné otestovanie(fungovanie) senzora je potrebné zapojiť senzor podľa presného postupu, ktorý je popísaný vyššie v tomto článku a zároveň okrem senzora a Arduina vlastniť dodatočné komponenty ako projektovú dosku a operačný zosilňovač. Potrebné je správne nastaviť Arduino IDE aby toto rozhranie vedelo správne komunikovať s mikrokontrolerom Arduino UNO. V nástrojoch nastaviť dosku(board) na "Arduino/Genuino uno" a port na "COM4" (môže sa líšiť). Do textového poľa rozhrania vložiť priložený zdrojový kód a nahrať(upload). Otvoriť funkciu Sériový monitor(Serial Monitor), nastaviť baudrate na rovnaký ako v zdrojovom kóde(9600) a sledovať výsledky.