- Požadované komponenty
- 433MHz RF vysílač a přijímač)
- Schéma zapojení RF vysílače s STM32F103C8
- Schéma zapojení RF přijímače s Arduino Uno
- Programování STM32F103C8 pro bezdrátový RF přenos
- Programování Arduino UNO jako RF přijímače
- Testování RF vysílače a přijímače založené na STM 32
Vytváření bezdrátových projektů ve vestavěné elektronice se stává velmi důležitým a užitečným, protože zde nejsou žádné neuspořádané vodiče, díky nimž je zařízení praktičtější a přenosnější. Existují různé bezdrátové technologie jako Bluetooth, WiFi, 433 MHz RF (Radio Frequency) atd. Každá technologie má své vlastní výhody a nevýhody, jako je cena, přenos vzdálenosti nebo dosahu, rychlost nebo propustnost atd. Dnes budeme používat RF modul s STM32 bezdrátově odesílat a přijímat data. Pokud jste v mikrokontroléru STM32 noví, začněte s blikající LED s STM32 pomocí Arduino IDE a zde zkontrolujte všechny ostatní projekty STM32.
Kromě toho jsme také použili bezdrátový modul RF 433Mhz s dalšími mikrokontroléry k vytvoření některých bezdrátově řízených projektů, jako například:
- RF řízené domácí spotřebiče
- RF dálkově ovládané LED diody pomocí Raspberry Pi
- RF řízený robot
- Propojení RF modulu s Arduino
- Komunikace PIC na PIC pomocí RF modulu
Zde budeme propojovat RF bezdrátový modul 433MHz s mikrokontrolérem STM32F103C8. Projekt je rozdělen do dvou částí. Vysílač bude propojen s STM32 a přijímač bude propojen s Arduino UNO. K dispozici bude různé schéma zapojení a náčrtky pro vysílací i přijímací část.
V tomto tutoriálu vysílá RF vysílač na stranu přijímače dvě hodnoty: vzdálenost měřenou pomocí ultrazvukového senzoru a hodnotu ADC potenciometru (0 až 4096), která je mapována jako číslo od (0 do 100). RF přijímač o Arduino obdrží obě hodnoty a tiskne tyto vzdálenost a počet hodnot v 16x2 LCD displej bezdrátově.
Požadované komponenty
- Mikrokontrolér STM32F103C8
- Arduino UNO
- 433MHz RF vysílač a přijímač
- Ultrazvukový senzor (HC-SR04)
- 16x2 LCD displej
- 10k potenciometr
- Nepájivá deska
- Připojení vodičů
433MHz RF vysílač a přijímač)
RF vysílač Pinout:
433MHz RF vysílač |
Popis kolíku |
MRAVENEC |
Pro připojení antény |
GND |
GND |
VDD |
3,3 až 5 V |
DATA |
Zde jsou uvedena data, která mají být přenesena do přijímače |
Pinout RF přijímače:
433MHz RF přijímač |
POUŽITÍ |
MRAVENEC |
Pro připojení antény |
GND |
GND |
VDD |
3,3 až 5 V |
DATA |
Data přijímaná z vysílače |
CE / DO |
Je to také datový kolík |
Specifikace modulu 433 MHz:
- Provozní napětí přijímače: 3V až 5V
- Provozní napětí vysílače: 3V až 5V
- Provozní frekvence: 433 MHz
- Přenosová vzdálenost: 3 metry (bez antény) až 100 metrů (maximálně)
- Modulační technika: ASK (Amplitude shift keying)
- Rychlost přenosu dat: 10 kb / s
Schéma zapojení RF vysílače s STM32F103C8
Připojení obvodu mezi RF vysílačem a STM32F103C8:
STM32F103C8 |
RF vysílač |
5V |
VDD |
GND |
GND |
PA10 |
DATA |
NC |
MRAVENEC |
Propojení obvodu mezi ultrazvukovým senzorem a STM32F103C8:
STM32F103C8 |
Ultrazvukový senzor (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Echo |
GND |
GND |
K STM32F103C8 je připojen 10k potenciometr, který poskytuje vstupní analogovou hodnotu (0 až 3,3 V) na pin ADC PA0 na STM32.
Schéma zapojení RF přijímače s Arduino Uno
Připojení obvodu mezi RF přijímačem a Arduino UNO:
Arduino UNO |
RF přijímač |
5V |
VDD |
GND |
GND |
11 |
DATA |
NC |
MRAVENEC |
Připojení obvodu mezi 16x2 LCD a Arduino UNO:
Název PINu LCD |
Název PINu Arduino UNO |
Ground (GND) |
Zem (G) |
VCC |
5V |
VEE |
Kolík od středu potenciometru pro kontrast |
Výběr rejstříku (RS) |
2 |
Čtení / zápis (RW) |
Zem (G) |
Povolit (EN) |
3 |
Datový bit 4 (DB4) |
4 |
Datový bit 5 (DB5) |
5 |
Datový bit 6 (DB6) |
6 |
Datový bit 7 (DB7) |
7 |
Pozitivní LED |
5V |
LED negativní |
Zem (G) |
Níže bude vysvětleno kódování. Budou dvě části náčrtu, kde první část bude vysílací část a další bude přijímací část. Všechny soubory náčrtu a pracovní video budou uvedeny na konci tohoto tutoriálu. Chcete-li se dozvědět více o propojení RF modulu s Arduino Uno, klikněte na odkaz.
Programování STM32F103C8 pro bezdrátový RF přenos
STM32F103C8 lze programovat pomocí Arduino IDE. K nahrání kódu do STM32F103C8 není nutný programátor FTDI nebo ST-Link. Jednoduše se připojte k PC přes USB port STM32 a začněte programovat pomocí ARDUINO IDE. Programování vašeho STM32 v Arduino IDE se naučíte kliknutím na odkaz.
V sekci vysílače se měří vzdálenost objektu v 'cm' pomocí ultrazvukového senzoru a číselná hodnota od (0 do 100) se nastavuje pomocí potenciometru, který se vysílá pomocí RF vysílače propojeného s STM32.
Nejprve je zahrnuta knihovna Radiohead, kterou si můžete stáhnout zde. Protože tato knihovna používá k přenosu a přijímání dat ASK (Amplitude Shift Keying Technique). Díky tomu je programování velmi snadné. Knihovnu můžete zahrnout do náčrtu v části Skica-> zahrnout knihovnu-> Přidat knihovnu.zip.
#zahrnout
Stejně jako v tomto tutoriálu na straně vysílače se k měření vzdálenosti používá ultrazvukový senzor, takže jsou definovány kolíky spouště a echa.
#define trigPin PB1 #define echoPin PB0
Dále je název objektu pro knihovnu RH_ASK nastaven jako rf_driver s parametry, jako je rychlost (2000), RX pin (PA9) a TX pin (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Dále jsou deklarovány proměnné řetězce potřebné v tomto programu.
Řetězec transmit_number; Řetězec transmit_distance; Přenos řetězce;
Dále ve void setup () se inicializuje objekt pro RH_ASK rf_driver.
rf_driver.init ();
Poté je spouštěcí pin nastaven na OUTPUT a PA0 (připojený k potenciometru) a echo pin na INPUT. Sériová komunikace začíná přenosovou rychlostí 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Dále ve smyčce void (), první hodnota potenciometru, která je vstupem Analogové napětí je převedeno na digitální hodnotu (je nalezena hodnota ADC). Protože ADC STM32 má 12bitové rozlišení. Digitální hodnota se tedy pohybuje od (0 do 4096), která je mapována do (0 až 100).
int analoginput = analogRead (PA0); int pwmvalue = mapa (analogový vstup, 0,4095,0,100);
Dále se vzdálenost měří pomocí ultrazvukového senzoru nastavením spouštění na vysokou a nízkou se zpožděním 2 mikrosekundy.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Pin ozvěny snímá odraženou vlnu zpět, to znamená, že doba, po kterou se odražená vlna odráží zpět, se používá při výpočtu vzdálenosti objektu pomocí vzorce. Další informace o tom, jak ultrazvukový senzor počítá vzdálenost, získáte kliknutím na odkaz.
dlouhé trvání = pulseIn (echoPin, HIGH); plovoucí vzdálenost = doba trvání * 0,034 / 2;
Nyní se jak naměřený počet dat, tak i měřená vzdálenost převádějí na řetězcová data a ukládají se do příslušných řetězcových proměnných.
transmit_number = Řetězec (pwmvalue); transmit_distance = Řetězec (vzdálenost);
Řetězec je přidán jako jeden řádek a uložen v řetězci zvaném přenos a čárka „,“ slouží k oddělení dvou řetězců.
transmit = transmit_pwm + "," + transmit_distance;
Přenosový řetězec je převeden na znakové pole.
const char * msg = transmit.c_str ();
Data se přenesou a počkejte, až se odešlou.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Odeslaná data řetězce se také zobrazí v Serial Monitoru.
Serial.println (msg);
Programování Arduino UNO jako RF přijímače
Arduino UNO je programováno pomocí Arduino IDE. V sekci přijímače jsou data, která jsou přenášena z sekce vysílače a přijímána modulem RF přijímače, a přijatá data řetězce rozdělena na příslušná data (vzdálenost a počet) a zobrazena na LCD displeji 16x2.
Podívejme se stručně na kódování přijímače:
Stejně jako v sekci vysílače je nejprve zahrnuta knihovna RadiohHead. Protože tato knihovna používá k přenosu a přijímání dat ASK (Amplitude Shift Keying Technique). Díky tomu je programování velmi snadné.
#zahrnout
Protože se zde používá LCD displej, je zahrnuta také knihovna tekutých krystalů.
#zahrnout
A piny 16x2 LCD displeje spojené s Arduino UNO jsou specifikovány a deklarovány pomocí lcd jako objektu.
LiquidCrystal lcd (2,3,4,5,6,7);
Dále jsou deklarovány datové proměnné řetězce pro ukládání dat řetězce.
Řetězec str_receive; Řetězec str_number; Řetězec str_distance;
Objekt pro knihovnu Radiohead je deklarován.
RH_ASK rf;
Nyní v nastavení neplatnosti () je LCD displej nastaven do režimu 16x2 a je zobrazena a vymazána uvítací zpráva.
lcd.begin (16,2); lcd.print ("OKRUH DIGEST"); lcd.setCursor (0,1); lcd.print ("RF s STM32"); zpoždění (5 000); lcd.clear ();
Poté se inicializuje rf objekt.
rf.init ();
Nyní ve smyčce void () je Array buf deklarován s velikostí 7. Protože data odeslaná z vysílače mají 7 včetně „,“. Změňte to tedy podle údajů, které se mají přenášet.
uint8_t buf; uint8_t buflen = sizeof (buf);
Pokud je řetězec k dispozici v modulu rf přijímače, funkce if zkontroluje velikost a provede se. Rf.recv () se používá pro příjem dat.
if (rf.recv (buf, & buflen))
Buf má Přijatý text, takže pak získal řetězec je uložen v str_receive řetězcové proměnné.
str_receive = String ((char *) buf);
Tato smyčka for se používá k rozdělení přijatého řetězce na dva, pokud detekuje znak „,“ mezi dvěma řetězci.
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); přestávka; }
Jsou deklarována dvě pole znaků pro dvě hodnoty a řetězec, který je rozdělen na dva, je uložen v respektovaném poli převedením řetězce na pole znaků.
řetězec čísel znaků; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (řetězec čísel, 3);
Poté převeďte pole znaků na celé číslo pomocí atoi ()
int vzdálenost = atoi (distancestring); int číslo = atoi (číselný řetězec);
Po převodu na celočíselné hodnoty se hodnoty vzdálenosti a čísla zobrazí na 16x2 LCD displeji
lcd.setCursor (0,0); lcd.print ("Číslo:"); lcd.print (číslo); lcd.setCursor (0,1); lcd.print ("Vzdálenost:"); lcd.print (vzdálenost); lcd.print ("cm");
Po nahrání obou kódů, tj. Vysílače a přijímače do STM32 a Arduino UNO, se data, jako je počet a vzdálenost objektu měřená pomocí STM32, přenesou do RF přijímače pomocí RF vysílače a přijaté hodnoty se bezdrátově zobrazí na LCD displeji.
Testování RF vysílače a přijímače založené na STM 32
1. Když je číslo na 0 a vzdálenost objektu je na 6 cm.
2. Když je číslo 47 a vzdálenost objektu je 3 cm.