- Komponen Diperlukan
- Modul Pemancar dan Penerima RF 433Mhz)
- Diagram Sirkuit Pemancar RF dengan STM32F103C8
- Diagram Sirkuit Penerima RF dengan Arduino Uno
- Pemrograman STM32F103C8 untuk Transmisi RF nirkabel
- Pemrograman Arduino UNO sebagai Penerima RF
- Pengujian Pemancar dan Penerima RF berbasis STM 32
Membuat proyek nirkabel dalam elektronik tertanam menjadi sangat penting dan bermanfaat karena tidak ada kabel yang campur aduk yang membuat perangkat lebih praktis dan portabel. Ada berbagai macam teknologi wireless seperti Bluetooth, WiFi, RF 433 MHz (Radio Frequency) dll. Setiap teknologi memiliki kelebihan dan kekurangan masing-masing seperti biaya, jarak atau jangkauan transfer, kecepatan atau throughput dll. Saat ini kita akan menggunakan modul RF dengan STM32 untuk mengirim dan menerima data secara nirkabel. Jika Anda baru mengenal Mikrokontroler STM32, mulailah dengan Blinking LED dengan STM32 menggunakan Arduino IDE dan periksa semua proyek STM32 lainnya di sini.
Selain itu, kami juga telah menggunakan Modul Nirkabel RF 433Mhz dengan mikrokontroler lain untuk membangun beberapa proyek yang dikontrol nirkabel, seperti:
- Peralatan Rumah Tangga yang Dikendalikan RF
- LED RF Remote Controlled Menggunakan Raspberry Pi
- Robot Kontrol RF
- Antarmuka modul RF dengan Arduino
- Komunikasi PIC ke PIC menggunakan Modul RF
Di sini kita akan menghubungkan modul nirkabel RF 433MHz dengan mikrokontroler STM32F103C8. Proyek ini dibagi menjadi dua bagian. The transmitter akan dihubungkan dengan STM32 dan penerima akan dihubungkan dengan Arduino UNO. Akan ada diagram sirkuit dan sketsa yang berbeda untuk bagian pengirim dan 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 dari Arduino menerima baik nilai-nilai dan cetakan mereka jarak dan jumlah nilai dalam 16x2 layar LCD secara nirkabel.
Komponen Diperlukan
- Mikrokontroler STM32F103C8
- Arduino UNO
- Pemancar & Penerima RF 433Mhz
- Sensor Ultrasonik (HC-SR04)
- Layar LCD 16x2
- Potensiometer 10k
- Papan tempat memotong roti
- Menghubungkan Kabel
Modul Pemancar dan Penerima RF 433Mhz)
Pinout Pemancar RF:
Pemancar RF 433Mhz |
Deskripsi Pin |
SEMUT |
Untuk menghubungkan Antena |
GND |
GND |
VDD |
3,3 hingga 5V |
DATA |
Data yang akan dikirim ke penerima diberikan di sini |
Pinout Penerima RF:
Penerima RF 433Mhz |
MENGGUNAKAN |
SEMUT |
Untuk menghubungkan Antena |
GND |
GND |
VDD |
3,3 hingga 5V |
DATA |
Data yang akan diterima dari Transmitter |
CE / DO |
Ini juga merupakan pin Data |
Spesifikasi Modul 433 MHz:
- Tegangan Operasi Penerima: 3V hingga 5V
- Tegangan Operasi Transmitter: 3V hingga 5V
- Frekuensi pengoperasian: 433 MHz
- Jarak Transmisi: 3 meter (tanpa antena) hingga 100 meter (maksimum)
- Teknik Modulasi: ASK (Amplitude shift keying)
- Kecepatan Transmisi Data: 10Kbps
Diagram Sirkuit Pemancar RF dengan STM32F103C8
Koneksi Sirkuit antara Pemancar RF & STM32F103C8:
STM32F103C8 |
Pemancar RF |
5V |
VDD |
GND |
GND |
PA10 |
DATA |
NC |
SEMUT |
Koneksi Sirkuit antara Sensor Ultrasonik & STM32F103C8:
STM32F103C8 |
Sensor Ultrasonik (HC-SR04) |
5V |
VCC |
PB1 |
Trigonometri |
PB0 |
Gema |
GND |
GND |
Sebuah potensiometer 10k terhubung dengan STM32F103C8 untuk memberikan masukan nilai Analog (0 3.3V) ke ADC pin PA0 dari STM32.
Diagram Sirkuit Penerima RF dengan Arduino Uno
Koneksi Sirkuit antara Penerima RF & Arduino UNO:
Arduino UNO |
Penerima RF |
5V |
VDD |
GND |
GND |
11 |
DATA |
NC |
SEMUT |
Koneksi Sirkuit antara LCD 16x2 & Arduino UNO:
Nama Pin LCD |
Nama Pin Arduino UNO |
Tanah (Gnd) |
Tanah (G) |
VCC |
5V |
VEE |
Pin dari Center of Potentiometer for Contrast |
Register Select (RS) |
2 |
Baca / Tulis (RW) |
Tanah (G) |
Aktifkan (EN) |
3 |
Data Bit 4 (DB4) |
4 |
Data Bit 5 (DB5) |
5 |
Data Bit 6 (DB6) |
6 |
Data Bit 7 (DB7) |
7 |
LED Positif |
5V |
LED Negatif |
Tanah (G) |
Pengkodeannya akan dijelaskan secara singkat di bawah ini. Akan ada dua bagian sketsa di mana bagian pertama akan menjadi bagian pemancar dan bagian lain akan menjadi bagian penerima. Semua file sketsa dan video kerja akan diberikan di akhir tutorial ini. Untuk mempelajari lebih lanjut tentang menghubungkan modul RF dengan Arduino Uno, ikuti tautannya.
Pemrograman STM32F103C8 untuk Transmisi RF nirkabel
STM32F103C8 dapat diprogram menggunakan Arduino IDE. Sebuah programmer FTDI atau ST-Link tidak diperlukan untuk meng-upload kode untuk STM32F103C8. Cukup sambungkan ke PC melalui port USB STM32 dan mulai pemrograman dengan ARDUINO IDE. Anda dapat mempelajari Pemrograman STM32 Anda di Arduino IDE dengan mengikuti tautan.
Pada bagian pemancar jarak benda dalam 'cm' diukur menggunakan sensor ultrasonik dan nilai bilangan dari (0 hingga 100) diatur menggunakan potensiometer yang ditransmisikan melalui pemancar RF yang dihubungkan dengan STM32.
Pertama, perpustakaan Radiohead disertakan, dapat diunduh dari sini. Karena perpustakaan ini menggunakan ASK (Amplitude Shift Keying Technique) untuk mengirim dan menerima data. Ini membuat pemrograman menjadi sangat mudah. Anda dapat memasukkan perpustakaan dalam sketsa dengan masuk ke Sketch-> include library-> Add library.zip.
#include
Seperti dalam tutorial ini di sisi pemancar, sensor ultrasonik digunakan untuk mengukur jarak sehingga pin pemicu dan gema ditentukan.
# Tentukan trigPin PB1 # Tentukan echoPin PB0
Selanjutnya nama objek untuk perpustakaan RH_ASK ditetapkan sebagai rf_driver dengan parameter seperti kecepatan (2000), pin RX (PA9) dan pin TX (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Selanjutnya variabel Strings yang diperlukan dalam program ini dideklarasikan.
String transmit_number; String transmit_distance; String mengirimkan;
Selanjutnya di setup void (), objek untuk RH_ASK rf_driver diinisialisasi.
rf_driver.init ();
Setelah itu pin pemicu ditetapkan sebagai pin OUTPUT dan PA0 (terhubung ke potensiometer) dan pin echo ditetapkan sebagai pin INPUT. Komunikasi serial dimulai pada baud rate 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Selanjutnya pada void loop (), terlebih dahulu nilai potensiometer yang merupakan input tegangan analog diubah menjadi nilai digital (nilai ADC sudah ditemukan). Karena ADC dari STM32 memiliki resolusi 12-bit. Jadi, nilai digital bervariasi dari (0 hingga 4096) yang dipetakan menjadi (0 hingga 100).
int analoginput = analogRead (PA0); int pwmvalue = peta (input analog, 0,4095,0,100);
Selanjutnya jarak diukur menggunakan sensor ultrasonik dengan mengatur trigger high dan low dengan jeda 2 mikrodetik.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Pin gema merasakan gelombang yang dipantulkan kembali, yaitu durasi waktu gelombang yang dipicu dipantulkan kembali digunakan dalam menghitung jarak benda menggunakan rumus. Pelajari lebih lanjut bagaimana sensor ultrasonik menghitung jarak, dengan mengikuti link.
durasi panjang = pulseIn (echoPin, HIGH); jarak mengambang = durasi * 0,034 / 2;
Sekarang baik jumlah data dan jarak yang diukur diubah menjadi data string dan disimpan dalam variabel string masing-masing.
transmit_number = String (pwmvalue); transmit_distance = String (jarak);
Kedua string tersebut ditambahkan sebagai satu baris dan disimpan dalam string yang disebut transmit dan koma "," digunakan untuk memisahkan dua string.
transmisi = transmit_pwm + "," + transmit_distance;
String transmisi diubah menjadi array karakter.
const char * msg = transmit.c_str ();
Data ditransmisikan dan tunggu sampai terkirim.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Data string yang dikirim juga ditampilkan di Serial Monitor.
Serial.println (msg);
Pemrograman Arduino UNO sebagai Penerima RF
Arduino UNO diprogram menggunakan Arduino IDE. Pada bagian penerima, data yang dikirim dari bagian pemancar dan diterima oleh modul penerima RF dan data string yang diterima dipecah menjadi data masing-masing (jarak dan nomor) dan ditampilkan pada layar LCD 16x2.
Mari kita lihat pengkodean penerima secara singkat:
Seperti di bagian pemancar, pertama perpustakaan RadiohHead disertakan. Karena library ini menggunakan ASK (Amplitude Shift Keying Technique) untuk mengirim dan menerima data. Ini membuat pemrograman menjadi sangat mudah.
#include
Karena layar LCD digunakan di sini, maka perpustakaan kristal cair juga disertakan.
#include
Dan pin display LCD 16x2 yang dihubungkan dengan Arduino UNO ditentukan dan dideklarasikan menggunakan lcd sebagai objek.
LCD LiquidCrystal (2,3,4,5,6,7);
Selanjutnya variabel data String untuk menyimpan data string dideklarasikan.
String str_receive; String str_number; Str_distance string;
Objek untuk perpustakaan Radiohead dideklarasikan.
RH_ASK rf;
Sekarang dalam pengaturan void (), Layar LCD diatur dalam mode 16x2 dan pesan selamat datang ditampilkan dan dihapus.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("RF dengan STM32"); penundaan (5000); lcd.clear ();
Setelah itu, objek rf diinisialisasi.
rf.init ();
Sekarang di loop void (), buf Array dideklarasikan dengan ukuran sebagai 7. Karena data yang dikirim dari pemancar memiliki 7 termasuk ",". Jadi, ubah ini sesuai dengan data yang akan dikirim.
uint8_t buf; uint8_t buflen = sizeof (buf);
Jika string tersedia di modul penerima rf, fungsi if memeriksa ukuran dan dieksekusi. The rf.recv () digunakan untuk menerima data.
if (rf.recv (buf, & buflen))
The buf memiliki string yang diterima sehingga kemudian menerima string yang disimpan dalam str_receive variabel string.
str_receive = String ((char *) buf);
Ini untuk loop digunakan untuk membagi string diterima menjadi dua jika mendeteksi '' di antara dua string.
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); istirahat; }
Dua array karakter untuk dua nilai dideklarasikan dan String yang dipecah menjadi dua disimpan dalam array yang dihormati dengan mengubah string menjadi array karakter.
char numberstring; char jarak; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (numberstring, 3);
Setelah itu ubah array karakter menjadi integer menggunakan atoi ()
int jarak = atoi (jarak); int number = atoi (numberstring);
Setelah diubah menjadi nilai integer jarak nilai dan angka ditampilkan pada layar LCD 16x2
lcd.setCursor (0,0); lcd.print ("Nomor:"); lcd.print (angka); lcd.setCursor (0,1); lcd.print ("Jarak:"); lcd.print (jarak); lcd.print ("cm");
Setelah mengunggah kedua kode yaitu pemancar dan penerima di STM32 dan Arduino UNO masing-masing, data seperti jumlah dan jarak objek yang diukur menggunakan STM32 dikirim ke penerima RF melalui Pemancar RF dan nilai yang diterima ditampilkan di layar LCD tanpa kabel.
Pengujian Pemancar dan Penerima RF berbasis STM 32
1. Bila bilangan pada 0 dan jarak benda berada pada 6cm.
2. Bila angka 47 dan jarak benda berada pada 3cm.