- Tarvittavat komponentit
- 433 MHz RF-lähetin ja vastaanotinmoduuli)
- STM32F103C8: n RF-lähettimen piirikaavio
- RF-vastaanottimen piirikaavio Arduino Unolla
- STM32F103C8: n ohjelmointi langatonta RF-lähetystä varten
- Arduino UNO: n ohjelmointi RF-vastaanottimeksi
- STM 32 -pohjaisen RF-lähettimen ja -vastaanottimen testaus
Langattomien projektien tekeminen sulautetusta elektroniikasta on erittäin tärkeää ja hyödyllistä, koska kaikkialla ei ole sekaisin johtoja, jotka tekevät laitteesta kätevämmän ja kannettavan. On olemassa useita langattomia tekniikoita, kuten Bluetooth, WiFi, 433 MHz RF (radiotaajuus) jne. Jokaisella tekniikalla on omat etunsa ja haittansa, kuten kustannukset, etäisyyden tai kantaman siirto, nopeus tai läpäisykyky jne. Tänään käytämme RF-moduulia STM32: n kanssa. lähettää ja vastaanottaa tietoja langattomasti. Jos olet uusi STM32-mikrokontrolleri, aloita sitten vilkkuvasta LED-valosta STM32: lla Arduino IDE: n avulla ja tarkista kaikki muut STM32-projektit täältä.
Tämän lisäksi olemme käyttäneet myös langatonta RF 433Mhz -moduulia muiden mikrokontrollerien kanssa rakentamaan joitain langattomasti ohjattuja projekteja, kuten:
- RF-ohjatut kodinkoneet
- RF-kauko-ohjattavat LED-valot Raspberry Pi -tekniikalla
- RF-ohjattu robotti
- RF-moduulin ja Arduinon yhdistäminen
- PIC-PIC-viestintä RF-moduulin avulla
Tässä liitämme langattoman 433 MHz: n langattoman moduulin STM32F103C8-mikrokontrolleriin. Projekti on jaettu kahteen osaan. Lähetin on rajapinta STM32 ja vastaanotin on liitetty Arduino UNO. Sekä lähetettävälle että vastaanottavalle osalle tulee olemaan erilainen piirikaavio ja luonnokset.
Tässä opetusohjelmassa RF-lähetin lähettää kaksi arvoa vastaanottimen puolelle: ultraäänianturilla mitatun etäisyyden ja potentiometrin ADC-arvon (0-4096), joka on kartoitettu numerona välillä (0-100). RF-vastaanotin Arduino vastaanottaa sekä arvot ja tulostaa ne etäisyys ja lukumäärä arvoja 16x2 LCD-näyttö langattomasti.
Tarvittavat komponentit
- STM32F103C8-mikrokontrolleri
- Arduino UNO
- 433 MHz RF-lähetin ja vastaanotin
- Ultraäänianturi (HC-SR04)
- 16x2 LCD-näyttö
- 10k potentiometri
- Leipälauta
- Johtojen liittäminen
433 MHz RF-lähetin ja vastaanotinmoduuli)
RF-lähettimen pinout:
433 MHz RF-lähetin |
Nastan kuvaus |
MUURAHAINEN |
Antennien liittämiseen |
GND |
GND |
VDD |
3,3 - 5 V |
TIEDOT |
Vastaanottimelle lähetettävät tiedot annetaan tässä |
RF-vastaanottimen pinout:
433 MHz RF-vastaanotin |
KÄYTTÄÄ |
MUURAHAINEN |
Antennien liittämiseen |
GND |
GND |
VDD |
3,3 - 5 V |
TIEDOT |
Lähettimeltä vastaanotettavat tiedot |
CE / DO |
Se on myös Data-tappi |
433 MHz -moduulin tekniset tiedot:
- Vastaanottimen käyttöjännite: 3 V - 5 V
- Lähettimen käyttöjännite: 3 V - 5 V
- Toimintataajuus: 433 MHz
- Lähetysetäisyys: 3 metriä (ilman antennia) - 100 metriä (enintään)
- Moduloiva tekniikka: ASK (amplitudinsiirtoavain)
- Tiedonsiirtonopeus: 10Kbps
STM32F103C8: n RF-lähettimen piirikaavio
Piiriliitännät RF-lähettimen ja STM32F103C8 välillä:
STM32F103C8 |
RF-lähetin |
5 V |
VDD |
GND |
GND |
PA10 |
TIEDOT |
NC |
MUURAHAINEN |
Piiriliitännät ultraäänianturin ja STM32F103C8 välillä:
STM32F103C8 |
Ultraäänianturi (HC-SR04) |
5 V |
VCC |
PB1 |
Trig |
PB0 |
Kaiku |
GND |
GND |
10k potentiometri on yhdistetty STM32F103C8 tarjota tulo Analoginen arvo (0 3.3V) ADC pin PA0 on STM32.
RF-vastaanottimen piirikaavio Arduino Unolla
Piiriliitännät RF-vastaanottimen ja Arduino UNO: n välillä:
Arduino UNO |
RF-vastaanotin |
5 V |
VDD |
GND |
GND |
11 |
TIEDOT |
NC |
MUURAHAINEN |
Piiriliitännät 16x2 LCD: n ja Arduino UNO: n välillä:
LCD-nastan nimi |
Arduino UNO -nimi |
Maa (Gnd) |
Maa (G) |
VCC |
5 V |
VEE |
Tappi potentiometrin keskiosasta kontrastia varten |
Rekisteröinti Valitse (RS) |
2 |
Lue / kirjoita (RW) |
Maa (G) |
Ota käyttöön (EN) |
3 |
Databitti 4 (DB4) |
4 |
Databitti 5 (DB5) |
5 |
Databitti 6 (DB6) |
6 |
Databitti 7 (DB7) |
7 |
LED positiivinen |
5 V |
LED negatiivinen |
Maa (G) |
Koodaus selitetään lyhyesti alla. Luonnoksessa on kaksi osaa, joista ensimmäinen osa on lähetinosa ja toinen on vastaanotinosa. Kaikki luonnostiedostot ja toimiva video annetaan tämän opetusohjelman lopussa. Saat lisätietoja RF-moduulin liittämisestä Arduino Unoon seuraamalla linkkiä.
STM32F103C8: n ohjelmointi langatonta RF-lähetystä varten
STM32F103C8 voidaan ohjelmoida Arduino IDE: llä. FTDI ohjelmoija tai ST-Link ei tarvita ladata koodin STM32F103C8. Yhdistä vain tietokoneeseen STM32: n USB-portin kautta ja aloita ohjelmointi ARDUINO IDE: llä. Voit oppia STM32: n ohjelmoinnin Arduino IDE: ssä seuraamalla linkkiä.
Lähetinosassa kohteen etäisyys cm: ssä mitataan ultraäänianturilla ja numeroarvo (0-100) asetetaan potentiometrillä, joka lähetetään STM32: n kanssa liitetyn RF-lähettimen kautta.
Ensin mukana on Radiohead-kirjasto, jonka voi ladata täältä. Koska tämä kirjasto käyttää ASK: ta (Amplitude Shift Keying Technique) tiedonsiirtoon ja vastaanottamiseen. Tämä tekee ohjelmoinnista erittäin helppoa. Voit sisällyttää kirjaston luonnokseen siirtymällä kohtaan Luonnos-> sisälly kirjasto-> Lisää.zip-kirjasto.
#sisältää
Kuten tässä lähetinpuolen oppaassa, ultraäänianturia käytetään etäisyyden mittaamiseen, jotta liipaisin ja kaiutapit määritetään.
#define trigPin PB1 #define echoPin PB0
Seuraavaksi RH_ASK-kirjaston objektin nimi asetetaan rf_driver-parametreiksi, kuten nopeus (2000), RX-tappi (PA9) ja TX-tappi (PA10).
RH_ASK rf_ajuri (2000, PA9, PA10);
Seuraavaksi tässä ohjelmassa tarvittavat merkkijonomuuttujat ilmoitetaan.
Merkkijono lähetysnumero; Merkkijono lähetysetäisyys; Merkkijono lähettää;
Seuraavaksi tyhjässä asetuksessa () RH_ASK rf_driver -objekti alustetaan.
rf_driver.init ();
Tämän jälkeen liipaisintappi asetetaan OUTPUT-nastaksi ja PA0 (kytketty potentiometriin) ja kaiun tappi asetetaan INPUT-nastaksi. Sarjaliikenne alkaa baudinopeudella 9600.
Sarjan alku (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Seuraavaksi tyhjiösilmukassa (), ensi potentiometrin arvo, joka on tulo. Analoginen jännite muunnetaan digitaaliseksi arvoksi (ADC-arvo löytyy). Koska STM32: n ADC: llä on 12-bittinen tarkkuus. Joten digitaalinen arvo vaihtelee välillä (0-4096), joka on kartoitettu (0-100).
int analogitulo = analogRead (PA0); int pwmvalue = kartta (analogitulo, 0,4095,1,100);
Seuraavaksi etäisyys mitataan ultraäänianturilla asettamalla liipaisin korkealle ja matalalle 2 mikrosekunnin viiveellä.
digitalWrite (trigPin, LOW); viive mikrosekuntia (2); digitalWrite (trigPin, HIGH); viive mikrosekuntia (10); digitalWrite (trigPin, LOW);
Kaiutappi tunnistaa heijastuneen aallon takaisin, toisin sanoen aikaa, jonka laukaisu aalto heijastuu takaisin, käytetään laskettaessa kohteen etäisyys kaavan avulla. Lisätietoja linkistä seuraa, kuinka ultraäänianturi laskee etäisyyden.
pitkä kesto = pulssi (echoPin, HIGH); kellutusetäisyys = kesto * 0,034 / 2;
Nyt sekä datan numero että mitattu etäisyys muunnetaan merkkijonodataksi ja tallennetaan vastaaviin merkkijonomuuttujiin.
lähetysnumero = Merkkijono (pwmvalue); transmit_distance = Merkkijono (etäisyys);
Molemmat merkkijonot lisätään yhtenä rivinä ja tallennetaan merkkijonoon nimeltä lähetys ja pilkku “,” käytetään erottamaan kaksi merkkijonoa.
lähetys = lähetys_pwm + "," + lähetysetäisyys;
Lähetysmerkkijono muunnetaan merkkitaulukoksi.
const char * msg = lähetys.c_str ();
Tiedot lähetetään ja odota, kunnes ne lähetetään.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Lähetetyt merkkijonotiedot näkyvät myös Serial Monitorissa.
Serial.println (msg);
Arduino UNO: n ohjelmointi RF-vastaanottimeksi
Arduino UNO on ohjelmoitu Arduino IDE: n avulla. Vastaanotinosassa lähetinosasta lähetetty ja RF-vastaanotinmoduulin vastaanottama data ja vastaanotettu merkkijonodata jaetaan vastaaviin tietoihin (etäisyys ja numero) ja näytetään 16x2 LCD-näytössä.
Katsotaanpa vastaanottimen koodaus lyhyesti:
Kuten lähetinosassa, ensin mukana on RadiohHead-kirjasto. Koska tämä kirjasto käyttää ASK: ta (Amplitude Shift Keying Technique) tiedonsiirtoon ja vastaanottamiseen. Tämä tekee ohjelmoinnista erittäin helppoa.
#sisältää
Koska tässä käytetään LCD-näyttöä, mukana on myös nestekidekirjasto.
#sisältää
Ja Arduino UNO -laitteeseen liitetyt 16x2 LCD -näytönastat määritetään ja ilmoitetaan käyttämällä lcd: tä objektina.
LiquidCrystal lcd (2,3,4,5,6,7);
Seuraavaksi merkkijonodatamuuttujat merkitään merkkijonotietoihin.
Merkkijono str_receive; Merkkijono str_number; Merkkijono str_distance;
Radiohead-kirjaston objekti on ilmoitettu.
RH_ASK rf;
Nyt tyhjässä asetuksessa () LCD-näyttö on asetettu 16x2-tilaan ja tervetuloviesti näytetään ja tyhjennetään.
lcd-alku (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF ja STM32"); viive (5000); lcd.clear ();
Sen jälkeen rf- objekti alustetaan.
rf.init ();
Nyt tyhjässä silmukassa () Array buf ilmoitetaan kooltaan 7. Koska lähettimeltä lähetetyissä tiedoissa on 7, mukaan lukien “,”. Joten vaihda tämä lähetettävien tietojen mukaan.
uint8_t buf; uint8_t buflen = sizeof (buf);
Jos merkkijono on käytettävissä RF-vastaanotinmoduulissa, if-toiminto tarkistaa koon ja se suoritetaan. Rf.recv () käytetään vastaanottamaan dataa.
jos (rf.recv (buf, & buflen))
Buf on vastaanotetun merkkijonon niin silloin vastaanotettu merkkijono on tallennettu str_receive merkkijono muuttuja.
str_receive = Merkkijono ((char *) buf);
Tämä on silmukka käytetään jakamaan vastaanotetun merkkijonon kahdeksi, jos se havaitsee '' in-kahden jousille.
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); tauko; }
Kaksi arvoryhmää kahdelle arvolle ilmoitetaan ja kahdeksi jaettu merkkijono tallennetaan kunnioitettuun matriisiin muuntamalla merkkijono merkkimatriisiksi.
merkkijono; char-etäisyys; str_distance.toCharArray (distancestring, 3); str_numero.toCharArray (numero, 3);
Muunna sen jälkeen merkistö taulukosta kokonaisluvuksi käyttämällä atoi ()
int etäisyys = atoi (distancestring); int-numero = atoi (numerosarja);
Muunnettuaan kokonaislukuarvoiksi arvot etäisyys ja numero näytetään 16x2 LCD-näytössä
lcd.setCursor (0,0); lcd.print ("Luku:"); lcd.print (numero); lcd.setCursor (0,1); lcd.print ("Etäisyys:"); lcd.print (etäisyys); lcd.print ("cm");
Kun molemmat koodit eli lähetin ja vastaanotin on ladattu STM32: een ja Arduino UNO: han, STM32: lla mitatut tiedot, kuten numero ja objektietäisyys, lähetetään RF-vastaanottimeen RF-lähettimen kautta ja vastaanotetut arvot näytetään LCD-näytössä langattomasti.
STM 32 -pohjaisen RF-lähettimen ja -vastaanottimen testaus
1. Kun numero on 0 ja kohteen etäisyys on 6 cm.
2. Kun numero 47 ja kohteen etäisyys on 3 cm.