- Nepieciešamās sastāvdaļas
- 433 MHz RF raidītājs un uztvērēja modulis)
- RF raidītāja ar STM32F103C8 shēma
- RF uztvērēja shēma ar Arduino Uno
- STM32F103C8 programmēšana bezvadu RF pārraidei
- Arduino UNO programmēšana kā RF uztvērējs
- STM 32 bāzes RF raidītāja un uztvērēja testēšana
Bezvadu projektu veidošana iegultā elektronikā kļūst ļoti svarīga un noderīga, jo visā nav neviena sajaukta vada, kas padara ierīci ērtāku un pārnēsājamāku. Ir dažādas bezvadu tehnoloģijas, piemēram, Bluetooth, WiFi, 433 MHz RF (radiofrekvenču) utt. Katrai tehnoloģijai ir savas priekšrocības un trūkumi, piemēram, izmaksas, attāluma vai diapazona pārsūtīšana, ātrums vai caurlaidspēja utt. Šodien mēs izmantosim RF moduli ar STM32 lai bezvadu režīmā nosūtītu un saņemtu datus. Ja esat jauns STM32 mikrokontrollera lietotājs, sāciet ar mirgojošu LED ar STM32, izmantojot Arduino IDE, un šeit pārbaudiet visus pārējos STM32 projektus.
Bez tam, mēs esam arī izmantojuši RF 433Mhz bezvadu moduli kopā ar citiem mikrokontrolleriem, lai izveidotu dažus bezvadu kontrolētus projektus, piemēram:
- RF kontrolēta sadzīves tehnika
- RF tālvadības LED, izmantojot Raspberry Pi
- RF vadāms robots
- Saskarīgs RF modulis ar Arduino
- PIC - PIC komunikācija, izmantojot RF moduli
Šeit mēs saskarsmē 433MHz RF bezvadu moduli ar STM32F103C8 mikrokontrolleru. Projekts ir sadalīts divās daļās. Raidītājs tiks saskarnē ar STM32 un saņēmējs tiks saskarnē ar Arduino ANO. Būs atšķirīga shēma un skices gan pārsūtīšanai, gan saņemšanai.
Šajā apmācībā RF raidītājs uztvērēja pusē nosūta divas vērtības: attālumu, kas izmērīts, izmantojot ultraskaņas sensoru, un potenciometra ADC vērtību (no 0 līdz 4096), kas tiek kartēts kā skaitlis no (0 līdz 100). RF uztvērējs ar Arduino saņem gan vērtības un izdrukas šie attāluma un ciparu vērtības 16x2 LCD displeju vadiem.
Nepieciešamās sastāvdaļas
- STM32F103C8 mikrokontrolleris
- Arduino UNO
- 433Mhz RF raidītājs un uztvērējs
- Ultraskaņas sensors (HC-SR04)
- 16x2 LCD displejs
- 10k potenciometrs
- Maizes dēlis
- Vadu savienošana
433 MHz RF raidītājs un uztvērēja modulis)
RF raidītāja pinout:
433Mhz RF raidītājs |
Piespraudes apraksts |
ANT |
Antenas savienošanai |
GND |
GND |
VDD |
No 3,3 līdz 5 V |
DATI |
Šeit ir norādīti uztvērējam pārsūtāmie dati |
RF uztvērēja pinout:
433Mhz RF uztvērējs |
LIETOT |
ANT |
Antenas savienošanai |
GND |
GND |
VDD |
No 3,3 līdz 5 V |
DATI |
Dati, kas jāsaņem no raidītāja |
CE / DO |
Tā ir arī datu piespraude |
433 MHz moduļa specifikācijas:
- Uztvērēja darba spriegums: no 3V līdz 5V
- Raidītāja darba spriegums: no 3V līdz 5V
- Darba frekvence: 433 MHz
- Pārraides attālums: no 3 metriem (bez antenas) līdz 100 metriem (maksimums)
- Modulēšanas tehnika: ASK (amplitūdas maiņas taustiņinstrumentēšana)
- Datu pārraides ātrums: 10Kbps
RF raidītāja ar STM32F103C8 shēma
Ķēdes savienojumi starp RF raidītāju un STM32F103C8:
STM32F103C8 |
RF raidītājs |
5V |
VDD |
GND |
GND |
PA10 |
DATI |
NC |
ANT |
Ķēdes savienojumi starp ultraskaņas sensoru un STM32F103C8:
STM32F103C8 |
Ultraskaņas sensors (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Atbalss |
GND |
GND |
10 k potenciometrs ir savienots ar STM32F103C8, lai ievadītu analogās vērtības (0 līdz 3,3 V) STM32 ADC tapai PA0.
RF uztvērēja shēma ar Arduino Uno
Ķēdes savienojumi starp RF uztvērēju un Arduino UNO:
Arduino UNO |
RF uztvērējs |
5V |
VDD |
GND |
GND |
11 |
DATI |
NC |
ANT |
Ķēdes savienojumi starp 16x2 LCD un Arduino UNO:
LCD tapas nosaukums |
Arduino UNO tapas nosaukums |
Zeme (Gnd) |
Zeme (G) |
VCC |
5V |
VEE |
Piespraude no potenciometra centra kontrastam |
Reģistrēties Atlasīt (RS) |
2 |
Lasīt / rakstīt (RW) |
Zeme (G) |
Iespējot (EN) |
3 |
4. datu bits (DB4) |
4 |
5. datu bits (DB5) |
5 |
6. datu bits (DB6) |
6 |
7. datu bits (DB7) |
7 |
LED pozitīvs |
5V |
LED negatīvs |
Zeme (G) |
Kodēšana tiks īsumā paskaidrota zemāk. Būs divas skices daļas, kur pirmā daļa būs raidītāja daļa, bet otra - uztvērēja sadaļa. Visi skiču faili un darba video tiks sniegti šīs apmācības beigās. Lai uzzinātu vairāk par RF moduļa saskarni ar Arduino Uno, sekojiet saitei.
STM32F103C8 programmēšana bezvadu RF pārraidei
STM32F103C8 var ieprogrammēt, izmantojot Arduino IDE. FTDI programmētājs vai ST-Link nav nepieciešams augšupielādēt kodu STM32F103C8. Vienkārši izveidojiet savienojumu ar datoru, izmantojot STM32 USB portu, un sāciet programmēt ar ARDUINO IDE. Jūs varat iemācīties STM32 programmēšanu Arduino IDE, sekojot saitei.
Raidītāja sadaļā objekta attālumu cm izteiksmē mēra, izmantojot ultraskaņas sensoru, un skaitļa vērtību no (0 līdz 100), kas iestatīta, izmantojot potenciometru, kas tiek pārraidīts caur RF raidītāju, kas ir saskarnē STM32.
Vispirms tiek iekļauta Radiohead bibliotēka, kuru var lejupielādēt šeit. Tā kā šī bibliotēka izmanto datu pārsūtīšanai un saņemšanai ASK (Amplitude Shift Keying Technique). Tas ļoti atvieglo programmēšanu. Jūs varat iekļaut bibliotēku skicē, dodoties uz Sketch-> include library-> Add.zip library.
# iekļaut
Tāpat kā šajā apmācībā raidītāja pusē, attāluma mērīšanai tiek izmantots ultraskaņas sensors, tādējādi tiek definēti sprūda un atbalss tapas.
#define trigPin PB1 #define echoPin PB0
Pēc tam RH_ASK bibliotēkas objekta nosaukums tiek iestatīts kā rf_driver ar tādiem parametriem kā ātrums (2000), RX tapa (PA9) un TX tapa (PA10).
RH_ASK rf_ draiveris (2000, PA9, PA10);
Tālāk tiek deklarēti šajā programmā nepieciešamie mainīgie virknes.
Virknes pārsūtīšanas_numurs; Virknes pārraides attālums; Stīgu pārsūtīšana;
Pēc tam tukšajā iestatījumā () tiek inicializēts objekts RH_ASK rf_driver.
rf_driver.init ();
Pēc tam sprūda tapa ir iestatīta kā OUTPUT tapa un PA0 (savienota ar potenciometru) un atbalss tapa ir iestatīta kā INPUT tapa. Sērijas komunikācija sākas ar 9600 bitu pārraides ātrumu.
Sērijas sākums (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Pēc tam tukšuma cilpā () vispirms ievadiet potenciometra vērtību, kas ir ieeja. Analogais spriegums tiek pārveidots par digitālo vērtību (atrasta ADC vērtība). Tā kā STM32 ADC ir 12 bitu izšķirtspēja. Tātad digitālā vērtība svārstās no (0 līdz 4096), kas tiek kartēta (0 līdz 100).
int analogievade = analogRead (PA0); int pwmvalue = karte (analogais ievade, 0,4095,0,100);
Tālāk attālumu mēra, izmantojot ultraskaņas sensoru, nosakot sprūdu augstu un zemu ar 2 mikrosekunžu aizturi.
digitalWrite (trigPin, LOW); kavēšanāsMikrosekundes (2); digitalWrite (trigPin, HIGH); kavēšanāsMikrosekundes (10); digitalWrite (trigPin, LOW);
Eho tapa nosaka atstarotā viļņa aizmuguri, tas ir, laika ilgums, kurā tiek iedarbināts iedarbinātais vilnis, tiek izmantots objekta attāluma aprēķināšanai, izmantojot formulu. Uzziniet vairāk, kā ultraskaņas sensors aprēķina attālumu, izmantojot saiti.
ilgs ilgums = pulseIn (echoPin, HIGH); pludiņa attālums = ilgums * 0,034 / 2;
Tagad gan datu skaits, gan izmērītais attālums tiek pārveidots par virkņu datiem un saglabāts attiecīgajos virknes mainīgajos.
transmit_number = virkne (pwmvalue); transmit_distance = virkne (attālums);
Abas virknes pievieno kā vienu rindu un glabā virknē ar nosaukumu pārsūtīšana un komats “,” tiek izmantotas divu virkņu atdalīšanai.
pārsūtīt = pārsūtīt_pwm + "," + pārraides attālums;
Pārraides virkne tiek pārveidota par rakstzīmju masīvu.
const char * msg = pārsūtīt.c_str ();
Dati tiek pārsūtīti un pagaidiet, līdz tie tiek nosūtīti.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Nosūtītie virknes dati tiek parādīti arī sērijas monitorā.
Serial.println (msg);
Arduino UNO programmēšana kā RF uztvērējs
Arduino UNO ir ieprogrammēts, izmantojot Arduino IDE. Uztvērēja sadaļā dati, kas tiek pārraidīti no raidītāja sekcijas un kurus saņem RF uztvērēja modulis, un saņemtie virknes dati tiek sadalīti attiecīgajos datos (attālums un skaitlis) un tiek parādīti 16x2 LCD displejā.
Apskatīsim uztvērēja kodēšanu īsumā:
Tāpat kā raidītāja sadaļā, vispirms ir iekļauta arī RadiohHead bibliotēka. Tā kā šī bibliotēka izmanto datu pārsūtīšanai un saņemšanai ASK (Amplitude Shift Keying Technique). Tas ļoti atvieglo programmēšanu.
# iekļaut
Tā kā šeit tiek izmantots LCD displejs, ir iekļauta arī šķidro kristālu bibliotēka.
# iekļaut
16x2 LCD displeja tapas, kas savienotas ar Arduino UNO, ir norādītas un deklarētas, izmantojot objektu LCD.
LiquidCrystal lcd (2,3,4,5,6,7);
Pēc tam tiek deklarēti virknes datu mainīgie, lai glabātu virknes datus.
Virkne str_receive; Virkne str_number; Stīgu str_distance;
Radiohead bibliotēkas objekts ir deklarēts.
RH_ASK rf;
Tagad tukšajā iestatījumā () LCD displejs ir iestatīts 16x2 režīmā, un tiek parādīts un notīrīts sveiciena ziņojums.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF ar STM32"); kavēšanās (5000); lcd.clear ();
Pēc tam tiek inicializēts rf objekts.
rf.init ();
Tagad tukšajā cilpā () masīva buf tiek deklarēts ar izmēru 7. Tā kā no raidītāja nosūtītajiem datiem ir 7, ieskaitot “,”. Tātad, mainiet to atbilstoši pārsūtāmajiem datiem.
uint8_t buf; uint8_t buflen = sizeof (buf);
Ja virkne ir pieejama RF uztvērēja modulī, funkcija if pārbauda izmēru un to izpilda. Rf.recv () tiek izmantots, lai saņemtu datus.
ja (rf.recv (buf, & buflen))
Buf ir saņemto virkne tā tad saņemta virkne tiek glabāta str_receive string mainīgais.
str_receive = Stīga ((char *) buf);
Tas par cilpu izmanto sadalīt saņemto string divās ja tas atpazīst "," in-starp divām virknes.
par (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ārtraukums; }
Tiek deklarēti divi simbolu masīvi divām vērtībām, un virkne, kas sadalīta divās daļās, tiek saglabāta respektējamā masīvā, pārveidojot virkni rakstzīmju masīvā.
char ciparu virkne; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (ciparu virkne, 3);
Pēc tam pārveidojiet rakstzīmju masīvu veselā skaitlī, izmantojot atoi ()
int attālums = atoi (distancestringring); int numurs = atoi (ciparu virkne);
Pēc konvertēšanas uz veselu skaitļu vērtībām attālums un skaitlis tiek parādīts 16x2 LCD displejā
lcd.setCursor (0,0); lcd.print ("Skaitlis:"); lcd.print (numurs); lcd.setCursor (0,1); lcd.print ("Attālums:"); lcd.print (attālums); lcd.print ("cm");
Pēc abu kodu, ti, raidītāja un uztvērēja, augšupielādes attiecīgi STM32 un Arduino UNO, dati, piemēram, skaits un objekta attālums, kas izmērīts, izmantojot STM32, tiek nosūtīti uz RF uztvērēju, izmantojot RF raidītāju, un saņemtās vērtības bezvadu režīmā tiek parādītas LCD displejā.
STM 32 bāzes RF raidītāja un uztvērēja testēšana
1. Kad skaitlis ir 0 un objekta attālums ir 6 cm.
2. Kad skaitlis 47 un objekta attālums ir 3 cm.