课程导入

虽然空空已经是人们纳凉取暖的首选工具,但在日常生活中,风扇由于便携、省电、种类多样等优势一直深受欢迎。这节课,我们就来制作一个可以根据温度进行调节的智能风扇。

知识锦囊

迷你风扇

制作智能风扇要用到 Grove - 迷你风扇(Grove-Min Fan),它由一个电机驱动板、直流电机、软片扇叶和 Grove 连接线组成,如下图所示。电机因输入的电流不同可分为直流电机和交流电机,我们用到的是直流电机。直流电机能实现电能和机械能的互相转换,从而电机转动驱动其他电子设备。

第11课 智能风扇 - 图1第11课 智能风扇 - 图2
直流电机由定子和转子两大部分组成。定子的主要作用是产生磁场,转子的作用主要是产生电磁转矩和感应电动势。简单来说,当直流电机工作时,电机是根据电流的导体在磁场上受力的原理来工作的。电动机应用广泛,日常生活、工业、农业等只要有需要动力的地方,都有它工作的身影。

项目一:通过按钮控制风扇转动

首先我们通过按键来控制风扇转动,完成手动控制风扇的项目。回顾按键控制 LED 灯亮灭的程序,逻辑是一样的。

硬件连接

在该项目中,我们所需要使用的硬件有:

  • 树莓派 Pico
  • 树莓派 Pico 拓展板
  • Grove - 迷你风扇
  • Grove - 按键开关

使用 Grove 数据线将按键开关连接到拓展板 D16 接口,将迷你风扇连接到 D18 接口。
页面15.png

软件编程

同样,我们导入需要用到的库,为按键开关及风扇配置引脚。完成后用条件语句 if 做简单的条件判断:当按键开关被按下时,返回值为1,风扇转动,反之风扇关闭。完整代码如下:

  1. from machine import Pin
  2. BUTTON = machine.Pin(16,machine.Pin.IN)
  3. miniFan = machine.Pin(18,machine.Pin.OUT)
  4. while True:
  5. val = BUTTON.value()
  6. if val == 1:
  7. miniFan.value(1)
  8. else:
  9. miniFan.value(0)

虽然我们实现了当按键被按下时,风扇转动,当按键没有被按下时,风扇停止转动,但这不符合我们的使用习惯,一般情况下,我们把风扇打开后,就不会一直按着开关键了。在前面的课程中,我们也学习过通过创建变量解决按键控制 LED 灯的类似问题。这节课,我们将介绍另外一种方法,使用 toggle() 函数使风扇在高低电平两种状态切换,当按下按键时切换到高电平,再次按下切换到低电平,以此控制风扇的开关。

  1. import machine
  2. import utime
  3. button = machine.Pin(18, machine.Pin.IN)
  4. miniFan = machine.Pin(16, machine.Pin.OUT)
  5. val = 0
  6. while True:
  7. val = button.value()
  8. if val == 1:
  9. miniFan.toggle()
  10. utime.sleep_ms(100)

image.png
使用 USB 数据线将 Pico 连接到电脑,点击运行按钮将程序保存到电脑任意位置,按下程序运行按钮后,通过按键开关来测试运行效果。
按键控制风扇开关.mp4
image.png

项目二:温度感应智能风扇

风扇的作用主要是用来降温,因此我们可以用温度来控制风扇的开关,设定一个体感舒适的数值,当温度大于该数值,风扇转动,当温度低于该数值,风扇关闭,同时可以将温度值显示在 LCD 屏幕上。

硬件连接

在该项目中,我们所需要使用的硬件有:

  • Raspberry Pi Pico
  • Grove Shield for Pi Pico
  • Grove - Mini Fan
  • Grove - Temperature&Humidity Sensor
  • Grove - 16 x 2 LCD

使用 Grove 数据线将温湿度传感器连接到拓展板 D16 接口,将迷你风扇连接到 D18 接口,将 LCD 显示屏接在 I2C1 接口。
页面_16.png

软件编程

首先是引入需要用到的库以及对温湿度传感器、 LCD 显示屏、迷你风扇进行引脚配置。

  1. from lcd1602 import LCD1602
  2. from dht11 import *
  3. from machine import I2C,Pin,ADC
  4. from utime import sleep
  5. i2c = I2C(1,scl=Pin(7), sda=Pin(6), freq=400000)
  6. d = LCD1602(i2c, 2, 16)
  7. d.display()
  8. dht2 = DHT(16)
  9. miniFan = machine.Pin(18,machine.Pin.OUT)

接下来读取温湿度传感器检测到的数值,这里我们只需要读取温度值即可,并将数值显示在 LCD 显示屏上。

  1. while True:
  2. temp = dht2.readTemperature()#temp:
  3. sleep(1)
  4. d.clear()
  5. d.setCursor(0,0)
  6. d.print("Temp:"+str(temp))
  7. sleep(1)

最后,我们通过 if 条件判断语句对温度值进行判断,设置26为体感舒适的数值,用比较运算符”>”来进行当前温度和设定温度的对比,当大于设定温度时,风扇打开,否则风扇关闭:

if temp > 26:
    miniFan.value(1)
else:
    miniFan.value(0)

完整程序如下:

from lcd1602 import LCD1602
from dht11 import *
from machine import I2C,Pin,ADC
from utime import sleep

i2c = I2C(1,scl=Pin(7), sda=Pin(6), freq=400000)
d = LCD1602(i2c, 2, 16)
d.display()
dht2 = DHT(16)
miniFan = machine.Pin(18,machine.Pin.OUT)

while True:
    temp = dht2.readTemperature()#temp:   
    sleep(1)
    d.clear()
    d.setCursor(0,0)
    d.print("Temp:"+str(temp))
    sleep(1)
    if temp > 26:
        miniFan.value(1)
    else:
        miniFan.value(0)

image.png
如果您使用的是DHT20型号的温湿度传感器,参考以下程序:
image.png
使用 USB 数据线将 Pico 连接到电脑,点击运行按钮将程序保存到任意位置,你就能看到程序的实际运行效果。
智能风扇.mp4
image.png
除了通过按键以及温度感应控制风扇,你还能想到哪些控制方式呢,试试看吧。

思维拓展

企业微信截图_20210303105139.png
继电器是一个数字常开开关,可以在 250VAC 下长时间处理高达5A的电流,当继电器通路打开时,板载的 LED 灯会亮起,可以控制诸如 LED 灯、迷你风扇这类简单开关的模块,下面以迷你风扇为例,需要注意的是,因为我们的电扇是封装好的接口,需要将接口去掉进行操作,一旦去掉无法安装回去,所以仅作为参考。
首先我们需要将继电器如下图所示接入电路,将直流电机,也就是电扇的正极连接线接入继电器如图所示的位置,电扇的另一条黑色负极连接线接入电机驱动板的负极接口,在另找一条杜邦线将电机驱动的正极接口和继电器剩下的接口连接起来。最后用Grove线分将继电器,电机驱动板以及按键开关分别接入D20、D18、D16接口。
pico插图_12.png
电路连接好后开始程序编写,我们给电扇输出高电平,通过按键控制继电器的开关,从而控制整个电路的开和关。当按下按键后,继电器接通电路,风扇正常工作,当再次按下按键,继电器断开电路,风扇关闭。

from machine import Pin
from time import sleep
button = Pin(16,Pin.IN)
fan = Pin(18,Pin.OUT)
relay = Pin(20,Pin.OUT)

while True:
    fan.value(1)
    while button.value() == 1:
        relay.toggle()
        sleep(1)

image.png