- Komponenter kreves
- 433Mhz RF-sender og mottakermodul)
- Kretsskjema for RF-sender med STM32F103C8
- Kretsdiagram over RF-mottaker med Arduino Uno
- Programmering STM32F103C8 for trådløs RF-overføring
- Programmering av Arduino UNO som RF-mottaker
- Testing av STM 32-basert RF-sender og mottaker
Å lage trådløse prosjekter i innebygd elektronikk blir veldig viktig og nyttig, da det ikke er noen virvlede ledninger overalt som gjør enheten mer praktisk og bærbar. Det er forskjellige trådløse teknologier som Bluetooth, WiFi, 433 MHz RF (radiofrekvens) osv. Hver teknologi har sine egne fordeler og ulemper som kostnad, avstand eller rekkeviddeoverføring, hastighet eller gjennomstrømning osv. I dag vil vi bruke RF-modul med STM32 for å sende og motta dataene trådløst. Hvis du er ny på STM32 Microcontroller, så start med å blinke LED med STM32 ved hjelp av Arduino IDE og sjekk alle andre STM32-prosjekter her.
Bortsett fra dette har vi også brukt RF 433Mhz trådløs modul med andre mikrokontrollere for å bygge noen trådløse kontrollerte prosjekter, for eksempel:
- RF-kontrollerte hvitevarer
- Fjernkontrollerte RF-lysdioder ved bruk av Raspberry Pi
- RF-kontrollert robot
- Grensesnitt RF-modul med Arduino
- PIC til PIC kommunikasjon ved hjelp av RF-modul
Her vil vi grensesnitt en 433MHz RF trådløs modul med STM32F103C8 mikrokontroller. Prosjektet er delt i to deler. Den transmitteren tilkobles med STM32, og mottakeren vil bli integrert med Arduino UNO. Det vil være forskjellige kretsskjema og skisser for både overførende og mottakende del.
I denne opplæringen sender RF- sender to verdier til mottakersiden: avstanden målt ved hjelp av ultralydssensor og potensiometerets ADC-verdi (0 til 4096), som er kartlagt som tallet fra (0 til 100). Den RF-mottaker av Arduino mottar både verdiene og skriver disse avstands og tallverdier i 16x2 LCD display trådløst.
Komponenter kreves
- STM32F103C8 Microcontroller
- Arduino UNO
- 433Mhz RF-sender og mottaker
- Ultralydssensor (HC-SR04)
- 16x2 LCD-skjerm
- 10k potensiometer
- Brettbrett
- Koble ledninger
433Mhz RF-sender og mottakermodul)
RF-sender pinout:
433Mhz RF-sender |
Pin Beskrivelse |
MAUR |
For tilkobling av antenne |
GND |
GND |
VDD |
3,3 til 5V |
DATA |
Data som skal overføres til mottakeren er gitt her |
RF-mottaker Pinout:
433Mhz RF-mottaker |
BRUK |
MAUR |
For tilkobling av antenne |
GND |
GND |
VDD |
3,3 til 5V |
DATA |
Data som skal mottas fra senderen |
CE / DO |
Det er også en datapinne |
433 MHz modulspesifikasjoner:
- Mottaker Driftsspenning: 3V til 5V
- Senders driftsspenning: 3V til 5V
- Driftsfrekvens: 433 MHz
- Overføringsavstand: 3 meter (uten antenne) til 100 meter (maks.)
- Moduleringsteknikk: ASK (amplitude shift keying)
- Dataoverføringshastighet: 10 Kbps
Kretsskjema for RF-sender med STM32F103C8
Kretsforbindelser mellom RF-sender og STM32F103C8:
STM32F103C8 |
RF-sender |
5V |
VDD |
GND |
GND |
PA10 |
DATA |
NC |
MAUR |
Kretsforbindelser mellom ultralydssensor og STM32F103C8:
STM32F103C8 |
Ultralydssensor (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Ekko |
GND |
GND |
Et 10k potensiometer er koblet til STM32F103C8 for å gi inngangs analog verdi (0 til 3,3V) til ADC-stiften PA0 på STM32.
Kretsdiagram over RF-mottaker med Arduino Uno
Kretsforbindelser mellom RF-mottaker og Arduino UNO:
Arduino UNO |
RF-mottaker |
5V |
VDD |
GND |
GND |
11 |
DATA |
NC |
MAUR |
Kretsforbindelser mellom 16x2 LCD og Arduino UNO:
LCD-pinnens navn |
Arduino UNO PIN-navn |
Bakken (GND) |
Bakken (G) |
VCC |
5V |
VEE |
Pin fra Center of Potentiometer for Contrast |
Registrer Velg (RS) |
2 |
Les / skriv (RW) |
Bakken (G) |
Aktiver (EN) |
3 |
Data Bit 4 (DB4) |
4 |
Databit 5 (DB5) |
5 |
Databit 6 (DB6) |
6 |
Databit 7 (DB7) |
7 |
LED-positiv |
5V |
LED negativ |
Bakken (G) |
Kodingen vil bli forklart i korte trekk nedenfor. Det vil være to deler av skissen hvor den første delen vil være senderseksjonen og en annen vil være mottakerseksjonen. Alle skissefiler og arbeidsvideo vil bli gitt på slutten av denne opplæringen. For å lære mer om grensesnitt RF-modul med Arduino Uno, følg lenken.
Programmering STM32F103C8 for trådløs RF-overføring
STM32F103C8 kan programmeres ved hjelp av Arduino IDE. En FTDI-programmerer eller ST-Link er ikke nødvendig for å laste opp koden til STM32F103C8. Bare koble til PC via USB-port på STM32 og start programmering med ARDUINO IDE. Du kan lære å programmere STM32 i Arduino IDE ved å følge lenken.
I senderdelen måles objektets avstand i 'cm' ved hjelp av ultralydssensor og tallverdien fra (0 til 100) innstilles ved hjelp av potensiometer som overføres via RF-sender som er grensesnittet med STM32.
Først er Radiohead-biblioteket inkludert, det kan lastes ned herfra. Siden dette biblioteket bruker ASK (Amplitude Shift Keying Technique) for å overføre og motta data. Dette gjør programmeringen veldig enkel. Du kan inkludere bibliotek i skisse ved å gå inn i Skisse-> inkludere bibliotek-> Legg til.zip-bibliotek.
#inkludere
Som i denne veiledningen på sendersiden brukes en ultralydssensor til å måle avstanden slik at utløseren og ekkopinnene er definert.
#define trigPin PB1 #define echoPin PB0
Deretter settes objektnavnet for RH_ASK-biblioteket som rf_driver med parametrene som hastighet (2000), RX-pin (PA9) og TX-pin (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Deretter erklæres strengvariabelen som trengs i dette programmet.
Streng overføre nummer; Streng overføringsavstand; String overføre;
Neste i tomrumsoppsettet () initialiseres objektet for RH_ASK rf_driver.
rf_driver.init ();
Deretter settes avtrekkerstiften som OUTPUT-stift og PA0 (koblet til potensiometer) og ekkostiften er stilt inn som INPUT-stift. Seriekommunikasjon begynner med overføringshastighet på 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Neste i tomrumsløyfen (), først potensiometerverdien som er inngangen Analog spenning blir konvertert til digital verdi (ADC-verdi blir funnet). Siden ADC av STM32 har 12-biters oppløsning. Så den digitale verdien varierer fra (0 til 4096) som er kartlagt til (0 til 100).
int analoginngang = analogRead (PA0); int pwmvalue = map (analoginngang, 0,4095,0,100);
Deretter måles avstanden ved hjelp av ultralydssensor ved å sette avtrekkeren høyt og lavt med en forsinkelse på 2 mikrosekunder.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Ekkopinnen registrerer den reflekterte bølgen tilbake, det vil si den varigheten som utløst bølge reflekteres tilbake, brukes til å beregne avstanden til objektet ved hjelp av formelen. Lær mer hvordan ultralydssensor beregner avstand, ved å følge lenken.
lang varighet = pulseIn (echoPin, HIGH); flyteavstand = varighet * 0,034 / 2;
Nå konverteres både datanummer og målt avstand til strengdata og lagres i respektive strengvariabler.
transmit_number = String (pwmvalue); transmit_distance = Streng (avstand);
Både strengen legges til som en linje og lagres i strengen kalt send og komma “,” brukes til å skille to strenger.
send = send_pwm + "," + send_distanse;
Sendestrengen konverteres til tegnmatrise.
const char * msg = transmit.c_str ();
Dataene overføres og vent til de blir sendt.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Strengdataene som sendes vises også i Serial Monitor.
Serial.println (msg);
Programmering av Arduino UNO som RF-mottaker
Arduino UNO er programmert ved hjelp av Arduino IDE. I mottakerseksjonen blir dataene som overføres fra senderseksjonen og mottatt av RF-mottaksmodulen og mottatt strengedata delt inn i respektive data (avstand og nummer) og vises i 16x2 LCD-skjerm.
La oss se mottakerkodingen kort:
Som i senderseksjonen er RadiohHead-biblioteket inkludert. Siden dette biblioteket bruker ASK (Amplitude Shift Keying Technique) for å overføre og motta data. Dette gjør programmeringen veldig enkel.
#inkludere
Siden LCD-skjerm brukes her, er også liquidcrystal-biblioteket inkludert.
#inkludere
Og 16x2 LCD-skjermpinner koblet til Arduino UNO er spesifisert og erklært ved hjelp av lcd som objekt.
LiquidCrystal lcd (2,3,4,5,6,7);
Deretter blir strengvariablene for å lagre strengdata deklarert.
String str_receive; Streng str_nummer; Streng str_avstand;
Objektet for Radiohead-biblioteket er erklært.
RH_ASK rf;
Nå i ugyldig oppsett () er LCD-skjermen satt i 16x2-modus og en velkomstmelding vises og tømmes.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF med STM32"); forsinkelse (5000); lcd.clear ();
Etter det initialiseres rf- objektet.
rf.init ();
Nå i tomrumsløyfen () blir Array-buf erklært med størrelse som 7. Da dataene som sendes fra senderen har 7 inkludert “,”. Så endre dette i henhold til dataene som skal overføres.
uint8_t buf; uint8_t buflen = sizeof (buf);
Hvis strengen er tilgjengelig på rf-mottakermodulen, kontrollerer if-funksjonen størrelsen og den utføres. Den rf.recv () blir benyttet for å motta data.
hvis (rf.recv (buf, & buflen))
Den buf har ikke den mottatte strengen så fikk deretter strengen er lagret i en str_receive streng variabel.
str_receive = String ((char *) buf);
Denne for loop brukes til å dele den mottatte strengen i to hvis den oppdager ',' mellom to strenger.
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); gå i stykker; }
To tegnretter for to verdier blir deklarert, og strengen som er delt i to lagres i respektert matrise ved å konvertere streng til tegnmatrise.
nummer nummerstreng; røye distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (nummerstreng, 3);
Etter det konverterer du tegnmatrisen til heltall ved hjelp av atoi ()
int avstand = atoi (distancestring); int tall = atoi (nummerstreng);
Etter konvertering til heltallverdier vises verdiene avstand og nummer i 16x2 LCD-skjerm
lcd.setCursor (0,0); lcd.print ("Number:"); lcd.print (nummer); lcd.setCursor (0,1); lcd.print ("Distance:"); lcd.print (avstand); lcd.print ("cm");
Etter å ha lastet opp både kodene, dvs. sender og mottaker i henholdsvis STM32 og Arduino UNO, overføres dataene som antall og objektavstand målt ved hjelp av STM32 til RF-mottakeren via RF-sender, og mottatte verdier vises trådløst på LCD-skjermen.
Testing av STM 32-basert RF-sender og mottaker
1. Når tallet er 0 og avstanden til objektet er 6 cm.
2. Når nummer 47 og avstanden til objektet er 3 cm.