- Komponenter, der kræves
- 433Mhz RF-sender og modtagermodul)
- Kredsløbsdiagram for RF-sender med STM32F103C8
- Kredsløbsdiagram over RF-modtager med Arduino Uno
- Programmering STM32F103C8 til trådløs RF-transmission
- Programmering af Arduino UNO som RF-modtager
- Test af STM 32-baseret RF-sender og modtager
At lave trådløse projekter i indlejret elektronik bliver meget vigtigt og nyttigt, da der ikke er sammenblandede ledninger overalt, hvilket gør enheden mere praktisk og bærbar. Der er forskellige trådløse teknologier såsom Bluetooth, WiFi, 433 MHz RF (radiofrekvens) osv. Hver teknologi har sine egne fordele og ulemper såsom omkostninger, afstands- eller rækkeviddeoverførsel, hastighed eller kapacitet osv. I dag bruger vi RF-modul med STM32 at sende og modtage dataene trådløst. Hvis du er ny på STM32 Microcontroller, skal du starte med at blinke LED med STM32 ved hjælp af Arduino IDE og kontrollere alle andre STM32-projekter her.
Bortset fra dette har vi også brugt RF 433Mhz trådløst modul med andre mikrocontrollere til at opbygge nogle trådløse kontrollerede projekter, såsom:
- RF-kontrollerede husholdningsapparater
- RF-fjernstyrede LED'er ved hjælp af Raspberry Pi
- RF-styret robot
- Interfacing RF-modul med Arduino
- PIC til PIC kommunikation ved hjælp af RF-modul
Her vil vi interface et 433MHz RF trådløst modul med STM32F103C8 mikrokontroller. Projektet er opdelt i to dele. Den transmitteren være forbundet med STM32 og modtageren vil være forbundet med Arduino UNO. Der vil være forskellige kredsløbsdiagram og skitser for både transmitterende og modtager del.
I denne vejledning sender RF-transmitter to værdier til modtagersiden: afstanden målt ved hjælp af ultralydssensor og potentiometer ADC-værdien (0 til 4096), som er kortlagt som nummer fra (0 til 100). Den RF-modtageren af Arduino modtager både de værdier og udskriver disse afstande og talværdier i 16x2 LCD display trådløst.
Komponenter, der kræves
- STM32F103C8 Microcontroller
- Arduino UNO
- 433Mhz RF-sender og modtager
- Ultralydssensor (HC-SR04)
- 16x2 LCD-skærm
- 10k Potentiometer
- Brødbræt
- Tilslutning af ledninger
433Mhz RF-sender og modtagermodul)
RF-sender pinout:
433Mhz RF-sender |
Pin Beskrivelse |
MYRE |
Til tilslutning af antenne |
GND |
GND |
VDD |
3,3 til 5V |
DATA |
Data, der skal overføres til modtageren, er angivet her |
RF-modtager pinout:
433Mhz RF-modtager |
BRUG |
MYRE |
Til tilslutning af antenne |
GND |
GND |
VDD |
3,3 til 5V |
DATA |
Data, der skal modtages fra senderen |
CE / DO |
Det er også en datapind |
433 MHz modulspecifikationer:
- Modtagerens driftsspænding: 3V til 5V
- Transmitterens driftsspænding: 3V til 5V
- Driftsfrekvens: 433 MHz
- Transmissionsafstand: 3 meter (uden antenne) til 100 meter (maksimum)
- Modulerende teknik: ASK (amplitude shift keying)
- Dataoverførselshastighed: 10 Kbps
Kredsløbsdiagram for RF-sender med STM32F103C8
Kredsløbsforbindelser mellem RF-sender og STM32F103C8:
STM32F103C8 |
RF-sender |
5V |
VDD |
GND |
GND |
PA10 |
DATA |
NC |
MYRE |
Kredsløbsforbindelser mellem ultralydssensor og STM32F103C8:
STM32F103C8 |
Ultralydssensor (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Ekko |
GND |
GND |
Et 10k potentiometer er forbundet med STM32F103C8 for at give input-analog værdi (0 til 3,3V) til ADC-stiften PA0 på STM32.
Kredsløbsdiagram over RF-modtager med Arduino Uno
Kredsløbsforbindelser mellem RF-modtager og Arduino UNO:
Arduino UNO |
RF-modtager |
5V |
VDD |
GND |
GND |
11 |
DATA |
NC |
MYRE |
Kredsforbindelser mellem 16x2 LCD og Arduino UNO:
LCD-pin-navn |
Arduino UNO-pin-navn |
Jord (GND) |
Jord (G) |
VCC |
5V |
VEE |
Stift fra centrum af potentiometer til kontrast |
Registrer Vælg (RS) |
2 |
Læs / skriv (RW) |
Jord (G) |
Aktivér (EN) |
3 |
Data Bit 4 (DB4) |
4 |
Databit 5 (DB5) |
5 |
Databit 6 (DB6) |
6 |
Databit 7 (DB7) |
7 |
LED Positiv |
5V |
LED negativ |
Jord (G) |
Kodningen forklares kort nedenfor. Der vil være to dele af skitsen, hvor den første del vil være transmitter sektion og en anden vil være modtager sektion. Alle skitsefiler og arbejdsvideo gives i slutningen af denne vejledning. For at lære mere om grænseflade RF-modul med Arduino Uno, følg linket.
Programmering STM32F103C8 til trådløs RF-transmission
STM32F103C8 kan programmeres ved hjælp af Arduino IDE. En FTDI-programmør eller ST-Link er ikke nødvendig for at uploade koden til STM32F103C8. Du skal blot oprette forbindelse til pc via USB-porten på STM32 og starte programmeringen med ARDUINO IDE. Du kan lære at programmere din STM32 i Arduino IDE ved at følge linket.
I sendersektionen måles afstanden af objektet i 'cm' ved hjælp af ultralydssensor, og talværdien fra (0 til 100) indstilles ved hjælp af potentiometer, der transmitteres via RF-sender, der er grænseflade med STM32.
Først inkluderes Radiohead-biblioteket, det kan downloades herfra. Da dette bibliotek bruger ASK (Amplitude Shift Keying Technique) til at sende og modtage data. Dette gør programmeringen meget let. Du kan inkludere bibliotek i skitse ved at gå til Skitse-> inkludere bibliotek-> Tilføj.zip-bibliotek.
#omfatte
Som i denne vejledning i sendersiden bruges en ultralydssensor til at måle afstanden, så udløseren og ekkotappene defineres.
#define trigPin PB1 #define echoPin PB0
Dernæst indstilles objektnavnet til RH_ASK-biblioteket som rf_driver med parametrene såsom hastighed (2000), RX-pin (PA9) og TX-pin (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Dernæst erklæres den nødvendige strengvariabel i dette program.
Streng transmittere nummer; Streng transmittere afstand; Streng transmittere;
Dernæst i tomrumsopsætningen () initialiseres objektet til RH_ASK rf_driver.
rf_driver.init ();
Derefter indstilles triggerpinnen som OUTPUT-pin og PA0 (tilsluttet potentiometer) og ekko-pin er indstillet som INPUT-pin. Seriel kommunikation begynder med en baudrate på 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Dernæst i hulrummet (), frst. Potentiometerværdien, der er indgangen, Analog spænding konverteres til digital værdi (ADC-værdi findes). Da ADC af STM32 har 12-bit opløsning. Så den digitale værdi varierer fra (0 til 4096), som er kortlagt til (0 til 100).
int analoginput = analogRead (PA0); int pwmvalue = map (analogindgang, 0,4095,0,100);
Dernæst måles afstanden ved hjælp af ultralydssensor ved at indstille udløseren høj og lav med en forsinkelse på 2 mikrosekunder.
digitalWrite (trigPin, LOW); forsinkelseMikrosekunder (2); digitalWrite (trigPin, HIGH); forsinkelseMikrosekunder (10); digitalWrite (trigPin, LOW);
Ekko-stiften registrerer den reflekterede bølge tilbage, det vil sige den tidsvarighed, som den udløste bølge reflekteres tilbage, bruges til at beregne afstanden for objektet ved hjælp af formlen. Lær mere, hvordan ultralydssensor beregner afstand ved at følge linket.
lang varighed = pulseIn (echoPin, HIGH); flydeafstand = varighed * 0,034 / 2;
Nu konverteres både datanummeret og den målte afstand til strengdata og gemmes i de respektive strengvariabler.
transmit_number = String (pwmvalue); transmit_distance = Streng (afstand);
Begge strenge tilføjes som en linje og lagres i streng kaldet transmittere og komma “,” bruges til at adskille to strenge.
transmitter = send_pwm + "," + send_distance;
Sendestrengen konverteres til tegnarray.
const char * msg = transmittere.c_str ();
Dataene overføres, og vent til de er sendt.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
De sendte strengdata vises også i Serial Monitor.
Serial.println (msg);
Programmering af Arduino UNO som RF-modtager
Arduino UNO er programmeret ved hjælp af Arduino IDE. I modtagersektionen opdeles de data, der transmitteres fra sendersektionen og modtages af RF-modtagermodulet, og de modtagne strengdata i respektive data (afstand og nummer) og vises i 16x2 LCD-displayet.
Lad os se modtagerens kodning kort:
Ligesom i sendersektionen er RadiohHead-biblioteket først inkluderet. Da dette bibliotek bruger ASK (Amplitude Shift Keying Technique) til at sende og modtage data. Dette gør programmeringen meget let.
#omfatte
Da LCD-skærm bruges her, er også liquidcrystal-biblioteket inkluderet.
#omfatte
Og 16x2 LCD-skærmstifter forbundet med Arduino UNO specificeres og erklæres ved hjælp af LCD som objekt.
LiquidCrystal lcd (2,3,4,5,6,7);
Dernæst erklæres strengvariablerne til lagring af strengdata.
String str_receive; Streng str_nummer; Streng str_distance;
Objektet til Radiohead-biblioteket erklæres.
RH_ASK rf;
Nu i tomrumsopsætningen () er LCD-displayet indstillet i 16x2-tilstand, og en velkomstmeddelelse vises og ryddes.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF med STM32"); forsinkelse (5000); lcd.clear ();
Derefter initialiseres rf- objektet.
rf.init ();
Nu i hulrummet () erklæres Array buf med størrelse som 7. Da dataene sendt fra senderen har 7 inklusive “,”. Så skift dette i henhold til de data, der skal transmitteres.
uint8_t buf; uint8_t buflen = sizeof (buf);
Hvis strengen er tilgængelig på rf-modtagermodulet, kontrolleres if-funktionen størrelsen, og den udføres. Den rf.recv () anvendes til at modtage data.
hvis (rf.recv (buf, & buflen))
Den buf har den modtagne snor så derefter fik streng er gemt i en str_receive strengvariabel.
str_receive = String ((char *) buf);
Denne for loop bruges til at opdele den modtagne streng i to, hvis den registrerer ',' imellem to strenge.
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); pause; }
To char-arrays for to værdier erklæres, og den streng, der er opdelt i to, gemmes i respekteret array ved at konvertere streng til character array.
nummer nummerstreng; rødrød distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (talstreng, 3);
Derefter konverterer tegnarrayet til heltal ved hjælp af atoi ()
int afstand = atoi (distancestring); int antal = atoi (nummerstreng);
Efter konvertering til heltalværdier vises værdierne afstand og antal i 16x2 LCD display
lcd.setCursor (0,0); lcd.print ("Number:"); lcd.print (nummer); lcd.setCursor (0,1); lcd.print ("Distance:"); lcd.print (afstand); lcd.print ("cm");
Efter uploaden af begge koder, dvs. sender og modtager i henholdsvis STM32 og Arduino UNO, overføres data såsom antal og objektafstand målt ved hjælp af STM32 til RF-modtageren via RF-sender, og de modtagne værdier vises trådløst på LCD-displayet.
Test af STM 32-baseret RF-sender og modtager
1. Når tallet er 0 og afstanden til objektet er 6 cm.
2. Når nummer 47 og afstanden til objektet er 3 cm.