- Components necessaris
- Mòdul de transmissor i receptor de RF de 433 MHz)
- Diagrama de circuits del transmissor de RF amb STM32F103C8
- Diagrama de circuits del receptor de RF amb Arduino Uno
- Programació STM32F103C8 per a transmissió de RF sense fils
- Programació Arduino UNO com a receptor de RF
- Provant transmissor i receptor de RF basats en STM 32
Fer projectes sense fils a l'electrònica incrustada esdevé molt important i útil, ja que no hi ha cables confusos a tot arreu, cosa que fa que el dispositiu sigui més pràctic i portàtil. Hi ha diverses tecnologies sense fils com Bluetooth, WiFi, RF (radiofreqüència) de 433 MHz, etc. Cada tecnologia té els seus propis avantatges i desavantatges, com ara la transferència de cost, distància o abast, velocitat o rendiment, etc. Avui utilitzarem el mòdul RF amb STM32 per enviar i rebre les dades sense fils. Si no coneixeu el microcontrolador STM32, comenceu amb el LED intermitent amb STM32 mitjançant Arduino IDE i comproveu aquí la resta de projectes STM32.
A part d'això, també hem utilitzat el mòdul sense fils RF 433Mhz amb altres microcontroladors per construir alguns projectes controlats sense fils, com ara:
- Electrodomèstics controlats per RF
- LEDs controlats a distància mitjançant RF mitjançant Raspberry Pi
- Robot controlat per RF
- Interfície del mòdul RF amb Arduino
- Comunicació PIC a PIC mitjançant mòdul RF
Aquí interfacearem un mòdul sense fils RF de 433 MHz amb microcontrolador STM32F103C8. El projecte es divideix en dues parts. El transmissor s’interfacarà amb STM32 i el receptor s’interfacarà amb Arduino UNO. Hi haurà diferents esquemes de circuit i esbossos tant per a la part de transmissió com de recepció.
En aquest tutorial, el transmissor de RF envia dos valors al costat del receptor: la distància mesurada mitjançant un sensor d’ultrasons i el valor ADC del potenciòmetre (0 a 4096), que s’assigna com a número de (0 a 100). El receptor de RF d’Arduino rep els valors i imprimeix aquests valors de distància i número en una pantalla LCD de 16x2 sense fils.
Components necessaris
- Microcontrolador STM32F103C8
- Arduino UNO
- Transmissor i receptor de RF de 433 MHz
- Sensor d'ultrasons (HC-SR04)
- Pantalla LCD de 16x2
- Potenciòmetre de 10 k
- Taula de pa
- Connexió de cables
Mòdul de transmissor i receptor de RF de 433 MHz)

Pinout del transmissor de RF:
|
Transmissor de RF de 433 MHz |
Descripció del pin |
|
FORMIGA |
Per connectar l'antena |
|
GND |
GND |
|
VDD |
3,3 a 5V |
|
DADES |
Les dades que es transmetran al receptor es donen aquí |
Pinout del receptor de RF:
|
Receptor de RF de 433 MHz |
ÚS |
|
FORMIGA |
Per connectar l'antena |
|
GND |
GND |
|
VDD |
3,3 a 5V |
|
DADES |
Dades que es reben del transmissor |
|
CE / DO |
També és un pin de dades |
Especificacions del mòdul de 433 MHz:
- Voltatge de funcionament del receptor: 3V a 5V
- Voltatge de funcionament del transmissor: 3V a 5V
- Freqüència de funcionament: 433 MHz
- Distància de transmissió: de 3 metres (sense antena) a 100 metres (màxima)
- Tècnica de modulació: ASK (teclat de desplaçament d’amplitud)
- Velocitat de transmissió de dades: 10Kbps
Diagrama de circuits del transmissor de RF amb STM32F103C8


Connexions de circuits entre transmissor de RF i STM32F103C8:
|
STM32F103C8 |
Transmissor de RF |
|
5V |
VDD |
|
GND |
GND |
|
PA10 |
DADES |
|
NC |
FORMIGA |
Connexions de circuits entre el sensor d'ultrasons i el STM32F103C8:
|
STM32F103C8 |
Sensor d'ultrasons (HC-SR04) |
|
5V |
VCC |
|
PB1 |
Trig |
|
PB0 |
Ressò |
|
GND |
GND |
Es connecta un potenciòmetre de 10 k amb el STM32F103C8 per proporcionar un valor analògic d’entrada (de 0 a 3,3 V) al pin ADC PA0 de STM32.
Diagrama de circuits del receptor de RF amb Arduino Uno


Connexions de circuits entre el receptor RF i Arduino UNO:
|
Arduino UNO |
Receptor de RF |
|
5V |
VDD |
|
GND |
GND |
|
11 |
DADES |
|
NC |
FORMIGA |
Connexions de circuits entre 16x2 LCD i Arduino UNO:
|
Nom del pin LCD |
Nom del pin Arduino UNO |
|
Terra (Gnd) |
Terra (G) |
|
VCC |
5V |
|
VEE |
Pin del centre del potenciòmetre per al contrast |
|
Selecciona registre (RS) |
2 |
|
Lectura / Escriptura (RW) |
Terra (G) |
|
Activa (EN) |
3 |
|
Bit de dades 4 (DB4) |
4 |
|
Bit de dades 5 (DB5) |
5 |
|
Bit de dades 6 (DB6) |
6 |
|
Bit de dades 7 (DB7) |
7 |
|
LED positiu |
5V |
|
LED negatiu |
Terra (G) |
La codificació s’explicarà breument a continuació. Hi haurà dues parts de l'esbós on la primera part serà la secció del transmissor i una altra serà la secció del receptor. Tots els fitxers d’esbossos i vídeos de treball es donaran al final d’aquest tutorial. Per obtenir més informació sobre la interfície del mòdul RF amb Arduino Uno, seguiu l'enllaç.
Programació STM32F103C8 per a transmissió de RF sense fils
STM32F103C8 es pot programar mitjançant Arduino IDE. No cal un programador FTDI o ST-Link per penjar el codi a STM32F103C8. Simplement connecteu-vos a l'ordinador mitjançant el port USB de STM32 i comenceu a programar amb ARDUINO IDE. Podeu aprendre a Programar el vostre STM32 a Arduino IDE seguint l’enllaç.
A la secció del transmissor, la distància de l'objecte en "cm" es mesura mitjançant un sensor d'ultrasons i es defineix el valor numèric (de 0 a 100) mitjançant un potenciòmetre que es transmet mitjançant un transmissor de RF connectat amb STM32.
Primer s’inclou la biblioteca de Radiohead, que es pot descarregar des d’aquí. Com que aquesta biblioteca utilitza ASK (Amplitude Shift Keying Technique) per transmetre i rebre dades. Això fa que la programació sigui molt fàcil. Podeu incloure una biblioteca a l’esbós si aneu a Sketch-> inclou biblioteca-> Afegeix una biblioteca.zip.
#incloure
Igual que en aquest tutorial al costat del transmissor, s'utilitza un sensor d'ultrasons per mesurar la distància de manera que es defineixen el disparador i els pins d'eco.
#define trigPin PB1 #define echoPin PB0
A continuació, el nom de l'objecte per a la biblioteca RH_ASK s'estableix com a rf_driver amb els paràmetres com ara speed (2000), pin RX (PA9) i pin TX (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
A continuació, es declara la variable Strings necessària en aquest programa.
String nombre_transmissió; String transmeteu_distància; Transmissió de cordes;
A continuació, a la configuració buida (), s'inicialitza l'objecte per a RH_ASK rf_driver.
rf_driver.init ();
Després d'això, el pin de disparador es defineix com a pin OUTPUT i el PA0 (connectat al potenciòmetre) i el pin de ressò es defineix com a pin INPUT. La comunicació en sèrie s’inicia a una velocitat en bauds de 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
A continuació, al bucle buit (), primer el valor del potenciòmetre que és la tensió analògica d'entrada es converteix en valor digital (es troba el valor ADC). Com que l'ADC de STM32 té una resolució de 12 bits. Per tant, el valor digital varia de (0 a 4096) que s’assigna a (0 a 100).
int analoginput = analogRead (PA0); int pwmvalue = mapa (entrada analògica, 0,4095,0,100);
A continuació, es mesura la distància mitjançant un sensor d'ultrasons configurant el disparador entre alts i baixos amb un retard de 2 microsegons.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
El pin de ressò detecta l’ona reflectida cap enrere, és a dir, la durada del temps que es reflecteix l’ona activada per calcular la distància de l’objecte mitjançant la fórmula. Seguiu l'enllaç per obtenir més informació sobre com calcula la distància el sensor d'ultrasons.
llarga durada = pulseIn (echoPin, HIGH); distància flotant = durada * 0,034 / 2;
Ara tant el nombre de dades com la distància mesurada es converteixen en dades de cadena i s’emmagatzemen en les respectives variables de cadena.
número_transmissió = Cadena (pwmvalue); transmiti_distància = Corda (distància);
Tant la cadena s'afegeix com una línia i s'emmagatzema en una cadena anomenada transmissió i coma "," s'utilitza per separar dues cadenes.
transmetre = transmetre_pwm + "," + transmetre_distància;
La cadena de transmissió es converteix en una matriu de caràcters.
const char * msg = transmit.c_str ();
Les dades es transmeten i espereu fins que s’envien.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Les dades de cadena enviades també es mostren al monitor de sèrie.
Serial.println (msg);
Programació Arduino UNO com a receptor de RF
Arduino UNO es programa mitjançant l'IDE Arduino. A la secció del receptor, les dades que es transmeten des de la secció del transmissor i que reben el mòdul receptor de RF i les dades de cadena rebudes es divideixen en dades respectives (distància i nombre) i es mostren a la pantalla LCD de 16x2.
Vegem breument la codificació del receptor:
Com a la secció del transmissor, primer s’inclou la biblioteca RadiohHead. Com que aquesta biblioteca utilitza ASK (Amplitude Shift Keying Technique) per transmetre i rebre dades. Això fa que la programació sigui molt fàcil.
#incloure
Com que la pantalla LCD s'utilitza aquí, també s'inclou la biblioteca de cristalls líquids.
#incloure
I els pins de pantalla LCD de 16x2 connectats amb Arduino UNO s’especifiquen i es declaren utilitzant lcd com a objecte.
LiquidCrystal lcd (2,3,4,5,6,7);
A continuació, es declaren les variables de dades de cadena per emmagatzemar dades de cadenes.
String str_receive; Cadena str_number; String str_distance;
Es declara l'objecte de la biblioteca Radiohead.
RH_ASK rf;
Ara, a la configuració de buit (), la pantalla LCD està configurada en mode 16x2 i es mostra i esborra un missatge de benvinguda.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF amb STM32"); retard (5000); lcd.clear ();
Després d'això, s'inicialitza l'objecte rf .
rf.init ();
Ara al bucle buit (), el buf Array es declara amb la mida 7. Com que les dades enviades des del transmissor en tenen 7 inclòs el ",". Per tant, canvieu-ho segons les dades que es vulguin transmetre.
uint8_t buf; uint8_t buflen = sizeof (buf);
Si la cadena està disponible al mòdul receptor RF, la funció if comprova la mida i s'executa. El rf.recv () s’utilitza per rebre dades.
if (rf.recv (buf i buflen))
El buf té la cadena rebuda, de manera que la cadena rebuda s’emmagatzema en una variable de cadena str_receive .
str_receive = Cadena ((char *) buf);
Aquest bucle for s'utilitza per dividir la cadena rebuda en dues si detecta el ',' entre dues cadenes.
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); trencar; }
Es declaren dues matrius de caràcters per a dos valors i la cadena que es divideix en dos s’emmagatzema en una matriu respectada convertint la cadena en matriu de caràcters.
cadena de números de caràcters; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (cadena numèrica, 3);
Després d'això, converteix la matriu de caràcters en sencer mitjançant atoi ()
int distance = atoi (distancestring); int nombre = atoi (cadena numèrica);
Després de convertir-los en valors enters, els valors distància i número es mostren a la pantalla LCD de 16x2
lcd.setCursor (0,0); lcd.print ("Número:"); lcd.print (número); lcd.setCursor (0,1); lcd.print ("Distància"); lcd.print (distància); lcd.print ("cm");
Després de penjar tant els codis, és a dir, el transmissor i el receptor a STM32 i Arduino UNO respectivament, les dades, com ara el nombre i la distància d'objectes mesurats mitjançant l'STM32, es transmeten al receptor RF mitjançant el transmissor RF i els valors rebuts es mostren a la pantalla LCD sense fils.
Provant transmissor i receptor de RF basats en STM 32
1. Quan el número és 0 i la distància de l'objecte és de 6cm.

2. Quan el número 47 i la distància de l’objecte són a 3cm.

