- Potrebne komponente
- RF-oddajniški in sprejemniški modul 433 MHz)
- Shema vezja RF oddajnika s STM32F103C8
- Shema vezja RF sprejemnika z Arduino Uno
- Programiranje STM32F103C8 za brezžični RF prenos
- Programiranje Arduino UNO kot RF sprejemnika
- Testiranje RF oddajnika in sprejemnika na osnovi STM 32
Izdelava brezžičnih projektov v vgrajeni elektroniki postane zelo pomembna in koristna, saj ni povsod zapletenih žic, zaradi česar je naprava bolj priročna in prenosna. Obstajajo različne brezžične tehnologije, kot so Bluetooth, WiFi, 433 MHz RF (radijska frekvenca) itd. Vsaka tehnologija ima svoje prednosti in slabosti, kot so prenos stroškov, razdalja ali doseg, hitrost ali prepustnost itd. Danes bomo RF modul uporabljali s STM32 za brezžično pošiljanje in prejemanje podatkov. Če ste nov v mikrokrmilniku STM32, začnite z utripajočo LED s STM32 z uporabo Arduino IDE in tukaj preverite vse druge projekte STM32.
Poleg tega smo brezžični modul RF 433Mhz uporabili tudi z drugimi mikrokrmilniki za gradnjo nekaterih brezžično vodenih projektov, kot so:
- RF nadzorovani gospodinjski aparati
- RF daljinsko vodene LED z Raspberry Pi
- RF nadzorovani robot
- Povezovanje RF modula z Arduinom
- PIC do PIC komunikacija z RF modulom
Tu bomo povezali 433MHz RF brezžični modul z mikrokrmilnikom STM32F103C8. Projekt je razdeljen na dva dela. Oddajnik bo povezan z STM32 in sprejemnik bo povezan z Arduino UNO. Za oddajni in sprejemni del bodo na voljo različni diagram vezja in skice.
V tej vadnici RF oddajnik pošlje na sprejemnik dve vrednosti: razdaljo, izmerjeno z ultrazvočnim senzorjem, in vrednost potenciometra ADC (0 do 4096), ki je preslikana kot številka od (0 do 100). RF sprejemnik za Arduino prejme tako vrednote in odtise te razdalje in število vrednot v 16x2 LCD zaslon brezžično.
Potrebne komponente
- STM32F103C8 Mikrokrmilnik
- Arduino UNO
- RF oddajnik in sprejemnik 433 MHz
- Ultrazvočni senzor (HC-SR04)
- LCD zaslon 16x2
- 10k potenciometer
- Breadboard
- Povezovanje žic
RF-oddajniški in sprejemniški modul 433 MHz)
Izhod RF oddajnika:
RF oddajnik 433 MHz |
Opis pin |
MRAVLJA |
Za priključitev antene |
GND |
GND |
VDD |
3,3 do 5V |
PODATKI |
Tu so podani podatki, ki jih je treba poslati sprejemniku |
Izhod RF sprejemnika:
RF sprejemnik 433 MHz |
UPORABA |
MRAVLJA |
Za priključitev antene |
GND |
GND |
VDD |
3,3 do 5V |
PODATKI |
Podatki, ki jih je treba prejeti od oddajnika |
CE / DO |
Je tudi podatkovni zatič |
Specifikacije modula 433 MHz:
- Delovna napetost sprejemnika: 3V do 5V
- Delovna napetost oddajnika: 3V do 5V
- Delovna frekvenca: 433 MHz
- Oddaljenost prenosa: 3 metre (brez antene) do 100 metrov (največ)
- Modulacijska tehnika: ASK (Amplitude shift keying)
- Hitrost prenosa podatkov: 10Kbps
Shema vezja RF oddajnika s STM32F103C8
Vezja med RF oddajnikom in STM32F103C8:
STM32F103C8 |
RF oddajnik |
5V |
VDD |
GND |
GND |
PA10 |
PODATKI |
NC |
MRAVLJA |
Vezja med ultrazvočnim senzorjem in STM32F103C8:
STM32F103C8 |
Ultrazvočni senzor (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Odmev |
GND |
GND |
Potenciometer 10k je povezan z STM32F103C8 zagotoviti vhodnega analognega vrednost (0 do 3.3V) na ADC pin PA0 za STM32.
Shema vezja RF sprejemnika z Arduino Uno
Vezja med RF sprejemnikom in Arduino UNO:
Arduino UNO |
RF sprejemnik |
5V |
VDD |
GND |
GND |
11. |
PODATKI |
NC |
MRAVLJA |
Vezja med 16x2 LCD in Arduino UNO:
Ime pin LCD |
Ime pin Arduino UNO |
Tla (Gnd) |
Tla (G) |
VCC |
5V |
VEE |
Pin iz središča potenciometra za kontrast |
Izbira registra (RS) |
2. |
Branje / pisanje (RW) |
Tla (G) |
Omogoči (EN) |
3. |
Podatkovni bit 4 (DB4) |
4. |
Podatkovni bit 5 (DB5) |
5. |
Podatkovni bit 6 (DB6) |
6. |
Podatkovni bit 7 (DB7) |
7. |
LED pozitivna |
5V |
LED negativno |
Tla (G) |
Šifriranje bo na kratko razloženo spodaj. Na skici bosta dva dela, kjer bo prvi del odsek oddajnika, drugi pa odsek sprejemnika. Vse datoteke skic in delujoči video bodo podane na koncu te vadnice. Če želite izvedeti več o povezovanju RF modula z Arduino Uno, sledite povezavi.
Programiranje STM32F103C8 za brezžični RF prenos
STM32F103C8 je mogoče programirati z uporabo Arduino IDE. Za nalaganje kode na STM32F103C8 ni potreben programer FTDI ali ST-Link. Preprosto se povežite z računalnikom prek vrat USB STM32 in začnite programirati z ARDUINO IDE. Programiranja vašega STM32 v Arduino IDE se lahko naučite po povezavi.
V odseku oddajnika se razdalja predmeta v 'cm' meri z ultrazvočnim senzorjem, vrednost številke od (0 do 100) pa se nastavi s potenciometrom, ki se prenaša prek RF-oddajnika, povezanega s STM32.
Najprej je vključena knjižnica Radiohead, ki jo lahko prenesete od tukaj. Ker ta knjižnica uporablja ASK (Amplitude Shift Keying Technique) za prenos in sprejemanje podatkov. Zaradi tega je programiranje zelo enostavno. Knjižnico lahko vključite v skico tako, da odprete Skica-> vključi knjižnico-> Dodaj knjižnico.zip.
#include
Kot v tej vadnici na strani oddajnika se za merjenje razdalje uporablja ultrazvočni senzor, tako da so definirani sprožilni in odmevni zatiči.
#define trigPin PB1 #define echoPin PB0
Nato je ime predmeta za knjižnico RH_ASK nastavljeno kot rf_driver s parametri, kot so hitrost (2000), RX pin (PA9) in TX pin (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Nato se navede spremenljivka Strings, potrebna v tem programu.
Niz_prenos_številke; Niz oddajna_dalja; String prenos;
Naslednje v void setup () se inicializira objekt za RH_ASK rf_driver.
rf_driver.init ();
Po tem se sprožilni zatič nastavi kot OUTPUT pin, PA0 (priključen na potenciometer) in echo pin pa kot INPUT pin. Serijska komunikacija se začne s hitrostjo prenosa 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, IZHOD);
Nato se v void zanki () najprej vrednost potenciometra, ki je vhodna Analogna napetost, pretvori v digitalno vrednost (najdena je vrednost ADC). Ker ima ADC STM32 12-bitno ločljivost. Digitalna vrednost se torej razlikuje od (0 do 4096), ki je preslikana v (0 do 100).
int analoginput = analogRead (PA0); int pwmvalue = map (analoginput, 0,4095,0,100);
Nato razdaljo izmerimo z ultrazvočnim senzorjem tako, da sprožilec nastavimo na visoko in nizko z zakasnitvijo 2 mikrosekundi.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Odmevni zatič zazna odbiti val nazaj, to je čas, ko se sproženi val odbije nazaj, se uporablja pri izračunu razdalje predmeta s pomočjo formule. Na povezavi preberite več o tem, kako ultrazvočni senzor izračuna razdaljo.
dolgo trajanje = pulseIn (echoPin, HIGH); razdalja plovbe = trajanje * 0,034 / 2;
Zdaj se izmerjeno število podatkov in razdalja pretvori v nizne podatke in shrani v ustrezne spremenljivke niza.
_prenos_številke = niz (pwmvalue); oddajna_dalja = niz (razdalja);
Oba niza sta dodana kot ena vrstica in shranjena v nizu, imenovanem prenos in vejica “,” se uporablja za ločevanje dveh nizov.
oddaj = oddaj_pwm + "," + oddaj_razdaljo;
Oddajni niz se pretvori v matriko.
const char * msg = transmit.c_str ();
Podatki se pošljejo in počakajte, da se pošljejo.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Poslani podatki niza so prikazani tudi v serijskem monitorju.
Serial.println (msg);
Programiranje Arduino UNO kot RF sprejemnika
Arduino UNO je programiran z uporabo Arduino IDE. V odseku sprejemnika se podatki, ki jih prenaša odsek oddajnika in jih sprejema RF sprejemniški modul, ter prejeti niz podatkov razdelijo na ustrezne podatke (razdalja in število) in se prikažejo na 16x2 LCD zaslonu.
Oglejmo si kodiranje sprejemnika na kratko:
Tako kot v oddajnem odseku je najprej vključena knjižnica RadiohHead. Ker ta knjižnica uporablja ASK (Amplitude Shift Keying Technique) za prenos in sprejemanje podatkov. Zaradi tega je programiranje zelo enostavno.
#include
Ker je tu uporabljen LCD zaslon, je vključena tudi knjižnica tekočih kristalov.
#include
Zatiči LCD zaslona 16x2, povezani z Arduino UNO, so določeni in prijavljeni z uporabo lcd kot predmeta.
LCD LiquidCrystal (2,3,4,5,6,7);
Nato se navedejo spremenljivke podatkov String za shranjevanje nizov.
Niz str_receive; Niz str_number; Niz str_distance;
Deklariran je objekt za knjižnico Radiohead.
RH_ASK rf;
Zdaj v nastavitvi void () je LCD zaslon nastavljen v način 16x2 in pozdravno sporočilo se prikaže in počisti.
lcd.begin (16,2); lcd.print ("DIGEST CIRCUIT"); lcd.setCursor (0,1); lcd.print ("RF s STM32"); zamuda (5000); lcd.clear ();
Po tem se rf objekt inicializira.
rf.init ();
Zdaj je v zanki void () razvrščen niz matrike z velikostjo 7. Ker imajo podatki, poslani z oddajnika, 7, vključno z "," Torej spremenite to glede na podatke, ki jih želite poslati.
uint8_t buf; uint8_t buflen = sizeof (buf);
Če je niz na voljo v modulu RF sprejemnika, funkcija if preveri velikost in se izvede. Za sprejemanje podatkov se uporablja rf.recv () .
če (rf.recv (buf, & buflen))
BUF ima Prejete niz tako, potem je prejel niz shranjene v str_receive niza spremenljivke.
str_receive = Niz ((char *) buf);
Ta zanka for se uporablja za razdelitev prejetega niza na dva, če zazna vmesnika ',' med dvema nizoma.
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); odmor; }
Deklarirata se dva polja char za dve vrednosti in niz, ki je razdeljen na dva, se shrani v spoštovano polje s pretvorbo niza v polje znakov.
niz številk char; char razdalja; str_distance.toCharArray (niz razdalje, 3); str_number.toCharArray (stringstring, 3);
Po tem pretvorite niz znakov v celo število s pomočjo atoi ()
int razdalja = atoi (niz razdalje); int številka = atoi (niz nizov);
Po pretvorbi v celoštevilčne vrednosti se vrednosti razdalja in število prikažeta na LCD zaslonu 16x2
lcd.setCursor (0,0); lcd.print ("Številka:"); lcd.print (številka); lcd.setCursor (0,1); lcd.print ("Razdalja:"); lcd.print (razdalja); lcd.print ("cm");
Po nalaganju obeh kod, tj. Oddajnika in sprejemnika v STM32 oziroma Arduino UNO, se podatki, kot sta število in razdalja predmeta, izmerjeni s pomočjo STM32, preneseta v RF-sprejemnik prek RF-oddajnika, prejete vrednosti pa se brezžično prikažejo na LCD-prikazovalniku.
Testiranje RF oddajnika in sprejemnika na osnovi STM 32
1. Kadar je število pri 0 in razdalja predmeta 6 cm.
2. Ko je številka 47 in razdalja predmeta 3 cm.