- Kinakailangan ang Mga Bahagi
- 433Mhz RF Transmitter at Receiver Module)
- Circuit Diagram ng RF Transmitter na may STM32F103C8
- Circuit Diagram ng RF Receiver na may Arduino Uno
- Programming STM32F103C8 para sa wireless RF Transmission
- Programming Arduino UNO bilang RF Receiver
- Pagsubok sa STM 32 batay sa RF Transmitter at Receiver
Ang paggawa ng mga wireless na proyekto sa naka-embed na electronics ay nagiging napakahalaga at kapaki-pakinabang dahil walang mga nag-jumbled na mga wire sa buong lugar na ginagawang mas madaling gamitan at portable ang aparato. Mayroong iba't ibang mga wireless na teknolohiya tulad ng Bluetooth, WiFi, 433 MHz RF (Frequency ng Radio) atbp. Ang bawat teknolohiya ay may kanya-kanyang pakinabang at kawalan tulad ng gastos, distansya o saklaw na paglipat, bilis o throughput atbp Ngayon ay gagamitin namin ang RF module na may STM32 upang maipadala at matanggap ang data nang wireless. Kung bago ka sa STM32 Microcontroller pagkatapos magsimula sa Blinking LED na may STM32 gamit ang Arduino IDE at suriin ang lahat ng iba pang mga proyekto sa STM32 dito.
Maliban dito, gumamit din kami ng RF 433Mhz Wireless Module sa iba pang mga microcontroller upang makabuo ng ilang mga proyekto na kontrolado ng wireless, tulad ng:
- Mga Kinokontrol na RF na Home Appliances
- RF Remote Controlled LEDs Gamit ang Raspberry Pi
- Kinokontrol na Robot ng RF
- Ang interfacing RF module ay may Arduino
- PIC sa PIC Komunikasyon gamit ang RF Module
Dito ay i- interface namin ang isang 433MHz RF wireless module na may STM32F103C8 microcontroller. Ang proyekto ay nahahati sa dalawang bahagi. Ang transmitter ay makaka-interfaced sa STM32 at ang tatanggap ay makikipag-interfaced sa Arduino UNO. Magkakaroon ng magkakaibang circuit diagram at sketch para sa parehong paglilipat pati na rin ang pagtanggap ng bahagi.
Sa tutorial na ito, ang RF Transmitter ay nagpapadala ng dalawang halaga sa panig ng Tagatanggap: ang distansya na sinusukat gamit ang ultrasonic sensor at ang potentiometer ADC na halaga (0 hanggang 4096) na na-map bilang bilang mula sa (0 hanggang 100). Ang RF receiver ng Arduino ay tumatanggap ng parehong mga halaga at i-print ang mga distansya at numero ng mga halaga sa 16x2 LCD display na wireless.
Kinakailangan ang Mga Bahagi
- STM32F103C8 Microcontroller
- Arduino UNO
- 433Mhz RF Transmitter & Receiver
- Ultrasonic Sensor (HC-SR04)
- 16x2 LCD display
- 10k Potensyomiter
- Breadboard
- Mga Koneksyon sa Mga Wires
433Mhz RF Transmitter at Receiver Module)
RF Transmitter Pinout:
433Mhz RF Transmitter |
Paglalarawan ng Pin |
ANT |
Para sa pagkonekta ng Antenna |
GND |
GND |
VDD |
3.3 hanggang 5V |
DATA |
Ang data na ililipat sa tatanggap ay ibinigay dito |
Pinout ng RF Receiver:
433Mhz RF Receiver |
PAGGAMIT |
ANT |
Para sa pagkonekta ng Antenna |
GND |
GND |
VDD |
3.3 hanggang 5V |
DATA |
Ang data na matatanggap mula sa Transmitter |
CE / DO |
Ito rin ay isang Data pin |
Mga Pagtukoy sa Module na 433 MHz:
- Boltahe ng Operating ng Receiver: 3V hanggang 5V
- Transmitter Operating Voltage: 3V hanggang 5V
- Dalas ng pagpapatakbo: 433 MHz
- Distansya ng Paghahatid: 3 metro (walang antena) hanggang 100 metro (maximum)
- Diskarte sa Modulate: ASK (Paglipat ng amplitude ng amplitude)
- Bilis ng Paghahatid ng Data: 10Kbps
Circuit Diagram ng RF Transmitter na may STM32F103C8
Mga Koneksyon sa Circuit sa pagitan ng RF Transmitter & STM32F103C8:
STM32F103C8 |
RF Transmitter |
5V |
VDD |
GND |
GND |
PA10 |
DATA |
NC |
ANT |
Mga Koneksyon sa Circuit sa pagitan ng Ultrasonic Sensor & STM32F103C8:
STM32F103C8 |
Ultrasonic Sensor (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Echo |
GND |
GND |
Ang isang 10k potentiometer ay konektado sa STM32F103C8 upang magbigay ng halaga ng input ng Analog (0 hanggang 3.3V) sa ADC pin PA0 ng STM32.
Circuit Diagram ng RF Receiver na may Arduino Uno
Mga Koneksyon sa Circuit sa pagitan ng RF Receiver at Arduino UNO:
Arduino UNO |
Tagatanggap ng RF |
5V |
VDD |
GND |
GND |
11 |
DATA |
NC |
ANT |
Mga Koneksyon sa Circuit sa pagitan ng 16x2 LCD at Arduino UNO:
Pangalan ng LCD Pin |
Arduino UNO Pin Pangalan |
Lupa (Gnd) |
Lupa (G) |
VCC |
5V |
VEE |
I-pin mula sa Center of Potentiometer para sa Contrast |
Pagpili ng Rehistro (RS) |
2 |
Basahin / Isulat (RW) |
Lupa (G) |
Paganahin (EN) |
3 |
Data Bit 4 (DB4) |
4 |
Data Bit 5 (DB5) |
5 |
Data Bit 6 (DB6) |
6 |
Data Bit 7 (DB7) |
7 |
Positive na LED |
5V |
Negatibo sa LED |
Lupa (G) |
Ang coding ay ipapaliwanag sa maikling sa ibaba. Magkakaroon ng dalawang bahagi ng sketch kung saan ang unang bahagi ay seksyon ng transmiter at ang isa pa ay seksyon ng tatanggap. Ang lahat ng mga sketch file at gumaganang video ay ibibigay sa pagtatapos ng tutorial na ito. Upang matuto nang higit pa tungkol sa interfacing RF module sa Arduino Uno, sundin ang link.
Programming STM32F103C8 para sa wireless RF Transmission
Maaaring maiprogram ang STM32F103C8 gamit ang Arduino IDE. Ang isang FTDI programmer o ST-Link ay hindi kinakailangan upang mai-upload ang code sa STM32F103C8. Kumonekta lamang sa PC sa pamamagitan ng USB port ng STM32 at simulan ang pag-program sa ARDUINO IDE. Maaari mong malaman ang Programming ng iyong STM32 sa Arduino IDE sa pamamagitan ng pagsunod sa link.
Sa seksyon ng transmiter ang distansya ng bagay sa 'cm' ay sinusukat gamit ang ultrasonic sensor at ang halaga ng numero mula sa (0 hanggang 100) na itinakda gamit ang potensyomiter na ipinadala sa pamamagitan ng RF transmitter na naka-interfaced sa STM32.
Una kasama ang library ng Radiohead, maaari itong mai-download mula rito. Tulad ng paggamit ng library na ito ng ASK (Amplitude Shift Keying Technique) upang makapagpadala at tumanggap ng data. Ginagawa nitong napakadali ng programa. Maaari mong isama ang library sa sketch sa pamamagitan ng pagpunta sa Sketch-> isama ang library-> Magdagdag ng.zip library.
# isama
Tulad ng sa tutorial na ito sa panig ng transmiter isang ultrasonic sensor ang ginagamit upang sukatin ang distansya kaya't natukoy ang mga gatilyo at echo pin.
#define trigPin PB1 #define echoPin PB0
Susunod ang pangalan ng bagay para sa RH_ASK library ay itinakda bilang rf_driver na may mga parameter tulad ng bilis (2000), RX pin (PA9) at TX pin (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Susunod na ang variable ng Strings na kinakailangan sa program na ito ay idineklara.
String transmit_number; String transmit_distance; Paghahatid ng string;
Susunod sa void setup (), ang bagay para sa RH_ASK rf_driver ay naisimulang.
rf_driver.init ();
Pagkatapos nito ay itinakda ang trigger pin bilang OUTPUT pin at ang PA0 (konektado sa potentiometer) at echo pin ay itinakda bilang INPUT pin. Ang serial na komunikasyon ay nagsisimula sa baud rate na 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Susunod sa void loop (), frst ang potentiometer na halaga na input na Analog boltahe ay na-convert sa digital na halaga (natagpuan ang halaga ng ADC). Tulad ng ADC ng STM32 ay may 12-bit na resolusyon. Kaya, ang digital na halaga ay nag-iiba mula sa (0 hanggang 4096) na na-map sa (0 hanggang 100).
int analoginput = analogRead (PA0); int pwmvalue = mapa (analoginput, 0,4095,0,100);
Susunod ang distansya ay sinusukat gamit ang ultrasonic sensor sa pamamagitan ng pagtatakda ng mataas na mababa at mababang pag-trigger na may pagkaantala ng 2 microseconds.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, MATAAS); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Nararamdaman ng echo pin ang nasasalamin na alon pabalik, iyon ang tagal ng oras na nag-trigger ng alon na nakalarawan pabalik ay ginagamit sa pagkalkula ng distansya ng bagay gamit ang formula. Matuto nang higit pa kung paano kinakalkula ng ultrasonic sensor ang distansya, sa pamamagitan ng pagsunod sa link.
mahabang tagal = pulseIn (echoPin, HIGH); distansya ng float = tagal * 0.034 / 2;
Ngayon ang parehong numero ng data at distansya na sinusukat ay na-convert sa string data at nakaimbak sa kani-kanilang mga variable ng string.
transmit_number = String (pwmvalue); transmit_distance = String (distansya);
Parehong ang string ay idinagdag bilang isang linya at nakaimbak sa string na tinatawag na transmit at comma "," ay ginagamit upang paghiwalayin ang dalawang mga string.
magpadala = transmit_pwm + "," + transmit_distance;
Ang string ng paghahatid ay na-convert sa character array.
const char * msg = transmit.c_str ();
Ang data ay naipadala at maghintay hanggang maipadala.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Ang string data na ipinadala ay ipinapakita din sa Serial Monitor.
Serial.println (msg);
Programming Arduino UNO bilang RF Receiver
Ang Arduino UNO ay naka-program gamit ang Arduino IDE. Sa seksyon ng tatanggap ang data na ipinadala mula sa seksyon ng transmiter at natanggap ng module ng RF receiver at ang natanggap na data ng string ay nahahati sa kani-kanilang data (distansya at numero) at ipinakita sa 16x2 LCD display.
Tingnan natin ang tatanggap ng pag-coding sa maikling:
Tulad ng sa seksyon ng transmitter unang kasama ang RadiohHead library. Tulad ng paggamit ng library na ito ng ASK (Amplitude Shift Keying Technique) upang makapagpadala at tumanggap ng data. Ginagawa nitong napakadali ng programa.
# isama
Tulad ng LCD display ay ginagamit dito kaya kasama rin ang library ng liquidcrystal.
# isama
At ang mga 16x2 LCD display pin na konektado sa Arduino UNO ay tinukoy at idineklara gamit ang lcd bilang object.
LiquidCrystal lcd (2,3,4,5,6,7);
Susunod na ang mga variable ng data ng String upang mag-imbak ng data ng string ay idineklara.
String str_receive; String str_number; String str_distance;
Ang bagay para sa library ng Radiohead ay idineklara.
RH_ASK rf;
Ngayon sa void setup (), ang LCD display ay naka-set sa 16x2 mode at isang maligayang mensahe ang ipinakita at na-clear.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF na may STM32"); pagkaantala (5000); lcd.clear ();
Pagkatapos nito, ang bagay na rf ay naisimula.
rf.init ();
Ngayon sa void loop (), ang Array buf ay idineklara na may sukat bilang 7. Tulad ng data na ipinadala mula sa transmitter ay may 7 kabilang ang ",". Kaya, baguhin ito alinsunod sa data na nais na mailipat.
uint8_t buf; uint8_t buflen = sizeof (buf);
Kung ang string ay magagamit sa module ng RF receiver kung ang function na suriin ang laki at ito executes. Ginagamit ang rf.recv () upang makatanggap ng data.
kung (rf.recv (buf, & buflen))
Ang buf ay may natanggap na string kaya't ang natanggap na string ay nakaimbak sa isang variable na str_receive string.
str_receive = String ((char *) buf);
Ginagamit ito para sa loop upang hatiin ang natanggap na string sa dalawa kung nakita nito ang ',' sa pagitan ng dalawang mga string.
para sa (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); pahinga; }
Dalawang char arrays para sa dalawang halaga ang idineklara at ang String na nahahati sa dalawa ay nakaimbak sa respetadong array sa pamamagitan ng pag-convert ng string sa character array.
char numbertring; distansya ng char; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (numbertring, 3);
Pagkatapos nito ay gawing integer ang character array gamit ang atoi ()
int distansya = atoi (distancestring); int number = atoi (numbertring);
Matapos ang pag-convert sa mga halaga ng integer ang distansya ng mga halaga at numero ay ipinapakita sa 16x2 LCD display
lcd.setCursor (0,0); lcd.print ("Bilang:"); lcd.print (numero); lcd.setCursor (0,1); lcd.print ("Distansya:"); lcd.print (distansya); lcd.print ("cm");
Matapos ang pag-upload ng parehong mga code ie transmitter at receiver sa STM32 at Arduino UNO ayon sa pagkakabanggit, ang data tulad ng bilang at distansya ng bagay na sinusukat gamit ang STM32 ay ipinapadala sa RF receiver sa pamamagitan ng RF Transmitter at ang mga halagang natanggap ay ipinapakita sa LCD display nang wireless.
Pagsubok sa STM 32 batay sa RF Transmitter at Receiver
1. Kapag ang bilang sa 0 at ang distansya ng bagay ay nasa 6cm.
2. Kapag ang bilang 47 at ang distansya ng bagay ay nasa 3cm.