- Būtini komponentai
- 433 MHz radijo imtuvas ir imtuvas)
- RF siųstuvo su STM32F103C8 grandinės schema
- RF imtuvo su „Arduino Uno“ grandinės schema
- STM32F103C8 programavimas bevieliam radijo perdavimui
- „Arduino UNO“ programavimas kaip radijo imtuvas
- STM 32 pagrindu veikiančio radijo siųstuvo ir imtuvo testavimas
Belaidžių projektų įgyvendinimas įterptojoje elektronikoje tampa labai svarbus ir naudingas, nes visame pasaulyje nėra jokių susimaišiusių laidų, kurie padaro prietaisą patogesnį ir nešiojamą. Yra įvairių belaidžių technologijų, tokių kaip „Bluetooth“, „WiFi“, 433 MHz RF (radijo dažnis) ir kt. Kiekviena technologija turi savo privalumų ir trūkumų, tokių kaip kaina, atstumo ar diapazono perdavimas, greitis ar pralaidumas ir kt. Šiandien mes naudosime RF modulį su STM32 siųsti ir gauti duomenis belaidžiu būdu. Jei dar nesinaudojote STM32 mikrovaldikliu, pradėkite nuo mirksinčio LED su STM32 naudodami „Arduino IDE“ ir patikrinkite visus kitus STM32 projektus čia.
Be to, mes taip pat naudojome RF 433Mhz belaidį modulį su kitais mikrovaldikliais kurdami kai kuriuos belaidžius valdomus projektus, tokius kaip:
- RF valdoma buitinė technika
- RF nuotolinio valdymo LED, naudojant „Raspberry Pi“
- RF valdomas robotas
- Sąsajos RF modulis su „Arduino“
- PIC - PIC ryšys naudojant RF modulį
Čia susiesime 433MHz RF belaidį modulį su STM32F103C8 mikrovaldikliu. Projektas yra padalintas į dvi dalis. Siųstuvas bus susieti su STM32 ir imtuvas bus susieti su Arduino UNO. Bus skirtinga grandinės schema ir eskizai tiek perdavimui, tiek priėmimui.
Šioje pamokoje RF siųstuvas siunčia dvi vertes į imtuvo pusę: atstumą, išmatuotą naudojant ultragarso jutiklį, ir potenciometro ADC vertę (nuo 0 iki 4096), kuris priskirtas skaičiui nuo (0 iki 100). „ Arduino “ radijo imtuvas bevieliu ryšiu gauna vertes ir atspausdina šias atstumo ir skaičių reikšmes 16x2 LCD ekrane.
Būtini komponentai
- STM32F103C8 mikrovaldiklis
- „Arduino UNO“
- 433 MHz radijo siųstuvas ir imtuvas
- Ultragarsinis jutiklis (HC-SR04)
- 16x2 LCD ekranas
- 10k potenciometras
- Bandomoji Lenta
- Laidų sujungimas
433 MHz radijo imtuvas ir imtuvas)
RF siųstuvo kištukas:
433Mhz radijo siųstuvas |
Smeigtuko aprašymas |
ANT |
Antenos prijungimui |
BND |
BND |
VDD |
Nuo 3,3 iki 5 V |
DUOMENYS |
Čia pateikiami duomenys, kuriuos reikia perduoti imtuvui |
RF imtuvo kištukas:
433 MHz radijo imtuvas |
NAUDOTI |
ANT |
Antenos prijungimui |
BND |
BND |
VDD |
Nuo 3,3 iki 5 V |
DUOMENYS |
Duomenys, kuriuos reikia gauti iš siųstuvo |
CE / DO |
Tai taip pat yra duomenų kaištis |
433 MHz modulio specifikacijos:
- Imtuvo darbinė įtampa: nuo 3 iki 5 V.
- Siųstuvo darbinė įtampa: nuo 3 iki 5 V.
- Veikimo dažnis: 433 MHz
- Perdavimo atstumas: nuo 3 metrų (be antenos) iki 100 metrų (didžiausias)
- Moduliuojanti technika: ASK (amplitudės poslinkio klavišas)
- Duomenų perdavimo greitis: 10Kbps
RF siųstuvo su STM32F103C8 grandinės schema
Grandinės jungtys tarp radijo siųstuvo ir STM32F103C8:
STM32F103C8 |
RF siųstuvas |
5V |
VDD |
BND |
BND |
PA10 |
DUOMENYS |
NC |
ANT |
Grandinės jungtys tarp ultragarso jutiklio ir STM32F103C8:
STM32F103C8 |
Ultragarsinis jutiklis (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Aidas |
BND |
BND |
10k potenciometrą yra prijungtas su STM32F103C8 teikti įvesties analoginiai vertę (nuo 0 iki 3.3V) į ADC pin PA0 iš STM32.
RF imtuvo su „Arduino Uno“ grandinės schema
Grandinės jungtys tarp radijo imtuvo ir „Arduino UNO“:
„Arduino UNO“ |
RF imtuvas |
5V |
VDD |
BND |
BND |
11 |
DUOMENYS |
NC |
ANT |
Grandinės jungtys tarp 16x2 LCD ir „Arduino UNO“:
LCD smeigtuko pavadinimas |
Arduino UNO PIN vardas |
Žemė (Gnd) |
Žemė (G) |
VCC |
5V |
VEE |
Kontrasto kaištis iš potenciometro centro |
„Register Select“ (RS) |
2 |
Skaityti / rašyti (RW) |
Žemė (G) |
Įgalinti (EN) |
3 |
4 duomenų bitas (DB4) |
4 |
5 duomenų bitas (DB5) |
5 |
6 duomenų bitas (DB6) |
6 |
7 duomenų bitas (DB7) |
7 |
LED teigiamas |
5V |
LED neigiamas |
Žemė (G) |
Kodavimas bus trumpai paaiškintas žemiau. Bus dvi eskizo dalys, kur pirmoji dalis bus siųstuvo dalis, o kita - imtuvo dalis. Visi eskizų failai ir darbinis vaizdo įrašai bus pateikti šios pamokos pabaigoje. Norėdami sužinoti daugiau apie RF modulio sąsają su „Arduino Uno“, spustelėkite nuorodą.
STM32F103C8 programavimas bevieliam radijo perdavimui
STM32F103C8 galima užprogramuoti naudojant „Arduino IDE“. FTDI programuotojas ar ST-Link " yra ne reikia įkelti kodą STM32F103C8. Tiesiog prijunkite prie kompiuterio per STM32 USB prievadą ir pradėkite programuoti naudodami „ ARDUINO IDE“. Galite išmokti programuoti savo STM32 „Arduino IDE“ spustelėdami nuorodą.
Siųstuvo skyriuje objekto atstumas „cm“ matuojamas naudojant ultragarso jutiklį, o skaičiaus vertė nuo (0 iki 100) nustatoma naudojant potenciometrą, kuris perduodamas per RF siųstuvą, sujungtą su STM32.
Pirmiausia įtraukiama „Radiohead“ biblioteka, kurią galima atsisiųsti iš čia. Kadangi ši biblioteka naudoja ASK (amplitudės keitimo klavišų techniką) duomenims perduoti ir priimti. Tai labai palengvina programavimą. Biblioteką galite įtraukti į eskizą, eidami į Eskizas-> įtraukti biblioteką-> Pridėti.zip biblioteką.
# įtraukti
Kaip ir šioje siųstuvo pusėje esančioje instrukcijoje, atstumui matuoti naudojamas ultragarso jutiklis, kad būtų apibrėžtas gaidukas ir aido kaiščiai.
#define trigPin PB1 #define echoPin PB0
Toliau RH_ASK bibliotekos objekto pavadinimas nustatomas kaip rf_driver su tokiais parametrais kaip greitis (2000), RX kaištis (PA9) ir TX kaištis (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Toliau deklaruojami šioje programoje reikalingi kintamieji eilutės.
Eilutė perduoti_ skaičius; Stygos perdavimo_distumas; Styginių perdavimas;
Toliau negaliojančioje sąrankoje () inicijuojamas RH_ASK rf_driver objektas.
rf_driver.init ();
Po to gaiduko kaištis nustatomas kaip OUTPUT kaištis, o PA0 (prijungtas prie potenciometro) ir aido kaištis nustatomas kaip INPUT kaištis. Nuoseklus ryšys pradedamas 9600 baudos greičiu.
Serijos pradžia (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Toliau tuščioje kilpoje (), pirmoji potenciometro vertė, kuri yra įvestis. Analoginė įtampa konvertuojama į skaitmeninę vertę (randama ADC vertė). Kadangi STM32 ADC turi 12 bitų skiriamąją gebą. Taigi, skaitmeninė vertė svyruoja nuo (0 iki 4096), kuri susiejama su (0 iki 100).
int analoginis įėjimas = analogRead (PA0); int pwmvalue = žemėlapis (analoginis įvestis, 0,4095,0,100);
Toliau atstumas matuojamas naudojant ultragarso jutiklį, nustatant gaiduką aukštai ir žemai, uždelsus 2 mikrosekundes.
„digitalWrite“ (trigPin, LOW); vėlavimasMikrosekundės (2); „digitalWrite“ (trigPin, HIGH); vėlavimasMikrosekundės (10); „digitalWrite“ (trigPin, LOW);
Aidu kaištis jaučia atspindėtą bangą atgal, tai yra laikas, per kurį atspindėta banga atsispindi atgal, naudojama apskaičiuojant objekto atstumą pagal formulę. Sužinokite daugiau, kaip ultragarso jutiklis apskaičiuoja atstumą, spustelėdami nuorodą.
ilga trukmė = pulseIn (echoPin, HIGH); plūdės atstumas = trukmė * 0,034 / 2;
Dabar tiek duomenų skaičius, tiek išmatuotas atstumas konvertuojami į eilutės duomenis ir saugomi atitinkamuose eilutės kintamuosiuose.
transmit_number = eilutė (pwmvalue); perdavimo_distumas = Stygos (atstumas);
Abi eilutės pridedamos kaip viena eilutė ir saugomos eilutėje, vadinamoje perdavimo ir kableliu „,“ naudojamos dviem eilutėms atskirti.
perduoti = perduoti_pwm + "," + perdavimo_distumas;
Perdavimo eilutė paverčiama simbolių masyvu.
const char * msg = perduoti.c_str ();
Duomenys perduodami ir palaukite, kol jie bus išsiųsti.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Išsiųstos eilutės duomenys taip pat rodomi „Serial Monitor“.
Serial.println (msg);
„Arduino UNO“ programavimas kaip radijo imtuvas
„Arduino UNO“ yra užprogramuota naudojant „Arduino IDE“. Imtuvo skyriuje duomenys, kurie perduodami iš siųstuvo sekcijos ir gaunami iš RF imtuvo modulio, ir gaunami eilutės duomenys yra padalijami į atitinkamus duomenis (atstumą ir skaičių) ir rodomi 16x2 LCD ekrane.
Pažiūrėkime imtuvo kodavimą trumpai:
Kaip ir siųstuvo skyriuje, pirmiausia įtraukiama „RadiohHead“ biblioteka. Kadangi ši biblioteka naudoja ASK (amplitudės keitimo klavišų techniką) duomenims perduoti ir priimti. Tai labai palengvina programavimą.
# įtraukti
Kadangi čia naudojamas LCD ekranas, taip pat yra skystųjų kristalų biblioteka.
# įtraukti
16x2 LCD ekrano kaiščiai, susieti su „Arduino UNO“, yra nurodyti ir deklaruojami naudojant LCD kaip objektą.
„LiquidCrystal lcd“ (2,3,4,5,6,7);
Tada deklaruojami eilutės duomenų kintamieji, skirti saugoti eilutės duomenis.
Stygos str_receive; Eilutė str_number; String str_distance;
Deklaruojamas „Radiohead“ bibliotekos objektas.
RH_ASK rf;
Dabar tuščioje sąrankoje () LCD ekranas nustatytas 16x2 režimu, rodomas ir išvalomas pasveikinimo pranešimas.
lcd.prade (16,2); lcd.print („CIRCUIT DIGEST“); lcd.setCursor (0,1); lcd.print ("RF su STM32"); vėlavimas (5000); lcd.clear ();
Po to inicializuojamas rf objektas.
rf.init ();
Dabar tuštumoje kilpoje () masyvo bufas deklaruojamas dydžiu kaip 7. Kadangi iš siųstuvo siunčiamų duomenų yra 7, įskaitant „,“. Taigi, pakeiskite tai pagal duomenis, kuriuos norite perduoti.
uint8_t buf; uint8_t buflen = sizeof (buf);
Jei eilutė yra rf imtuvo modulyje, if funkcija patikrina dydį ir ją vykdo. Rf.recv () yra naudojamas gauti duomenis.
jei (rf.recv (buf, & buflen))
BUF turi gautą eilutę taip, tada gavo eilutė yra saugomi str_receive styginių kintamasis.
str_receive = String ((char *) buf);
Tai skirta kilpai naudojama padalinti gautą eilutę į dvi, jei aptinka „,“ tarp dviejų eilučių.
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); pertrauka; }
Deklaruojamos dvi simbolių masyvai dviem reikšmėms, o į dvi dalis padalinta eilutė saugoma gerbiamame masyve, paverčiant eilutę į simbolių masyvą.
simbolių eilutė; char distancestring; str_distance.toCharArray (distancingring, 3); str_number.toCharArray (skaičių eilutė, 3);
Po to konvertuokite simbolių masyvą į sveikąjį skaičių naudodami atoi ()
int atstumas = atoi (distancestringring); int skaičius = atoi (skaičių eilutė);
Konvertuojant į sveikas skaičius, atstumas ir skaičius rodomi 16x2 LCD ekrane
lcd.setCursor (0,0); lcd.print ("Skaičius:"); lcd.print (skaičius); lcd.setCursor (0,1); lcd.print ("Atstumas:"); lcd.print (atstumas); lcd.print ("cm");
Įkėlus abu kodus, ty siųstuvą ir imtuvą, į STM32 ir „Arduino UNO“, duomenys, pvz., Skaičius ir atstumas, išmatuotas naudojant STM32, per radijo siųstuvą perduodami į radijo imtuvą, o gautos vertės LCD ekrane rodomos belaidžiu būdu.
STM 32 pagrindu veikiančio radijo siųstuvo ir imtuvo testavimas
1. Kai skaičius yra 0, o objekto atstumas yra 6 cm.
2. Kai skaičius 47 ir objekto atstumas yra 3 cm.