毕设笔记06-使用Python读取Arduino+树莓派串口温湿度数据并保存

本文介绍如何使用树莓派与Arduino配合,通过DHT11传感器采集温湿度数据,并利用Python与pyserial模块将数据保存至本地。文章包含Arduino代码与Python代码示例,展示了实时数据采集及存储过程。

之前实践了使用Python读取电脑端口的数据并保存到本地毕设笔记05,该功能实现主要在于 pyserial模块封装了对串口的访问,既然serial能够访问电脑的串口,那么同理也能访问树莓派的串口。该篇尝试将Arduino连接到树莓派并保存所采集的温湿度数据。
1、Arduino代码
该代码已经预先装好了DHT11所需要的库文件,如果不会装库文件可以参考之前发的帖子毕设笔记04

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 4 
void setup(){
    Serial.begin(9600);
} 
void loop(){
    int chk;
    chk = DHT.read(DHT11_PIN); 
    Serial.print("Humidity:");
    Serial.print(DHT.humidity,1);
    Serial.print("  ,");
    Serial.print("Temperature:");
    Serial.println(DHT.temperature,1);
    delay(1000);
}

串口显示结果如下:
在这里插入图片描述
2、Python代码
在电脑使用Python时需要安装pyserial模块,我在树莓派上执行安装语句提示我该模块已存在,当然没有的话可以安装一下,安装也挺快的,执行如下语句即可

pip install pyserial

在树莓派Python的安装路径下新建***.py文件,打开文件输入以下代码:

import time
import serial
ser = serial.Serial(
    port='/dev/ttyACM1',                  
    baudrate=9600,
    parity=serial.PARITY_ODD,     
    stopbits=serial.STOPBITS_TWO, 
    bytesize=serial.SEVENBITS     
)
data = ''
while True:
    data = ser.readline()
    t = time.time()
    ct = time.ctime(t)
    print(ct, ':')
    print(data)
    f = open('shuju.txt', 'a')
    f.writelines(ct)
    f.writelines(':\n')
    f.writelines(data.decode('utf-8'))
    f.close()

注:树莓派串口默认等同于对应的电脑串口:/dev/ttyACM1=COM1
在执行代码的时候在Python安装路径下建立保存数据的 .txt文件,使用如下命令创建文件,创建成功即可在目录查看文件

touch shuju.txt  #文件名与代码中保存数据的文件名一致

在这里插入图片描述
最后执行上述代码,串口采集的数据将显示出来,打开保存数据的文件也会有相应的数据,话不多说上图:
在这里插入图片描述
(烧写树莓派系统之后也没有调整过时间,时间不合适默认没多大影响)

从网上找到了一篇python serial 模块使用方法的帖子,放在这里供大家可以参考参考serial如何使用

<think>好的,用户问的是“Arduino+树莓派可以实现吗”,之前他们的问题是关于用摄像头识别红色小球用机械臂抓取的实现方案。我之前给了一个分步指南,其中提到建议从开源方案如Arduino+树莓派开始验证可行性。现在用户可能想确认这两个硬件是否足够,或者想了解具体如何结合使用。 首先,我需要确定用户的实际需求。他们可能是一个刚开始接触机器人项目的学生或者爱好者,预算有限,想用低成本硬件实现功能。所以需要解释Arduino树莓派各自的角色,以及如何协同工作。 接下来,要分解问题。用户想知道是否Arduino树莓派能实现他们的项目。我需要说明两者的分工:树莓派处理图像识别和复杂计算,Arduino控制机械臂的底层动作。这样组合起来可以发挥各自的优势,树莓派处理能力强,适合运行OpenCV,而Arduino实时控制好,适合驱动电机。 然后需要考虑用户可能的疑问,比如通信方式,如何连接这两个设备。常见的做法是通过串口(USB)或GPIO,需要提到UART、I2C等方法,举例说明代码结构,比如树莓派发送坐标数据ArduinoArduino解析后控制舵机。 还要考虑用户的实际操作中可能遇到的问题,比如延迟、稳定性,以及如何优化系统。比如建议使用多线程处理图像和通信,或者使用ROS进行更复杂的系统集成,但可能对新手来说太难,所以保持简单的方法。 另外,用户可能关心硬件连接的具体细节,比如需要哪些模块,摄像头选型,电源管理等。需要推荐一些常用的硬件,比如树莓派摄像头或USB摄像头,PCA9685舵机驱动板,以及如何供电。 可能还要提到预算和扩展性,比如入门级成本大概多少,未来如何升级到更专业的硬件,同时保持当前方案的可行性。 最后,总结Arduino+树莓派的优缺点,确保用户了解这种方案的适用场景和限制,比如适合小型项目,处理复杂任务可能需要更强大的硬件,但对于学习和原型开发足够。</think>--- ### **答案是肯定的!** Arduino + 树莓派是**最佳入门组合**,就像厨师(树莓派)配助手(Arduino)的黄金搭档: --- ### **一、分工原理(角色定位)** ```mermaid graph LR A[树莓派] -->|视觉处理/复杂计算| B(大脑) A -->|发送坐标指令| C[Arduino] C -->|精确控制电机| D(机械臂) C -->|读取传感器| E(夹爪力度) ``` #### **优势对比表** | | 树莓派 | Arduino | |----------|---------------------------------|-----------------------------| | **特长** | 图像识别/复杂运算 | 实时控制/硬件驱动 | | **性能** | 1.5GHz CPU/1GB RAM (微型电脑) | 16MHz 单片机 (精准计时器) | | **功耗** | 3-5W (需稳定电源) | <1W (电池可供电) | | **成本** | ¥300-500 (4B型号) | ¥20-50 (Nano型号) | --- ### **二、具体实现方案(快递站工作流程)** #### **1. 硬件接线示意图** ``` 树莓派GPIO (UART引脚) │ ├── TX -> Arduino RX ├── RX <- Arduino TX └── GND -- 共地 ``` #### **2. 核心代码框架** **树莓派端 (Python) - 视觉处理** ```python # 红色检测代码(同前) ... # 检测到目标时发送坐标 if target_found: ser = serial.Serial('/dev/ttyUSB0', 9600) # 连接串口 ser.write(f"{x},{y}\n".encode()) # 发送坐标数据 ``` **Arduino- 机械臂控制** ```cpp #include <Servo.h> Servo base, shoulder, elbow, gripper; void setup() { Serial.begin(9600); base.attach(9); // 底座舵机接9号引脚 // 其他舵机初始化... } void loop() { if(Serial.available()){ String data = Serial.readStringUntil('\n'); int commaIndex = data.indexOf(','); float x = data.substring(0, commaIndex).toFloat(); float y = data.substring(commaIndex+1).toFloat(); // 逆运动学计算(简化为线性比例) int base_angle = map(x, 0, 640, 0, 180); // 假设摄像头分辨率640x480 int elbow_angle = map(y, 0, 480, 30, 150); base.write(base_angle); elbow.write(elbow_angle); delay(500); // 等待运动完成 gripper.write(90); // 闭合夹爪 } } ``` --- ### **三、关键问题解决方案** #### **1. 实时性优化** - **多线程处理**:树莓派使用`threading`模块分离图像处理和串口通信 - **运动插值**:Arduino端添加`SweepServo`函数实现平滑运动 ```cpp void SweepServo(Servo s, int from, int to) { for(int pos=from; pos<=to; pos++) { s.write(pos); delay(15); // 控制运动速度 } } ``` #### **2. 电源管理** | 部件 | 供电方案 | 注意事项 | |--------------|------------------------------|---------------------------| | 树莓派 | 5V/3A Type-C电源 | 必须稳定供电 | | Arduino | 9V电池或共享树莓派5V引脚 | 总电流不超过500mA | | 舵机组 | 独立6V锂电池组 | 避免反向电流冲击控制板 | --- ### **四、推荐硬件配置** #### **经济型套装(约¥600)** - 树莓派4B (2GB版) - Arduino Nano - 4自由度机械臂套件(含SG90舵机x4) - 罗技C270摄像头 - PCA9685舵机驱动板(可选,提升控制精度) #### **进阶建议** 1. **增加反馈系统**:在Arduino端添加光电开关实现到位检测 2. **升级通信协议**:改用I2C或蓝牙传输数据 3. **引入ROS**:通过`rosserial`实现更复杂的机器人控制 --- ### **五、学习资源推荐** 1. **基础教程** -树莓派Arduino协同开发实战》 (人民邮电出版社) - Arduino官方文档:`https://www.arduino.cc/reference/en/` 2. **视频课程** - B站:硬石科技《基于OpenCV的机械臂控制》 - YouTube:Paul McWhorter的Arduino机械臂系列 3. **开源项目** - GitHub搜索:`arduino-robotic-arm` - ROS Wiki的MoveIt!教程 --- ### **六、常见故障排查表** | 现象 | 可能原因 | 解决方法 | |----------------------|---------------------------|----------------------------| | 舵机抖动 | 供电不足 | 使用独立电池供电 | | 坐标偏移 | 未进行手眼标定 | 用棋盘格重新标定 | | 通信中断 | 地线未连接 | 检查GND是否共地 | | 图像卡顿 | USB带宽不足 | 降低摄像头分辨率至640x480 | --- 通过这个方案,你可以在¥1000以内搭建完整的原型系统。建议先用纸箱和筷子制作简易机械臂测试算法,再逐步升级硬件配置。遇到问题时,记住**分段测试**(先验证视觉→再测试通信→最后调试机械臂)能大幅降低调试难度!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值