- Thành phần bắt buộc
- Mô-đun thu và phát RF 433Mhz)
- Sơ đồ mạch của máy phát RF với STM32F103C8
- Sơ đồ mạch của bộ thu RF với Arduino Uno
- Lập trình STM32F103C8 để truyền RF không dây
- Lập trình Arduino UNO làm Bộ thu RF
- Thử nghiệm máy phát và máy thu RF dựa trên STM 32
Việc thực hiện các dự án không dây trong thiết bị điện tử nhúng trở nên rất quan trọng và hữu ích vì không có dây lộn xộn nào ở trên, điều này làm cho thiết bị trở nên tiện dụng và di động hơn. Có nhiều công nghệ không dây khác nhau như Bluetooth, WiFi, 433 MHz RF (tần số vô tuyến), v.v. Mỗi công nghệ đều có ưu và nhược điểm riêng như chi phí, khoảng cách hoặc phạm vi truyền, tốc độ hoặc thông lượng, v.v. Hôm nay chúng ta sẽ sử dụng mô-đun RF với STM32 để gửi và nhận dữ liệu không dây. Nếu bạn chưa quen với Vi điều khiển STM32 thì hãy bắt đầu với Đèn LED nhấp nháy với STM32 bằng Arduino IDE và kiểm tra tất cả các dự án STM32 khác tại đây.
Ngoài ra, chúng tôi cũng đã sử dụng Mô-đun không dây RF 433Mhz với các bộ vi điều khiển khác để xây dựng một số dự án được điều khiển không dây, chẳng hạn như:
- Thiết bị gia dụng được điều khiển bằng RF
- Đèn LED điều khiển từ xa RF sử dụng Raspberry Pi
- Robot điều khiển RF
- Giao diện mô-đun RF với Arduino
- Giao tiếp PIC với PIC sử dụng Mô-đun RF
Ở đây chúng ta sẽ giao tiếp một mô-đun không dây RF 433MHz với vi điều khiển STM32F103C8. Dự án được chia thành hai phần. Máy phát sẽ được giao tiếp với STM32 và máy thu sẽ được giao tiếp với Arduino UNO. Sẽ có các sơ đồ và phác thảo mạch khác nhau cho cả phần truyền và nhận.
Trong hướng dẫn này, Máy phát RF gửi hai giá trị đến phía Máy thu: khoảng cách được đo bằng cảm biến siêu âm và giá trị ADC chiết áp (0 đến 4096) được ánh xạ dưới dạng số từ (0 đến 100). Bộ thu RF của Arduino nhận cả hai giá trị và in các giá trị khoảng cách và số đó trong màn hình LCD 16x2 không dây.
Thành phần bắt buộc
- Vi điều khiển STM32F103C8
- Arduino UNO
- Bộ phát & thu RF 433Mhz
- Cảm biến siêu âm (HC-SR04)
- Màn hình LCD 16x2
- Chiết áp 10k
- Breadboard
- Kết nối dây
Mô-đun thu và phát RF 433Mhz)
Sơ đồ chân máy phát RF:
Máy phát RF 433Mhz |
Ghim Mô tả |
CON KIẾN |
Để kết nối Antenna |
GND |
GND |
VDD |
3,3 đến 5V |
DỮ LIỆU |
Dữ liệu được truyền đến người nhận được đưa ra tại đây |
Sơ đồ chân máy thu RF:
Bộ thu RF 433Mhz |
SỬ DỤNG |
CON KIẾN |
Để kết nối Antenna |
GND |
GND |
VDD |
3,3 đến 5V |
DỮ LIỆU |
Dữ liệu được nhận từ Transmitter |
CE / DO |
Nó cũng là một pin Dữ liệu |
Thông số kỹ thuật mô-đun 433 MHz:
- Bộ thu Điện áp hoạt động: 3V đến 5V
- Điện áp hoạt động của máy phát: 3V đến 5V
- Tần số hoạt động: 433 MHz
- Khoảng cách truyền: 3 mét (không có ăng-ten) đến 100 mét (tối đa)
- Kỹ thuật điều chế: ASK (Khóa dịch chuyển biên độ)
- Tốc độ truyền dữ liệu: 10Kbps
Sơ đồ mạch của máy phát RF với STM32F103C8
Kết nối mạch giữa Máy phát RF & STM32F103C8:
STM32F103C8 |
Máy phát RF |
5V |
VDD |
GND |
GND |
PA10 |
DỮ LIỆU |
NC |
CON KIẾN |
Kết nối mạch giữa Cảm biến siêu âm & STM32F103C8:
STM32F103C8 |
Cảm biến siêu âm (HC-SR04) |
5V |
VCC |
PB1 |
Trig |
PB0 |
Echo |
GND |
GND |
Một chiết áp 10k được kết nối với STM32F103C8 để cung cấp giá trị Analog đầu vào (0 đến 3,3V) cho chân ADC PA0 của STM32.
Sơ đồ mạch của bộ thu RF với Arduino Uno
Kết nối mạch giữa Bộ thu RF và Arduino UNO:
Arduino UNO |
Máy thu RF |
5V |
VDD |
GND |
GND |
11 |
DỮ LIỆU |
NC |
CON KIẾN |
Kết nối mạch giữa LCD 16x2 và Arduino UNO:
Tên pin LCD |
Tên chân Arduino UNO |
Mặt đất (Gnd) |
Mặt đất (G) |
VCC |
5V |
VEE |
Ghim từ Trung tâm của chiết áp cho độ tương phản |
Đăng ký Chọn (RS) |
2 |
Đọc / Ghi (RW) |
Mặt đất (G) |
Bật (EN) |
3 |
Bit dữ liệu 4 (DB4) |
4 |
Bit dữ liệu 5 (DB5) |
5 |
Bit dữ liệu 6 (DB6) |
6 |
Bit dữ liệu 7 (DB7) |
7 |
LED tích cực |
5V |
LED âm bản |
Mặt đất (G) |
Việc mã hóa sẽ được giải thích ngắn gọn bên dưới. Sẽ có hai phần của bản phác thảo trong đó phần đầu tiên sẽ là phần máy phát và phần khác sẽ là phần máy thu. Tất cả các tệp phác thảo và video làm việc sẽ được cung cấp ở cuối hướng dẫn này. Để tìm hiểu thêm về giao tiếp mô-đun RF với Arduino Uno, hãy nhấp vào liên kết.
Lập trình STM32F103C8 để truyền RF không dây
STM32F103C8 có thể được lập trình bằng Arduino IDE. Không cần lập trình FTDI hoặc ST-Link để tải mã lên STM32F103C8. Chỉ cần kết nối với PC qua cổng USB của STM32 và bắt đầu lập trình với ARDUINO IDE. Bạn có thể học Lập trình STM32 của mình trong Arduino IDE bằng cách nhấp vào liên kết.
Trong phần máy phát, khoảng cách của đối tượng tính bằng 'cm' được đo bằng cảm biến siêu âm và giá trị số từ (0 đến 100) được thiết lập bằng chiết áp được truyền qua máy phát RF giao tiếp với STM32.
Đầu tiên, thư viện Radiohead được bao gồm, có thể tải xuống từ đây. Vì thư viện này sử dụng ASK (Kỹ thuật khóa dịch chuyển biên độ) để truyền và nhận dữ liệu. Điều này làm cho việc lập trình rất dễ dàng. Bạn có thể đưa thư viện vào sketch bằng cách vào Sketch-> include library-> Thêm thư viện.zip.
#include
Như trong hướng dẫn này, ở phía máy phát, một cảm biến siêu âm được sử dụng để đo khoảng cách, do đó chân kích hoạt và tiếng vọng được xác định.
#define trigPin PB1 #define echoPin PB0
Tiếp theo, tên đối tượng cho thư viện RH_ASK được đặt là rf_driver với các tham số như tốc độ (2000), chân RX (PA9) và chân TX (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
Tiếp theo, biến Strings cần thiết trong chương trình này được khai báo.
Chuỗi truyền_số; String truyền_dẫn; Chuỗi truyền;
Tiếp theo trong void setup (), đối tượng cho RH_ASK rf_driver được khởi tạo.
rf_driver.init ();
Sau đó, chân kích hoạt được đặt làm chân OUTPUT và PA0 (kết nối với chiết áp) và chân echo được đặt làm chân INPUT. Giao tiếp nối tiếp bắt đầu ở tốc độ truyền là 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Tiếp theo trong vòng lặp void (), đầu tiên giá trị chiết áp là điện áp Analog đầu vào được chuyển đổi thành giá trị số (giá trị ADC được tìm thấy). Như ADC của STM32 có độ phân giải 12-bit. Vì vậy, giá trị kỹ thuật số thay đổi từ (0 đến 4096) được ánh xạ thành (0 đến 100).
int analoginput = analogRead (PA0); int pwmvalue = map (analoginput, 0,4095,0,100);
Tiếp theo, khoảng cách được đo bằng cảm biến siêu âm bằng cách cài đặt kích hoạt cao và thấp với độ trễ là 2 micro giây.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Chốt tiếng vang cảm nhận được sóng phản xạ trở lại, đó là khoảng thời gian mà sóng được kích hoạt bị phản xạ trở lại được sử dụng để tính khoảng cách của đối tượng bằng công thức. Tìm hiểu thêm cách cảm biến siêu âm tính toán khoảng cách, theo liên kết.
thời gian dài = xungIn (echoPin, CAO); khoảng cách nổi = thời lượng * 0,034 / 2;
Giờ đây, cả số liệu và khoảng cách đo được đều được chuyển đổi thành dữ liệu chuỗi và được lưu trữ trong các biến chuỗi tương ứng.
truyền_số = String (pwmvalue); truyền_distance = String (khoảng cách);
Cả chuỗi được thêm vào dưới dạng một dòng và được lưu trữ trong chuỗi được gọi là truyền và dấu phẩy “,” được sử dụng để phân tách hai chuỗi.
truyền = truyền_pháp + "," + khoảng cách truyền;
Chuỗi truyền được chuyển thành mảng ký tự.
const char * msg = transfer.c_str ();
Dữ liệu được truyền và đợi cho đến khi nó được gửi.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Dữ liệu chuỗi được gửi cũng được hiển thị trong Serial Monitor.
Serial.println (thư);
Lập trình Arduino UNO làm Bộ thu RF
Arduino UNO được lập trình bằng Arduino IDE. Trong phần bộ thu, dữ liệu được truyền từ bộ phận phát và được nhận bởi mô-đun thu RF và dữ liệu chuỗi nhận được được chia thành dữ liệu tương ứng (khoảng cách và số) và hiển thị trên màn hình LCD 16x2.
Hãy xem ngắn gọn mã hóa máy thu:
Giống như trong phần máy phát đầu tiên, thư viện RadiohHead được bao gồm. Vì thư viện này sử dụng ASK (Kỹ thuật khóa dịch chuyển biên độ) để truyền và nhận dữ liệu. Điều này làm cho việc lập trình rất dễ dàng.
#include
Vì màn hình LCD được sử dụng ở đây nên thư viện tinh thể lỏng cũng được bao gồm.
#include
Và các chân hiển thị LCD 16x2 được kết nối với Arduino UNO được chỉ định và khai báo bằng cách sử dụng lcd làm đối tượng.
LiquidCrystal lcd (2,3,4,5,6,7);
Tiếp theo, các biến dữ liệu chuỗi để lưu trữ dữ liệu chuỗi được khai báo.
Chuỗi str_receive; Chuỗi str_number; Chuỗi str_distance;
Đối tượng cho thư viện Radiohead được khai báo.
RH_ASK rf;
Bây giờ trong void setup (), Màn hình LCD được đặt ở chế độ 16x2 và thông báo chào mừng được hiển thị và xóa.
lcd.begin (16,2); lcd.print ("ĐOẠN MẠCH"); lcd.setCursor (0,1); lcd.print ("RF với STM32"); chậm trễ (5000); lcd.clear ();
Sau đó, đối tượng rf được khởi tạo.
rf.init ();
Bây giờ trong vòng lặp void (), Array buf được khai báo với kích thước là 7. Vì dữ liệu được gửi từ máy phát có 7 bao gồm dấu “,”. Vì vậy, hãy thay đổi điều này theo dữ liệu sẽ được truyền.
uint8_t buf; uint8_t buflen = sizeof (buf);
Nếu chuỗi có sẵn tại mô-đun bộ thu rf, hàm if sẽ kiểm tra kích thước và nó thực thi. Các rf.recv () được sử dụng để nhận dữ liệu.
if (rf.recv (buf, & buflen))
Các buf có chuỗi đã nhận như vậy thì nhận được chuỗi được lưu trữ trong một str_receive biến chuỗi.
str_receive = String ((char *) buf);
Đây cho vòng lặp được sử dụng để phân chia các chuỗi nhận thành hai nếu nó phát hiện '' ở giữa hai chuỗi.
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); phá vỡ; }
Hai mảng char cho hai giá trị được khai báo và Chuỗi được chia thành hai được lưu trữ trong mảng được tôn trọng bằng cách chuyển đổi chuỗi thành mảng ký tự.
ký tự số char; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (chuỗi số, 3);
Sau đó chuyển đổi mảng ký tự thành số nguyên bằng atoi ()
int distance = atoi (distancestring); int number = atoi (numbertring);
Sau khi chuyển đổi thành giá trị số nguyên, khoảng cách và số giá trị được hiển thị trên màn hình LCD 16x2
lcd.setCursor (0,0); lcd.print ("Số:"); lcd.print (số); lcd.setCursor (0,1); lcd.print ("Khoảng cách:"); lcd.print (khoảng cách); lcd.print ("cm");
Sau khi tải lên cả hai mã tức là máy phát và máy thu trong STM32 và Arduino UNO tương ứng, dữ liệu như số và khoảng cách đối tượng được đo bằng STM32 được truyền đến máy thu RF thông qua Máy phát RF và các giá trị nhận được được hiển thị không dây trên màn hình LCD.
Thử nghiệm máy phát và máy thu RF dựa trên STM 32
1. Khi số 0 và khoảng cách vật là 6cm.
2. Khi số 47 và khoảng cách của vật là 3cm.