课程导入

这节课,我们将总结本章节所做的项目内容,通过电子硬件的不同组合,发掘新的项目,为创建自己的项目做准备,并通过练习巩固库的创建和使用。

知识锦囊

通过本章的练习,我们已经能够将所学的电子硬件和编程知识应用于实践当中,从而去解决一些生活中的问题。首先我们来回顾一下都做了哪些项目,实现了什么功能。

项目名称 传感器 执行器显示器 项目实现
温湿度监测 温湿度传感器 LCD、蜂鸣器 检测环境温度和湿度并显示在 LCD 显示屏上,超过一定范围即警报
智能风扇 温湿度传感器 迷你风扇、LCD 检测温度,超过体感舒适即开启风扇,并将实时温度显示在 LCD 显示屏上
智能灯 光线传感器、声音传感器 RGB LED 可调彩灯(WS2813 mini) 用光线传感器实现光控灯,当光线较弱则灯开,当光线足够时则启动噪音检测,针对不同程度的噪音显示不同颜色的提示灯。
自动门 人体红外运动传感器 舵机 当检测到有人靠近,舵机转动开门,等待10秒舵机转动关门

我们在进行项目实践时,不同传感器和执行器的结合,可以玩出很多花样。比如 LED 灯可以用作照明,同时也可以用作警示灯,提醒装置,蜂鸣器可以播放旋律,也可以用作报警装置,和 LED 灯结合在一起,声光警示更有效。因此,我们要对电子模块的功能有更灵活的认知。请大家根据上表所示的项目进行拓展或改造,填下在下表中:

项目名称 传感器 执行器显示器 项目实现

这里提供一个案例,在自动门的基础上添加欢迎的效果:

项目名称 传感器 执行器显示器 项目实现
欢迎装置 人体红外运动传感器 舵机、LCD、蜂鸣器 当检测到有人靠近,舵机转动开门,LCD 显示 “welcome” ,蜂鸣器播放欢迎旋律

接下来,我们就一起实现这个项目。

实践操作

这个项目的难点在于蜂鸣器播放欢迎旋律,回顾第八课的内容,要想控制无源蜂鸣器播放旋律,需要通过调整PWM 信号的频率和占空比来实现,并且要对七个基本音节一一进行设定才可以,因此我们通过自定义函数简化程序,将每一个音节都定义为一个函数,当我们需要演奏该音节时,只需要调用该函数即可。这节课,我们进一步简化程序,将关于音节的函数封装在库中,使用时只需调用库中的相关函数即可。

项目一:蜂鸣器播放欢迎旋律

硬件连接

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

  • 树莓派 Pico
  • 树莓派 Pico 拓展板
  • Grove - 无源蜂鸣器

插接好 Pico 和拓展板,使用 Grove 数据线将蜂鸣器连接到A1接口。
页面_9.png

编写程序

首先创建蜂鸣器的库,对蜂鸣器的 PWM 引脚以及七个基本音节进行定义,如下:

  1. from machine import PWM
  2. #创建Freq元组,包含不发声,DO,RE,MI,FA,SO,LA,SI
  3. Freq = (30000,1046,1174,1318,1396,1567,1780,1975,2085)
  4. #下面定义了一个Music对象
  5. class Music:
  6. #对创建的类添加构造函数:
  7. def __init__(self,pwm_pin):
  8. #定义pwm引脚变量
  9. self.pwm = pwm_pin
  10. #定义music的实例方法,用以播放不同的音节
  11. def music(self, number):
  12. self.pwm.freq(Freq[number]) #Freq[number]列表中,包含从0—7八个元素,当我们想要播放RE音节,只需要用写music(3)即可
  13. self.pwm.duty_u16(5000)

创建好库文件后,将其命名为 buzzer.py 并保存在 Pico 中,接下来就可以调用 buzzer 库播放旋律了。
我们将《铃儿响叮当》其中的一句旋律播放出来,程序如下:

from machine import Pin,PWM
from buzzer import Music
from utime import sleep

pwm = PWM(Pin(27))
mu = Music(pwm)

while True:
    mu.music(4)
    sleep(0.25)
    mu.music(0)
    sleep(0.1)  
    mu.music(4)
    sleep(0.25)   
    mu.music(0)
    sleep(0.1)  
    mu.music(4)
    sleep(0.5)  
    mu.music(0)
    sleep(0.1)

    mu.music(4)
    sleep(0.25) 
    mu.music(0)
    sleep(0.1)
    mu.music(4)
    sleep(0.25)
    mu.music(0)
    sleep(0.1) 
    mu.music(4)
    sleep(0.5)   
    mu.music(0)
    sleep(0.1)

    mu.music(4)
    sleep(0.25)
    mu.music(6)
    sleep(0.25)
    mu.music(2)
    sleep(0.35)
    mu.music(3)
    sleep(0.15) 
    mu.music(4)
    sleep(1)  
    mu.music(0)
    sleep(0.1)

image.png
运行该程序,听听看是不是铃儿响叮当呢?
蜂鸣器播放欢迎旋律.mp4
image.png

项目二:欢迎装置

下面,我们要实现欢迎装置的功能,当检测到有人靠近,舵机转动开门,LCD 显示 “welcome” ,蜂鸣器播放欢迎旋律。

硬件连接

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

  • 树莓派 Pico
  • 树莓派 Pico 拓展板
  • Grove - 无源蜂鸣器
  • Grove - 16 x 2 LCD 显示屏
  • Grove - 舵机
  • Grove - 人体红外运动传感器

将蜂鸣器接入A1接口,人体红外运动传感器接入D18接口,舵机接入D20接口,最后将 LCD 接入 I2C1 接口。
页面_21.png

编写程序

首先引入需要用到的库,包括 macine、utime 标准库,lcd1602、servo 以及我们刚刚创建的 buzzer 库,并对要使用到的模块进行引脚定义。

from machine import Pin,I2C,PWM
from utime import sleep
from servo import SERVO
from lcd1602 import LCD1602
from buzzer import Music

servo = SERVO(Pin(20))
miniPir = Pin(18, Pin.IN)
pwm = PWM(Pin(27))
mu = Music(pwm)
i2c = I2C(1,scl=Pin(7), sda=Pin(6), freq=400000)
d = LCD1602(i2c, 2, 16)

接下来我们通过if语句对人体红外运动传感器检测到的状态进行判断,当检测到有人靠近,则舵机转动160°表示开门,LCD 显示屏显示 Welcome ,蜂鸣器开始演奏欢迎旋律。这部分代码在前面的课程中都有学习过,只需要按照功能实现的逻辑进行组合,完整程序如下:

from machine import Pin,I2C,PWM
from utime import sleep
from servo import SERVO
from lcd1602 import LCD1602
from buzzer import Music

servo = SERVO(Pin(20))
miniPir = Pin(18, Pin.IN)
pwm = PWM(Pin(27))
mu = Music(pwm)
i2c = I2C(1,scl=Pin(7), sda=Pin(6), freq=400000)
d = LCD1602(i2c, 2, 16)

while True:
    if miniPir.value()== 1:
        print('Motion Detected')
        servo.turn(180)
        d.display() 
        sleep(1)
        d.clear()
        d.print('Welcome') 

        mu.music(4)
        sleep(0.25)
        mu.music(0)
        sleep(0.1)  
        mu.music(4)
        sleep(0.25)   
        mu.music(0)
        sleep(0.1)  
        mu.music(4)
        sleep(0.5)  
        mu.music(0)
        sleep(0.1)

        mu.music(4)
        sleep(0.25) 
        mu.music(0)
        sleep(0.1)
        mu.music(4)
        sleep(0.25)
        mu.music(0)
        sleep(0.1) 
        mu.music(4)
        sleep(0.5)   
        mu.music(0)
        sleep(0.1)

        mu.music(4)
        sleep(0.25)
        mu.music(6)
        sleep(0.25)
        mu.music(2)
        sleep(0.35)
        mu.music(3)
        sleep(0.15) 
        mu.music(4)
        sleep(1)  
        mu.music(0)
        sleep(0.1)

        servo.turn(0)

image.png
完成后,将程序保存在电脑任意位置,用手靠近人体红外运动传感器,测试欢迎装置的效果。
欢迎装置.mp4
image.png

思维拓展

本节课,我们通过前面所学的知识,对已有项目自动门进行拓展,完成了欢迎装置的功能。接下来,尝试实现你在知识锦囊中写下的想要实现的项目吧。

项目名称 传感器 执行器显示器 项目实现