- Súčasti sú povinné
- 433 MHz modul RF vysielača a prijímača)
- Schéma zapojenia RF vysielača s STM32F103C8
- Schéma zapojenia RF prijímača s Arduino Uno
- Programovanie STM32F103C8 pre bezdrôtový RF prenos
- Programovanie Arduino UNO ako RF prijímača
- Testovanie RF vysielača a prijímača založeného na STM 32
Vytváranie bezdrôtových projektov v zabudovanej elektronike sa stáva veľmi dôležitým a užitočným, pretože po celom obvode nie sú neprehľadné vodiče, vďaka ktorým je zariadenie šikovnejšie a prenosnejšie. Existujú rôzne bezdrôtové technológie ako Bluetooth, WiFi, 433 MHz RF (rádiové frekvencie) atď. Každá technológia má svoje vlastné výhody a nevýhody, ako sú cena, prenos vzdialenosti alebo dosahu, rýchlosť alebo priepustnosť atď. Dnes budeme používať RF modul s STM32 na bezdrôtové odosielanie a prijímanie údajov. Ak ste v mikrokontroléri STM32 nováčikom, začnite blikaním LED s STM32 pomocou Arduino IDE a tu skontrolujte všetky ďalšie projekty STM32.
Okrem toho sme tiež použili bezdrôtový modul RF 433Mhz s inými mikrokontrolérmi na vytvorenie niektorých bezdrôtových riadených projektov, ako napríklad:
- RF riadené domáce spotrebiče
- RF diaľkovo ovládané LED diódy pomocou Raspberry Pi
- RF riadený robot
- Prepojovací RF modul s Arduino
- Komunikácia PIC na PIC pomocou RF modulu
Tu budeme prepojovať RF bezdrôtový modul 433MHz s mikrokontrolérom STM32F103C8. Projekt je rozdelený do dvoch častí. Vysielač bude prepojený s STM32 a prijímač bude prepojený s Arduino UNO. Pre vysielaciu aj prijímaciu časť bude k dispozícii odlišná schéma zapojenia a náčrty.
V tomto návode vysiela RF vysielač dve hodnoty na stranu prijímača: vzdialenosť meranú pomocou ultrazvukového snímača a hodnotu potenciometra ADC (0 až 4096), ktorá je mapovaná ako číslo od (0 do 100). RF prijímač o Arduino dostane obe hodnoty a tlačí tieto vzdialenosť a počet hodnôt v 16x2 LCD displej bezdrôtovo.
Súčasti sú povinné
- Mikrokontrolér STM32F103C8
- Arduino UNO
- 433 MHz RF vysielač a prijímač
- Ultrazvukový senzor (HC-SR04)
- 16x2 LCD displej
- 10k potenciometer
- Nepál
- Pripojenie drôtov
433 MHz modul RF vysielača a prijímača)
Vysielač RF vysielača:
433MHz RF vysielač |
Popis špendlíka |
ANT |
Na pripojenie antény |
GND |
GND |
VDD |
3,3 až 5V |
ÚDAJE |
Tu sa uvádzajú údaje, ktoré sa majú preniesť do prijímača |
Pinout prijímača RF:
433 MHz prijímač RF |
POUŽITIE |
ANT |
Na pripojenie antény |
GND |
GND |
VDD |
3,3 až 5V |
ÚDAJE |
Údaje, ktoré sa majú prijímať z vysielača |
CE / DO |
Je to tiež údajový kolík |
433 MHz Technické parametre modulu:
- Prevádzkové napätie prijímača: 3V až 5V
- Prevádzkové napätie vysielača: 3V až 5V
- Pracovná frekvencia: 433 MHz
- Prenosová vzdialenosť: 3 metre (bez antény) až 100 metrov (maximum)
- Technika modulácie: ASK (klíčenie pri amplitúdovej zmene)
- Rýchlosť dátového prenosu: 10 Kbps
Schéma zapojenia RF vysielača s STM32F103C8
Pripojenie obvodu medzi RF vysielačom a STM32F103C8:
STM32F103C8 |
RF vysielač |
5V |
VDD |
GND |
GND |
PA10 |
ÚDAJE |
NC |
ANT |
Pripojenie obvodu medzi ultrazvukovým snímačom a STM32F103C8:
STM32F103C8 |
Ultrazvukový senzor (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Echo |
GND |
GND |
K STM32F103C8 je pripojený 10k potenciometer, ktorý poskytuje vstupnú analógovú hodnotu (0 až 3,3 V) na pin ADC PA0 na STM32.
Schéma zapojenia RF prijímača s Arduino Uno
Pripojenie obvodu medzi RF prijímačom a Arduino UNO:
Arduino UNO |
RF prijímač |
5V |
VDD |
GND |
GND |
11 |
ÚDAJE |
NC |
ANT |
Pripojenie obvodu medzi 16x2 LCD a Arduino UNO:
Názov kolíka LCD |
Názov PIN Arduino UNO |
Zem (GND) |
Zem (G) |
VCC |
5V |
VEE |
Kolík od stredu potenciometra pre kontrast |
Register Select (RS) |
2 |
Čítanie / Zápis (RW) |
Zem (G) |
Povoliť (EN) |
3 |
Dátový bit 4 (DB4) |
4 |
Dátový bit 5 (DB5) |
5 |
Dátový bit 6 (DB6) |
6 |
Dátový bit 7 (DB7) |
7 |
Pozitívne LED |
5V |
LED negatívne |
Zem (G) |
Programovanie bude v krátkosti vysvetlené. Budú dve časti náčrtu, kde prvá časť bude vysielacia časť a ďalšia bude prijímacia časť. Všetky súbory náčrtu a pracovné video budú uvedené na konci tohto tutoriálu. Ak sa chcete dozvedieť viac informácií o prepojení RF modulu s Arduino Uno, kliknite na odkaz.
Programovanie STM32F103C8 pre bezdrôtový RF prenos
STM32F103C8 je možné programovať pomocou Arduino IDE. Na nahranie kódu do STM32F103C8 nie je potrebný programátor FTDI alebo ST-Link. Jednoducho sa pripojte k PC cez USB port STM32 a začnite programovať pomocou ARDUINO IDE. Programovanie vášho STM32 v Arduino IDE sa môžete naučiť kliknutím na odkaz.
V sekcii vysielača sa vzdialenosť objektu v „cm“ meria pomocou ultrazvukového snímača a číselná hodnota od (0 do 100) sa nastavuje pomocou potenciometra, ktorý sa prenáša cez RF vysielač prepojený s STM32.
Najskôr je zahrnutá knižnica Radiohead, ktorú si môžete stiahnuť tu. Pretože táto knižnica používa na prenos a príjem dát ASK (Amplitude Shift Keying Technique). Toto veľmi uľahčuje programovanie. Knižnicu môžete zahrnúť do náčrtu tak, že prejdete do sekcie Skica-> zahrnúť knižnicu-> Pridať knižnicu.zip.
#include
Rovnako ako v tomto návode na strane vysielača sa na meranie vzdialenosti používa ultrazvukový snímač, takže sú definované kolíky spúšťača a ozveny.
# definovať trigPin PB1 # definovať echoPin PB0
Ďalej sa názov objektu pre knižnicu RH_ASK nastaví ako rf_driver s parametrami ako rýchlosť (2000), pin RX (PA9) a TX pin (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Ďalej sa deklaruje premenná Strings potrebná v tomto programe.
Reťazec vysielacie_číslo; Reťazec transmit_distance; Prenos reťazca;
Ďalej vo void setup () sa inicializuje objekt pre RH_ASK rf_driver.
rf_driver.init ();
Potom sa spúšťací kolík nastaví ako výstupný pin a PA0 (pripojený k potenciometru) a echo pin sa nastaví ako vstupný vstup. Sériová komunikácia sa začína pri prenosovej rýchlosti 9600.
Serial.begin (9600); pinMode (PA0, VSTUP); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Ďalej v prázdnej slučke () najskôr hodnota potenciometra, ktorá je vstupom. Analógové napätie sa prevedie na digitálnu hodnotu (nachádza sa hodnota ADC). Pretože ADC má STM32 12-bitové rozlíšenie. Digitálna hodnota sa teda líši od (0 do 4096), ktorá je mapovaná do (0 až 100).
int analoginput = analogRead (PA0); int pwmvalue = mapa (analogický vstup, 0,4095,0,100);
Ďalej sa vzdialenosť meria pomocou ultrazvukového snímača nastavením vysokej a nízkej hodnoty spúšte s oneskorením 2 mikrosekundy.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Kolík echa sníma odrazenú vlnu späť, to znamená čas, ktorý sa použije na výpočet vzdialenosti objektu pomocou vzorca pomocou doby, od ktorej sa spustená vlna odrazí späť. Viac informácií o tom, ako ultrazvukový senzor počíta vzdialenosť, sa dozviete po kliknutí na nasledujúci odkaz.
dlhé trvanie = pulseIn (echoPin, HIGH); plaváková vzdialenosť = trvanie * 0,034 / 2;
Teraz sa namerané množstvo údajov aj vzdialenosť prevedú na údaje reťazca a uložia sa do príslušných premenných reťazca.
transmit_number = Reťazec (pwmvalue); transmit_distance = Reťazec (vzdialenosť);
Reťazec sa pridá ako jeden riadok a uloží sa do reťazca s názvom transmit a čiarka „,“ sa používa na oddelenie dvoch reťazcov.
transmit = transmit_pwm + "," + transmit_distance;
Prenosový reťazec sa prevedie na pole znakov.
const char * msg = transmit.c_str ();
Dáta sa prenesú a čakajú na ich odoslanie.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Odoslané údaje o reťazci sa tiež zobrazia v Serial Monitore.
Serial.println (správa);
Programovanie Arduino UNO ako RF prijímača
Arduino UNO sa programuje pomocou IDE Arduino. V sekcii prijímača sa dáta, ktoré sa vysielajú z sekcie vysielača a prijímajú modulom RF prijímača, a prijaté dáta z reťazca rozdelia na príslušné dáta (vzdialenosť a počet) a zobrazia sa na LCD displeji 16x2.
Pozrime sa na krátke kódovanie prijímača:
Rovnako ako v sekcii vysielača je najskôr zahrnutá knižnica RadiohHead. Pretože táto knižnica používa na prenos a príjem dát ASK (Amplitude Shift Keying Technique). Toto veľmi uľahčuje programovanie.
#include
Pretože sa tu používa LCD displej, je tu zahrnutá aj knižnica tekutých kryštálov.
#include
A piny 16x2 LCD displeja spojené s Arduino UNO sú špecifikované a deklarované pomocou lcd ako objektu.
LiquidCrystal lcd (2,3,4,5,6,7);
Ďalej sú deklarované premenné reťazca údajov na ukladanie údajov reťazcov.
Reťazec str_receive; Reťazec str_number; Reťazec str_distance;
Objekt pre knižnicu Radiohead je deklarovaný.
RH_ASK rf;
Teraz v nastavení prázdnoty () je LCD displej nastavený na režim 16x2 a uvítacia správa sa zobrazí a vymaže.
lcd.začiatok (16,2); lcd.print ("OKRUH DIGEST"); lcd.setCursor (0,1); lcd.print ("RF s STM32"); oneskorenie (5 000); lcd.clear ();
Potom sa inicializuje rf objekt.
rf.init ();
Teraz vo void loop () je Array buf deklarovaný s veľkosťou 7. Pretože dáta odoslané z vysielača majú 7 vrátane „,“. Zmeňte to teda podľa údajov, ktoré sa majú prenášať.
uint8_t buf; uint8_t buflen = sizeof (buf);
Ak je reťazec k dispozícii v prijímačovom module rf, funkcia if skontroluje veľkosť a vykoná sa. Rf.recv () sa používa pre príjem dát.
if (rf.recv (buf, & buflen))
Buf má Prijatý text, takže potom získal reťazec je uložený v str_receive reťazcové premennej.
str_receive = Reťazec ((char *) buf);
Táto slučka for sa používa na rozdelenie prijatého reťazca na dva, ak zistí znak „,“ medzi dvoma reťazcami.
for (int i = 0; i <str_receive.length (); i ++) { if (str_receive.substring (i, i + 1) == ",") { str_number = str_receive.substring (0, i); str_distance = str_receive.substring (i + 1); prestávka; }
Vyhlásia sa dve polia znakov pre dve hodnoty a reťazec, ktorý sa rozdelí na dve, sa uloží do rešpektovaného poľa prevedením reťazca na pole znakov.
reťazec znakov char; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (číselný reťazec, 3);
Potom pomocou poľa atoi () preveďte pole znakov na celé číslo.
int vzdialenosť = atoi (distancestring); int číslo = atoi (číselný reťazec);
Po prepočte na celočíselné hodnoty sa hodnoty vzdialenosť a počet zobrazia na 16x2 LCD displeji
lcd.setCursor (0,0); lcd.print ("Číslo:"); lcd.tlač (číslo); lcd.setCursor (0,1); lcd.print ("Vzdialenosť:"); lcd.print (vzdialenosť); lcd.print ("cm");
Po nahraní oboch kódov, tj. Vysielača a prijímača do STM32 a Arduino UNO, sa dáta ako počet a vzdialenosť objektu merané pomocou STM32 prenesú do RF prijímača cez RF vysielač a prijaté hodnoty sa bezdrôtovo zobrazia na LCD displeji.
Testovanie RF vysielača a prijímača založeného na STM 32
1. Keď je číslo na 0 a vzdialenosť objektu je na 6cm.
2. Keď je číslo 47 a vzdialenosť objektu je 3 cm.