咕叽大虾 发表于 2020-9-24 11:58:05

用树莓派实现自动温控小风扇

本帖最后由 咕叽大虾 于 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应连接在同一个路由器上)
如图
二、软件准备      我使用的远程连接软件是MobaXterm。
三、具体操作
1.硬件连接(如图)      将扩展板插在树莓派上,然后直流电机风扇接5口,舵机接22口,环境传感器接IIC口。
当然,你也可以选择别的引脚,但是请务必保证电机和舵机都是接在GPIO口上,具体引脚可以查看下图
网线和电源线找准位置接好即可。(注意,电源线最好搭配适配器插在插座上,不要直接从主机供电,因为主机电流太小,不能保证电机和舵机顺畅运转。)
2.使能引脚以及安装i2c库和工具
在使用树莓派的I2C引脚之前,我们需要先使能I2C引脚。
输入以下代码,然后按照动图完成即可。
sudo raspi-config
选择时,使用键盘右边的上下键,最后退出时,按住左上角的Esc即可。接着,我们需要安装i2c库和工具
sudo apt-get install i2c-tools
3.下载环境传感器BME680的库文件      注意,最好点进左侧desktop文件夹下操作,否则可能会引发问题,没有权限删除添加文件之类的。(如果已经出现了这个问题,可以继续在desktop文件夹下按照下述操作)
   1)本地下载后拖进树莓派,如图git clone https://github.com/DFRobot/DFRobot_BME680
2)树莓派直接下载,耐心等待一下,需要一点时间。sudo git clone https://github.com/DFRobot/DFRobot_BME680
4.找到BME680库文件中的读取数据文件      按照以下顺序点进文件夹DFRobot_BME680->Python->RaspberryPi->examples,即可看到一个名为read_all_data.py的python文件。      鼠标点击路径处复制一下,然后输入cd /home/pi/Desktop/DFRobot_BME680/Python/RaspberryPi/examples/      如动图所示
       输入以下代码运行这个文件即可读到环境传感器的所有数据,如图。python read_all_data.py
      按住ctrl+c即可退出运行状态。
5.修改代码。      在这个代码的基础上,我加入了舵机和电机风扇的代码。      你可以这样操作:在pc桌面新建一个文本文件,重命名为auto_fan.py。如图。      然后打开后把下面的代码粘贴进去,保存后,把它拖进列表即可,如图。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)
      演示如图:
      小贴士,如果在编辑保存操作过程中弹出如图显示框,选择第三项即可。
6.运行程序Python auto_fan.py      显示结果如图所示:
      ctrl+c即可退出程序。      视频效果如下: https://www.bilibili.com/video/BV1dZ4y1N77W

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

很赞的实用{:6_209:}案例,赞一个

咕叽大虾 发表于 2020-11-15 16:12:56

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

{:7_219:}谢谢鼓励
页: [1]
查看完整版本: 用树莓派实现自动温控小风扇