- Komponen Diperlukan
- Modul Pemancar dan Penerima RF 433Mhz)
- Litar Diagram Pemancar RF dengan STM32F103C8
- Litar Diagram Penerima RF dengan Arduino Uno
- Pengaturcaraan STM32F103C8 untuk Penghantaran RF tanpa wayar
- Pengaturcaraan Arduino UNO sebagai Penerima RF
- Menguji Pemancar dan Penerima RF berasaskan STM 32
Membuat projek tanpa wayar dalam elektronik tertanam menjadi sangat penting dan bermanfaat kerana tidak ada kabel yang terganggu yang menjadikan peranti lebih berguna dan mudah alih. Terdapat pelbagai teknologi tanpa wayar seperti Bluetooth, WiFi, RF 433 MHz (Frekuensi Radio) dan lain-lain. Setiap teknologi mempunyai kelebihan dan kekurangan tersendiri seperti kos, pemindahan jarak atau jarak, kelajuan atau throughput dll. Hari ini kita akan menggunakan modul RF dengan STM32 untuk menghantar dan menerima data tanpa wayar. Sekiranya anda baru menggunakan STM32 Microcontroller, mulailah dengan Blinking LED dengan STM32 menggunakan Arduino IDE dan periksa semua projek STM32 yang lain di sini.
Selain daripada ini, kami juga telah menggunakan RF 433Mhz Wireless Module dengan mikrokontroler lain untuk membina beberapa projek tanpa wayar, seperti:
- Peralatan Rumah Terkawal RF
- LED Kawalan Jauh RF Menggunakan Raspberry Pi
- Robot Terkawal RF
- Modul RF antara muka dengan Arduino
- Komunikasi PIC ke PIC menggunakan Modul RF
Di sini kita akan menghubungkan modul tanpa wayar RF 433MHz dengan mikrokontroler STM32F103C8. Projek ini terbahagi kepada dua bahagian. The pemancar akan saling berkait dengan STM32 dan penerima akan saling berkait dengan Arduino UNO. Akan ada gambarajah litar dan lakaran yang berbeza untuk kedua-dua bahagian pemancar dan juga penerima.
Dalam tutorial ini, Pemancar RF mengirimkan dua nilai ke sisi Penerima: jarak yang diukur menggunakan sensor ultrasonik dan nilai ADC potensiometer (0 hingga 4096) yang dipetakan sebagai angka dari (0 hingga 100). The penerima RF untuk Arduino menerima kedua-dua nilai dan cetakan mereka jarak dan jumlah nilai dalam 16x2 paparan LCD secara wayarles.
Komponen Diperlukan
- Pengawal Mikro STM32F103C8
- Arduino UNO
- Pemancar & Penerima RF 433Mhz
- Sensor Ultrasonik (HC-SR04)
- Paparan LCD 16x2
- Potensiometer 10k
- Papan roti
- Wayar Penyambung
Modul Pemancar dan Penerima RF 433Mhz)
Pinout Pemancar RF:
Pemancar RF 433Mhz |
Huraian Pin |
ANT |
Untuk menghubungkan Antena |
GND |
GND |
VDD |
3.3 hingga 5V |
DATA |
Data yang akan dihantar ke penerima diberikan di sini |
Pinout Penerima RF:
Penerima RF 433Mhz |
PENGGUNAAN |
ANT |
Untuk menghubungkan Antena |
GND |
GND |
VDD |
3.3 hingga 5V |
DATA |
Data yang akan diterima dari Pemancar |
CE / DO |
Ia juga merupakan pin Data |
Spesifikasi Modul 433 MHz:
- Voltan Operasi Penerima: 3V hingga 5V
- Voltan Operasi Pemancar: 3V hingga 5V
- Kekerapan operasi: 433 MHz
- Jarak penghantaran: 3 meter (tanpa antena) hingga 100 meter (maksimum)
- Teknik modulasi: ASK (Amplitude shift keying)
- Kelajuan penghantaran data: 10Kbps
Litar Diagram Pemancar RF dengan STM32F103C8
Sambungan Litar antara Pemancar RF & STM32F103C8:
STM32F103C8 |
Pemancar RF |
5V |
VDD |
GND |
GND |
PA10 |
DATA |
NC |
ANT |
Sambungan Litar antara Sensor Ultrasonik & STM32F103C8:
STM32F103C8 |
Sensor Ultrasonik (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Gema |
GND |
GND |
A potentiometer 10k adalah berkaitan dengan STM32F103C8 untuk menyediakan input nilai Analog (0 hingga 3.3V) kepada PA0 ADC pin STM32.
Litar Diagram Penerima RF dengan Arduino Uno
Sambungan Litar antara Penerima RF & Arduino UNO:
Arduino UNO |
Penerima RF |
5V |
VDD |
GND |
GND |
11 |
DATA |
NC |
ANT |
Sambungan Litar antara LCD 16x2 & Arduino UNO:
Nama Pin LCD |
Nama Pin Arduino UNO |
Tanah (Gnd) |
Tanah (G) |
VCC |
5V |
VEE |
Pin dari Pusat Potensiometer untuk Kontras |
Daftar Pilih (RS) |
2 |
Baca / Tulis (RW) |
Tanah (G) |
Aktifkan (EN) |
3 |
Bit Data 4 (DB4) |
4 |
Bit Data 5 (DB5) |
5 |
Bit Data 6 (DB6) |
6 |
Bit Data 7 (DB7) |
7 |
Positif LED |
5V |
Negatif LED |
Tanah (G) |
Pengekodan akan dijelaskan secara ringkas di bawah. Akan ada dua bahagian lakaran di mana bahagian pertama akan menjadi bahagian pemancar dan yang lain akan menjadi bahagian penerima. Semua fail lakaran dan video kerja akan diberikan pada akhir tutorial ini. Untuk mengetahui lebih lanjut mengenai menghubungkan modul RF dengan Arduino Uno, ikuti pautan.
Pengaturcaraan STM32F103C8 untuk Penghantaran RF tanpa wayar
STM32F103C8 dapat diprogramkan menggunakan Arduino IDE. A FTDI programmer atau ST-Link tidak diperlukan untuk memuat naik kod untuk STM32F103C8. Cukup sambungkan ke PC melalui port USB STM32 dan mulakan pengaturcaraan dengan ARDUINO IDE. Anda boleh belajar Memprogram STM32 anda di Arduino IDE dengan mengikuti pautan.
Pada bagian pemancar jarak objek dalam 'cm' diukur menggunakan sensor ultrasonik dan nilai angka dari (0 hingga 100) ditetapkan menggunakan potensiometer yang dikirim melalui pemancar RF yang dihubungkan dengan STM32.
Pertama perpustakaan Radiohead disertakan, ia boleh dimuat turun dari sini. Oleh kerana perpustakaan ini menggunakan ASK (Amplitude Shift Keying Technique) untuk menghantar dan menerima data. Ini menjadikan pengaturcaraan sangat mudah. Anda boleh memasukkan perpustakaan dalam sketsa dengan masuk ke Sketch-> include library-> Tambahkan.zip library.
#sertakan
Seperti dalam tutorial ini di sisi pemancar sensor ultrasonik digunakan untuk mengukur jarak sehingga pin pemicu dan gema ditentukan.
#define trigPin PB1 #define echoPin PB0
Seterusnya nama objek untuk perpustakaan RH_ASK ditetapkan sebagai rf_driver dengan parameter seperti speed (2000), pin RX (PA9) dan pin TX (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Seterusnya pemboleh ubah Strings yang diperlukan dalam program ini dinyatakan.
String transmit_number; Rentetan transmit_jarak; Hantaran rentetan;
Selanjutnya dalam penyediaan kekosongan (), objek untuk RH_ASK rf_driver diinisialisasi.
rf_driver.init ();
Setelah itu pin pemicu ditetapkan sebagai pin OUTPUT dan PA0 (disambungkan ke potensiometer) dan pin gema ditetapkan sebagai pin INPUT. Komunikasi bersiri bermula pada kadar baud 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Selanjutnya dalam gelung void (), pertama nilai potensiometer yang merupakan input voltan ditukar menjadi nilai digital (nilai ADC dijumpai). Kerana ADC STM32 mempunyai resolusi 12-bit. Jadi, nilai digital berbeza dari (0 hingga 4096) yang dipetakan menjadi (0 hingga 100).
int analoginput = analogRead (PA0); int pwmvalue = peta (analoginput, 0,4095,0,100);
Seterusnya jarak diukur menggunakan sensor ultrasonik dengan menetapkan pemicu tinggi dan rendah dengan penundaan 2 mikrodetik.
digitalWrite (trigPin, RENDAH); kelewatanMikrodetik (2); digitalWrite (trigPin, TINGGI); kelewatanMikrodetik (10); digitalWrite (trigPin, RENDAH);
Pin gema merasakan gelombang yang dipantulkan kembali, yaitu jangka waktu gelombang yang dipicu dipantulkan kembali digunakan dalam menghitung jarak objek menggunakan rumus. Ketahui lebih lanjut bagaimana sensor ultrasonik mengira jarak, dengan mengikuti pautan.
jangka masa panjang = pulseIn (echoPin, TINGGI); jarak apungan = jangka masa * 0.034 / 2;
Sekarang nombor data dan jarak yang diukur diubah menjadi data rentetan dan disimpan dalam pemboleh ubah rentetan masing-masing.
transmit_number = String (nilai pwm); transmit_distance = Rentetan (jarak);
Kedua string ditambahkan sebagai satu baris dan disimpan dalam string yang disebut transmit dan koma "," digunakan untuk memisahkan dua string.
transmit = transmit_pwm + "," + transmit_distance;
String transmit ditukar menjadi array watak.
const char * msg = transmit.c_str ();
Data dihantar dan tunggu sehingga dihantar.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Data tali yang dihantar juga dipaparkan di Monitor Serial.
Serial.println (msg);
Pengaturcaraan Arduino UNO sebagai Penerima RF
Arduino UNO diprogramkan menggunakan Arduino IDE. Di bahagian penerima data yang dihantar dari bahagian pemancar dan diterima oleh modul penerima RF dan data rentetan yang diterima dibahagikan kepada data masing-masing (jarak dan bilangan) dan dipaparkan dalam paparan LCD 16x2.
Mari lihat pengekodan penerima secara ringkas:
Seperti di bahagian pemancar pertama, perpustakaan RadiohHead dimasukkan. Oleh kerana perpustakaan ini menggunakan ASK (Amplitude Shift Keying Technique) untuk menghantar dan menerima data. Ini menjadikan pengaturcaraan sangat mudah.
#sertakan
Sebagai paparan LCD digunakan di sini, maka perpustakaan liquidcrystal juga disertakan.
#sertakan
Dan pin paparan LCD 16x2 yang dihubungkan dengan Arduino UNO ditentukan dan dinyatakan menggunakan lcd sebagai objek.
LiquidCrystal lcd (2,3,4,5,6,7);
Selanjutnya pemboleh ubah data String untuk menyimpan data rentetan dinyatakan.
String str_receive; String str_number; String str_distance;
Objek untuk perpustakaan Radiohead dinyatakan.
RH_ASK rf;
Sekarang dalam penyediaan kekosongan (), Paparan LCD ditetapkan dalam mod 16x2 dan mesej selamat datang dipaparkan dan dibersihkan.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF dengan STM32"); kelewatan (5000); lcd.clear ();
Selepas itu, objek rf diinisialisasi.
rf.init ();
Sekarang dalam gelung void (), Array buf dinyatakan dengan ukuran 7. Sebagai data yang dihantar dari pemancar mempunyai 7 termasuk ",". Jadi, ubah ini mengikut data yang hendak dihantar.
uint8_t buf; uint8_t buflen = sizeof (buf);
Sekiranya tali boleh didapati di modul penerima rf, fungsi if memeriksa ukuran dan ia dilaksanakan. The rf.recv () digunakan untuk menerima data.
jika (rf.recv (buf, & buflen))
The buf mempunyai rentetan diterima dengan demikian maka menerima rentetan disimpan dalam str_receive rentetan berubah-ubah.
str_receive = String ((char *) buf);
Ini untuk gelung digunakan untuk memisahkan rentetan yang diterima menjadi dua jika mengesan ',' di antara dua rentetan.
untuk (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); rehat; }
Dua array char untuk dua nilai dinyatakan dan String yang terbahagi kepada dua disimpan dalam array yang dihormati dengan menukar string menjadi array watak.
pengecaraan nombor char; char menjauhkan diri; str_distance.toCharArray (jauh, 3); str_number.toCharArray (nombor angka, 3);
Selepas itu ubah array watak menjadi integer menggunakan atoi ()
jarak int = atoi (menjauhkan diri); nombor int = atoi (angka angka);
Setelah bertukar menjadi bilangan bulat nilai jarak dan nombor dipaparkan dalam paparan LCD 16x2
lcd.setCursor (0,0); lcd.print ("Nombor:"); lcd.print (nombor); lcd.setCursor (0,1); lcd.print ("Jarak:"); lcd.print (jarak); lcd.print ("cm");
Setelah memuat naik kedua-dua kod tersebut iaitu pemancar dan penerima di STM32 dan Arduino UNO masing-masing, data seperti nombor dan jarak objek yang diukur menggunakan STM32 dihantar ke penerima RF melalui Pemancar RF dan nilai yang diterima ditunjukkan dalam paparan LCD tanpa wayar.
Menguji Pemancar dan Penerima RF berasaskan STM 32
1. Apabila nombor pada 0 dan jarak objek ialah 6cm.
2. Apabila nombor 47 dan jarak objek adalah 3cm.