- Szükséges alkatrészek
- 433 MHz RF adó és vevő modul)
- Az RF adó STM32F103C8 kapcsolási rajza
- Az Arduino Uno RF vevő áramköri rajza
- STM32F103C8 programozása vezeték nélküli rádiófrekvenciás átvitelhez
- Az Arduino UNO programozása RF vevőként
- STM 32 alapú RF adó és vevő tesztelése
Vezeték nélküli projektek készítése a beágyazott elektronikában nagyon fontossá és hasznossá válik, mivel nincsenek szétzúzott vezetékek, amelyek a készüléket kézreállóbbá és hordozhatóbbá teszik. Különféle vezeték nélküli technológiák léteznek, mint például Bluetooth, WiFi, 433 MHz RF (rádiófrekvencia) stb. Minden technológiának megvannak a maga előnyei és hátrányai, például a költség, a távolság vagy a hatótávolság átvitele, a sebesség vagy az áteresztőképesség stb. Ma az RF modult fogjuk használni az STM32-vel hogy vezeték nélkül küldje és fogadja az adatokat. Ha még nem ismeri az STM32 mikrovezérlőt, akkor kezdje el a villogó LED-et az STM32-vel az Arduino IDE használatával, és itt ellenőrizze az összes többi STM32 projektet.
Ezen kívül az RF 433Mhz vezeték nélküli modult használtuk más mikrovezérlőkkel néhány vezeték nélküli vezérlésű projekt felépítéséhez, például:
- RF vezérlésű háztartási gépek
- RF távirányítós LED-ek a Raspberry Pi használatával
- RF vezérelt robot
- Összekötő RF modul az Arduinóval
- PIC-PIC kommunikáció RF modul használatával
Itt összekapcsolunk egy 433 MHz-es RF vezeték nélküli modult az STM32F103C8 mikrovezérlővel. A projekt két részre oszlik. Az adó interfész az STM32, a vevő pedig az Arduino UNO interfész lesz. Lesz különböző kapcsolási rajz és vázlat engedély adására is befogadó rész.
Ebben az oktatóanyagban az RF adó két értéket küld a vevő oldalára: az ultrahangos érzékelővel mért távolságot és a potenciométer ADC értékét (0 és 4096 között), amely számként (0 és 100) van leképezve. Az Arduino RF vevője mind az értékeket megkapja, mind a távolság- és számértékeket vezeték nélkül kinyomtatja a 16x2 LCD-kijelzőn.
Szükséges alkatrészek
- STM32F103C8 mikrovezérlő
- Arduino UNO
- 433Mhz RF adó és vevő
- Ultrahangos érzékelő (HC-SR04)
- 16x2 LCD kijelző
- 10k potenciométer
- Kenyérlemez
- Vezetékek csatlakoztatása
433 MHz RF adó és vevő modul)
RF adó kivezetése:
433Mhz RF adó |
PIN leírás |
HANGYA |
Antenna csatlakoztatásához |
GND |
GND |
VDD |
3,3 - 5 V |
ADAT |
A vevőnek továbbítandó adatokat itt adjuk meg |
RF vevő kivezetése:
433Mhz RF vevő |
HASZNÁLAT |
HANGYA |
Antenna csatlakoztatásához |
GND |
GND |
VDD |
3,3 - 5 V |
ADAT |
Az adótól kapandó adatok |
CE / DO |
Ez egyben Data pin |
433 MHz-es modul specifikációi:
- A vevő üzemi feszültsége: 3 V és 5 V között
- Az adó működési feszültsége: 3 V és 5 V között
- Működési frekvencia: 433 MHz
- Átviteli távolság: 3 méter (antenna nélkül) - 100 méter (maximum)
- Moduláló technika: ASK (amplitúdóeltolásos billentyűzet)
- Adatátviteli sebesség: 10Kbps
Az RF adó STM32F103C8 kapcsolási rajza
Áramköri kapcsolatok az RF adó és az STM32F103C8 között:
STM32F103C8 |
RF adó |
5V |
VDD |
GND |
GND |
PA10 |
ADAT |
NC |
HANGYA |
Áramköri kapcsolatok az ultrahangos érzékelő és az STM32F103C8 között:
STM32F103C8 |
Ultrahangos érzékelő (HC-SR04) |
5V |
VCC |
PB1 |
Kerékkötő |
PB0 |
Visszhang |
GND |
GND |
A 10k potenciométer van kötve a STM32F103C8 hogy bemeneti analóg értéke (0 3,3 V), hogy az ADC pin PA0 a STM32.
Az Arduino Uno RF vevő áramköri rajza
Áramköri kapcsolatok az RF vevő és az Arduino UNO között:
Arduino UNO |
RF vevő |
5V |
VDD |
GND |
GND |
11. |
ADAT |
NC |
HANGYA |
Áramköri kapcsolatok a 16x2 LCD és az Arduino UNO között:
LCD tű neve |
Arduino UNO PIN neve |
Föld (Gnd) |
Föld (G) |
VCC |
5V |
VEE |
Tű a potenciométer közepétől a kontraszthoz |
Register Select (RS) |
2 |
Olvasás / írás (RW) |
Föld (G) |
Engedélyezés (EN) |
3 |
4. adatbit (DB4) |
4 |
5. adatbit (DB5) |
5. |
6. adatbit (DB6) |
6. |
7. adatbit (DB7) |
7 |
LED pozitív |
5V |
LED negatív |
Föld (G) |
A kódolást az alábbiakban röviden ismertetjük. A vázlatnak két része lesz, ahol az első rész az adó rész, a másik pedig a vevő rész lesz. Az összes vázlatfájl és a működő videó az oktatóanyag végén található. Ha többet szeretne megtudni az RF modul Arduino Uno-val való összekapcsolásáról, kövesse a linket.
STM32F103C8 programozása vezeték nélküli rádiófrekvenciás átvitelhez
Az STM32F103C8 az Arduino IDE segítségével programozható. A kód STM32F103C8-ba történő feltöltéséhez nincs szükség FTDI programozóra vagy ST-Linkre. Egyszerűen csatlakozzon a számítógéphez az STM32 USB portján keresztül, és kezdje el a programozást az ARDUINO IDE segítségével. A linket követve megtanulhatja az STM32 programozását az Arduino IDE alkalmazásban.
Az adó szakaszban a tárgy cm-ben kifejezett távolságát ultrahangos érzékelővel mérik, és a számértéket (0 és 100) között állítják be a potenciométerrel, amelyet az STM32-hez csatlakozó RF adón keresztül továbbítanak.
Először a Radiohead könyvtár szerepel, innen letölthető. Mivel ez a könyvtár az ASK-t (Amplitude Shift Keying Technique) használja az adatok továbbítására és fogadására. Ez nagyon megkönnyíti a programozást. A vázlatba felveheti a könyvtárat, ha belép a Sketch-> include library-> Add.zip library könyvtárba.
#include
Ahogy ebben az útmutatóban az adó oldalán, ultrahangos érzékelőt használnak a távolság mérésére, így meghatározzák a ravaszt és a visszhangcsapokat.
#define trigPin PB1 #define echoPin PB0
Ezután az RH_ASK könyvtár objektumnevét rf_driver-ként állítjuk be olyan paraméterekkel, mint a sebesség (2000), az RX tű (PA9) és a TX tű (PA10).
RH_ASK rf_vezérlő (2000, PA9, PA10);
Ezután a programban szükséges Strings változót deklaráljuk.
Karakterlánc továbbítási_szám; Karakterlánc átviteli távolság; Húr továbbítása;
Ezután a void setup () mezőben az RH_ASK rf_driver objektuma inicializálásra kerül.
rf_driver.init ();
Ezt követően a ravasztüskét OUTPUT-tűnek, a PA0-t (a potenciométerhez csatlakoztatva) és az echo-tűt INPUT-tűnek állítják be. A soros kommunikáció 9600 baud sebességgel kezdődik.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Ezután a void ciklusban () először a potenciométer értékét, amely a bemenet, az analóg feszültséget digitális értékre konvertáljuk (ADC értéket találunk). Mivel az STM32 ADC-je 12 bites felbontással rendelkezik. Tehát a digitális érték (0 és 4096) között változik, amely (0 és 100) között van feltérképezve.
int analóg bemenet = analogRead (PA0); int pwmvalue = térkép (analóg bemenet, 0,4095,0,100);
Ezután a távolságot ultrahangos érzékelővel mérjük meg úgy, hogy a ravaszt 2 mikroszekundum késéssel állítsuk magasra és alacsonyra.
digitalWrite (trigPin, LOW); késleltetés mikroszekundum (2); digitalWrite (trigPin, HIGH); késleltetés mikroszekundum (10); digitalWrite (trigPin, LOW);
Az echo pin érzékeli a visszavert hullámot, vagyis azt az időtartamot használják fel, amelyre a kiváltott hullám visszaverődik, az objektum távolságának kiszámításához a képlet segítségével. További információ arról, hogy az ultrahangos érzékelő hogyan számítja ki a távolságot, a linkre kattintva.
hosszú időtartam = pulseIn (echoPin, HIGH); úszó távolság = időtartam * 0,034 / 2;
Most mind az adatszámot, mind a mért távolságot string-adatokká konvertálja, és a megfelelő karakterlánc-változókban tárolja.
transmit_number = Karakterlánc (pwmvalue); transmit_distance = Karakterlánc (távolság);
Mindkét karakterlánc egy sorként kerül hozzáadásra, és a továbbítás és az vesszővel ellátott „,” vesszőben tárolódik két karakterlánc elválasztására.
továbbít = adás_pwm + "," + adás távolsága;
Az átvitt karakterlánc karaktertömbökké alakul.
const char * msg = transmit.c_str ();
Az adatokat továbbítják, és várják, amíg el nem küldik.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Az elküldött karakterláncadatok a Serial Monitoron is megjelennek.
Soros.println (msg);
Az Arduino UNO programozása RF vevőként
Az Arduino UNO programozása az Arduino IDE használatával történik. A vevő szakaszban az adó részről továbbított és az RF vevő modul által fogadott adatok, valamint a kapott string adatok a megfelelő adatokra (távolság és szám) vannak felosztva, és megjelennek a 16x2 LCD kijelzőn.
Lássuk röviden a vevő kódolását:
Az adó részhez hasonlóan először a RadiohHead könyvtár is szerepel benne. Mivel ez a könyvtár az ASK-t (Amplitude Shift Keying Technique) használja az adatok továbbítására és fogadására. Ez nagyon megkönnyíti a programozást.
#include
Mivel itt LCD kijelzőt használnak, így a folyadékkristály könyvtár is benne van.
#include
Az Arduino UNO-val összekapcsolt 16x2 LCD-kijelző csapok pedig meg vannak határozva és deklarálva az lcd objektumként.
LiquidCrystal lcd (2,3,4,5,6,7);
Ezután a karakterlánc-adatok tárolására szolgáló string-változókat deklaráljuk.
String str_receive; Karakterlánc str_number; Karakterlánc str_distance;
A Radiohead könyvtár objektuma deklarálva van.
RH_ASK rf;
Most az érvénytelen beállításban () az LCD kijelző 16x2-es módban van, és üdvözlő üzenet jelenik meg, és törlődik.
lcdbegin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF STM32-vel"); késés (5000); lcd.clear ();
Ezt követően az rf objektum inicializálódik.
rf.init ();
Most a void ciklusban () az Array buf 7-es méretben van deklarálva. Mivel az adóból küldött adatok 7-nek tartalmazzák a „,” -t. Tehát változtassa meg ezt a továbbítandó adatoknak megfelelően.
uint8_t buf; uint8_t buflen = sizeof (buf);
Ha a karakterlánc elérhető az rf vevő modulnál, az if függvény ellenőrzi a méretet és végrehajtja. Az rf.recv () az adatok fogadására szolgál.
if (rf.recv (buf, & buflen))
A buf rendelkezik a kapott karakterlánccal, így a kapott karakterlánc egy str_receive karakterlánc változóban tárolódik.
str_receive = Karakterlánc ((char *) buf);
Ez a hurok esetén a fogadott karakterlánc két részre osztására szolgál, ha a két karakterlánc között észleli a ',' karaktereket.
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); szünet; }
Két érték két char tömbjét deklaráljuk, és a két részre osztott karakterláncot a tiszteletben álló tömbben tároljuk, a karakterlánccá alakítva.
char-karakterlánc; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (számhúr, 3);
Ezt követően konvertálja a karaktertömböt egész számra az atoi () használatával
int távolság = atoi (distancestringing); int szám = atoi (számhúr);
Egész értékekké történő átalakítást követően a távolság és a szám megjelenik a 16x2 LCD kijelzőn
lcd.setCursor (0,0); lcd.print ("Szám:"); lcd.print (szám); lcd.setCursor (0,1); lcd.print ("Távolság:"); lcd.print (távolság); lcd.print ("cm");
A kódok, azaz az adó és a vevő feltöltése után az STM32-be, illetve az Arduino UNO-ba az adatokat, például az STM32 segítségével mért számot és objektum távolságot, az RF adó-n keresztül továbbítják az RF vevőnek, és a kapott értékeket vezeték nélkül jelzik az LCD kijelzőn.
STM 32 alapú RF adó és vevő tesztelése
1. Ha a szám 0-nál van, és az objektum távolsága 6 cm.
2. Ha a 47-es szám és az objektum távolsága 3 cm.