Prj1:智能远程开关灯

一、硬件:

Arduino Uno。

SG90舵机X2。

HC-06蓝牙模块。(应该买HC-05可作主从机,HC-06仅作从机无法主动连接其他蓝牙设备,例如台式电脑(USB转蓝牙模块)连蓝牙耳机。若通信时数据不匹配,是波特率默认9600。)

高粘度双面胶。

 

二、遇到的问题:

1.(现象):Arduino连接蓝牙模块,下载程序会一直提示uploading,无法下载成功。

(解决):串口冲突通常是因为两个设备试图同时使用同一个串口引脚。在 Arduino 中,串口通常使用引脚 0(RX)和引脚 1(TX)来进行通信。如果你连接了一个外部设备(例如蓝牙模块),并且该设备也试图使用这些引脚来进行通信,就会发生串口冲突。

 

2.(现象):【手机蓝牙调试工具】发送字符命令一直返回数据一直不正确。

(解决):这类串口工具有2个格式设置,一个是发送格式,一个是显示格式。把发送格式调为utf-8即可。

 

3.(现象):门口有2个灯的开关,舵机太小了,转动角度时长度不够,无法开关。

(解决)用小木棍和胶带绑住,或者3D打印,学学Solidwork / MAYA。

 

4.(现象):3.3V、5V供电问题,用9V,12V电池盒+降压模块,或者直接接线路。MP1584EN。

供电时间(单位:小时,h)= 电池容量(Ah) / (单片机的平均功耗(W) × 电池的额定电压(V))

 

三、接线

 

 

四、程序:

 1 #include <SoftwareSerial.h> // 导入软串口库
 2 
 3 SoftwareSerial BTSerial(0, 1); // 声明软串口对象,参数分别为 RX、TX 引脚
 4 
 5 const int servoPin1 = 9; // 第一个舵机的 PWM 引脚
 6 // const int servoPin2 = 10; // 第二个舵机的 PWM 引脚
 7 
 8 void setup() {
 9   pinMode(servoPin1, OUTPUT);
10   // pinMode(servoPin2, OUTPUT);
11 
12   // 初始化软串口,设置波特率为 9600
13   BTSerial.begin(9600);
14 
15   Serial.begin(9600);
16   Serial.println("Bluetooth Module HC-06 Ready!");
17 }
18 
19 void loop() {
20   // 等待蓝牙模块发送数据
21   while (BTSerial.available()) {
22     // 读取一行数据
23     String cmd = BTSerial.readStringUntil('\n');
24     cmd.trim(); // 去除字符串前后的空格
25 
26     if (cmd) {
27       // 设置舵机转动角度
28       int angle = cmd.toInt(); // 将字符串转换为整数
29       if (angle >= 0 && angle <= 180) {
30         // 舵机转动角度在 0-180 度之间
31         analogWrite(servoPin1, map(angle, 0, 180, 0, 255));
32         // analogWrite(servoPin2, map(angle, 0, 180, 0, 255));
33         Serial.print("Servo Angle: ");
34         Serial.println(angle);
35       } else {
36         Serial.println("Invalid Angle!");
37       }
38     } else {
39       Serial.println("Invalid Command!");
40     }
41   }
42 }

蓝牙串口调试软件:输出格式和显示格式都从hex改为utf-8,即可显示字符正常通信。

posted @ 2023-12-25 15:42  $KAMISAMALZ  阅读(7)  评论(0编辑  收藏  举报