2896浏览
查看: 2896|回复: 6

[教程] 用树莓派实现自动温控小风扇

[复制链接]
本帖最后由 咕叽大虾 于 2020-9-25 15:14 编辑

最近一段时间在学习树莓派,光扒教程总觉得学起来很空洞,所以想着要不要做个小装置来巩固一下学到的知识。正巧,这两天群里广东的姐妹天天羡慕成都的气候,说自己依然短袖空调离不了,逼迫我必须为她悲惨的境遇做点什么。于是,慎重考虑后,决定写一篇树莓派驱动的温控小风扇教程给她,希望她在学到知识的同时还能收获凉爽。(以为是小风扇?别骂了别骂了,我就是穷了点,爱姐妹的心是不变的),绝对新手友好(毕竟自己真就新手不是?),放心吃安利。

一、硬件准备
1.    已装系统的树莓派3代B型  X1(DFR0567-1)(3B购买地址https://www.dfrobot.com.cn/goods-1766.html)
(选择更新版完全没有问题 树莓派4代B型(4GB)  DFR0619)(4B购买地址https://www.dfrobot.com.cn/goods-1977.html)

2.    树莓派4B/3B+IO扩展板    X1(DFR0566)
(注意一定是有IO口的)(购买地址https://www.dfrobot.com.cn/goods-2041.html)

3.    舵机            X1(SER0011)
(购买地址https://www.dfrobot.com.cn/goods-224.html)

4.    直流电机风扇    X1(DFR0411)
(电机风扇一件搞定,不错不错)(购买地址https://www.dfrobot.com.cn/goods-1251.html)

5.    BME680环境传感器  X1  (SEN0248)
(可以测很多,我这次只用到了温度)(购买地址https://www.dfrobot.com.cn/goods-1621.html)

6.    一根数据线
(根据树莓派的电源接口选择安卓线或是type C线)以及5V/3A USB电源适配器
(建议准备适配器,不要直接从主机供电)(FIT0351-OE)(购买地址https://www.dfrobot.com.cn/goods-838.html)

7.    一根网线
(树莓派与PC应连接在同一个路由器上)

如图
GB~@MDCUN8ZUD0Z{KFTNEGK.png

二、软件准备
      我使用的远程连接软件是MobaXterm。

三、具体操作

1.硬件连接(如图)
      将扩展板插在树莓派上,然后直流电机风扇接5口,舵机接22口,环境传感器接IIC口。
有白框.png
CJ%{PG5VM3JOD%HJE_HU1.png

当然,你也可以选择别的引脚,但是请务必保证电机和舵机都是接在GPIO口上,具体引脚可以查看下图
L4H0`_]$W1EE`Z$H2Q_BM9Y.png

网线和电源线找准位置接好即可。(注意,电源线最好搭配适配器插在插座上,不要直接从主机供电,因为主机电流太小,不能保证电机和舵机顺畅运转。)

2.使能引脚以及安装i2c库和工具
在使用树莓派的I2C引脚之前,我们需要先使能I2C引脚。
输入以下代码,然后按照动图完成即可。

[mw_shl_code=applescript,false]sudo raspi-config[/mw_shl_code]
2-使能引脚.gif

选择时,使用键盘右边的上下键,最后退出时,按住左上角的Esc即可。
接着,我们需要安装i2c库和工具

[mw_shl_code=applescript,false]sudo apt-get install i2c-tools[/mw_shl_code]
装i2c库.png

3.下载环境传感器BME680的库文件
      注意,最好点进左侧desktop文件夹下操作,否则可能会引发问题,没有权限删除添加文件之类的。(如果已经出现了这个问题,可以继续在desktop文件夹下按照下述操作)

   1)本地下载后拖进树莓派,如图
[mw_shl_code=applescript,false]git clone https://github.com/DFRobot/DFRobot_BME680[/mw_shl_code]
forum.php.png

2)树莓派直接下载,耐心等待一下,需要一点时间。
[mw_shl_code=applescript,false]sudo git clone https://github.com/DFRobot/DFRobot_BME680[/mw_shl_code]
forum-1.php.png

4.找到BME680库文件中的读取数据文件
      按照以下顺序点进文件夹DFRobot_BME680->Python->RaspberryPi->examples,即可看到一个名为read_all_data.py的python文件。
      鼠标点击路径处复制一下,然后输入
[mw_shl_code=applescript,false]cd /home/pi/Desktop/DFRobot_BME680/Python/RaspberryPi/examples/[/mw_shl_code]
      如动图所示
forum.php.gif

       输入以下代码运行这个文件即可读到环境传感器的所有数据,如图。
[mw_shl_code=applescript,false]python read_all_data.py[/mw_shl_code]
ZJ])K读取数据.png

      按住ctrl+c即可退出运行状态。

5.修改代码。
      在这个代码的基础上,我加入了舵机和电机风扇的代码。
      你可以这样操作:在pc桌面新建一个文本文件,重命名为auto_fan.py。如图。
forum-2.php.png
      然后打开后把下面的代码粘贴进去,保存后,把它拖进列表即可,如图。
[mw_shl_code=applescript,false]
import sys
sys.path.append('../')
from DFRobot_BME680 import DFRobot_BME680
import time
import RPi.GPIO as GPIO
import signal  
import atexit

atexit.register(GPIO.cleanup)  
servopin = 22
motorpin=5
GPIO.setmode(GPIO.BCM)
GPIO.setup(servopin,GPIO.OUT)
GPIO.setup(motorpin,GPIO.OUT)
angle=GPIO.PWM(servopin,50)
angle.start(0)

sensor = DFRobot_BME680()

sensor.set_humidity_oversample(sensor.OS_2X) #Oversampling value: OS_NONE, OS_1X, OS_2X, OS_4X, OS_8X, OS_16X
sensor.set_pressure_oversample(sensor.OS_4X) #Oversampling value: OS_NONE, OS_1X, OS_2X, OS_4X, OS_8X, OS_16X
sensor.set_temperature_oversample(sensor.OS_8X) #Oversampling value: OS_NONE, OS_1X, OS_2X, OS_4X, OS_8X, OS_16X
sensor.set_filter(sensor.FILTER_SIZE_3) #increasing resolution but reducing bandwidth
sensor.set_gas_status(sensor.ENABLE_GAS_MEAS) #1 for enable and 0 for disable
sensor.set_gas_heater_temperature(320) #value:target temperature in degrees celsius, between 200 ~ 400
sensor.set_gas_heater_duration(150) #value:target duration in milliseconds, between 1 and 4032
sensor.select_gas_heater_profile(0) #value:current gas sensor conversion profile: 0 to 9

print("\n\nPolling:")

while True:   
          if sensor.get_sensor_data():
                 if sensor.data.temperature>25.00:
                        GPIO.output(motorpin,GPIO.HIGH)
                        for dc in range(0,181,1):
                                angle.ChangeDutyCycle(float(dc)/18+2.5)
                                time.sleep(0.1)                          
                        for dc in range(180,-1,-1):
                                angle.ChangeDutyCycle(float(dc)/18+2.5)
                                time.sleep(0.1)                                    
                 else:
                        GPIO.output(motorpin,GPIO.LOW)
                        angle.stop()            
          print("temperature: {0:.2f} C, pressure: {1:.2f} hPa, humidity: {2:.2f} %RH".format(sensor.data.temperature,  sensor.data.pressure, sensor.data.humidity))   
          time.sleep(1)
[/mw_shl_code]

      演示如图:
forum-1.php.gif

      小贴士,如果在编辑保存操作过程中弹出如图显示框,选择第三项即可。
forum-3.php.png

6.运行程序
[mw_shl_code=applescript,false]Python auto_fan.py[/mw_shl_code]
      显示结果如图所示:
forum-4.php.png

      ctrl+c即可退出程序。
      视频效果如下:

MQ7(GN0I{$]1I4J6GB_U
.png

gray6666  初级技神

发表于 2020-9-24 15:34:22

这个扩展板很好用
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-9-25 08:55:06

gray6666 发表于 2020-9-24 15:34
这个扩展板很好用

嗯嗯,我会继续探索的,之后想用它做点好玩的东西出来。
回复

使用道具 举报

pATAq  版主

发表于 2020-9-28 22:58:41

很好的教程,感谢分享
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-10-19 17:40:21

pATAq 发表于 2020-9-28 22:58
很好的教程,感谢分享

谢谢鼓励,下次尝试更好玩的应用!
回复

使用道具 举报

gray6666  初级技神

发表于 2020-11-15 11:18:16

很赞的实用案例,赞一个
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-11-15 16:12:56

gray6666 发表于 2020-11-15 11:18
很赞的实用案例,赞一个

谢谢鼓励
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail