================= 项目4 智能节能灯 ================= 一、概述 ========= 在前面的章节我们学习了如何点亮小灯,如何调节亮度等等功能,那像楼道灯那样,只会在黑夜且发出声音时才会亮起的灯是如何实现的呢?我们将在本项目中学习。 .. image:: images/4th.png 二、项目实施 ============ ---------------------------- (1)通过光线亮度控制小灯 ---------------------------- **硬件准备:** 主控:Arduino UNO、IO 传感器扩展板 V7.1 模块:LED发光模块、光线传感器 连接线:TypeAtoB方口USB连接线 .. image:: images/04LDL1.png - 将LED模块接入D13引脚,光线传感器接入A2引脚 **程序编写:** 1. 打开pingpong库的官方文档,找到基础库示例中的“模拟输入”,并用IDLE打开。 .. image:: images/0411.png 2. 修改代码,当亮度低于100的时候,点亮LED灯。 .. code-block:: python import time from pinpong.board import Board,Pin Board("uno").begin() Light = Pin(Pin.A2,Pin.ANALOG) LED = Pin(Pin.D13, Pin.OUT) while True: vl=Light.read_analog() print("Light=",vl) if vl < 100: LED.write_digital(1) else: LED.write_digital(0) 3. 摁下F5运行程序,查看效果。当亮度低于100(遮住光线传感器)的时候LED灯会亮起,恢复后LED灯会熄灭。 .. image:: images/0412.png ---------------------------- (2)加入声音传感器检测 ---------------------------- **硬件准备:** 主控:Arduino UNO、IO 传感器扩展板 V7.1 模块:LED发光模块、光线传感器、声音传感器 连接线:TypeAtoB方口USB连接线 .. image:: images/04LDL2.png - 将LED模块接入D13引脚,光线传感器接到A2引脚,声音传感器接到A1引脚。 **程序编写** .. code-block:: python import time from pinpong.board import Board,Pin #导入必要的库函数 Board("uno").begin()#初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别 Sound = Pin(Pin.A1,Pin.ANALOG) #初始化声音传感器引脚为A1,检测声音大小 Light = Pin(Pin.A2,Pin.ANALOG)#初始化光线传感器引脚为A2,检测光线强度 LED = Pin(Pin.D13, Pin.OUT) #初始化LED引脚为D13 while True: vs=Sound.read_analog()#读取模拟声音信号数值 vl=Light.read_analog()#读取模拟灯光信号数值 print("Sound=",vs,"Light=",vl)#打印声音和光线数据 if vs>200 and vl < 100:#判断光线和声音大小 LED.write_digital(1) time.sleep(3) else: LED.write_digital(0) 运行代码,当亮度值低于100且声音值大于200时(遮住光线传感器且发出声音时),LED灯会点亮,当没有声音或光线传感器没有被遮住的状态维持3秒以上时,LED灯会熄灭。 .. image:: images/0421.png 三、代码分析 ============ 1. 设计程序逻辑图 .. image:: images/04Log.png 2. 导入必要的包和初始化设置。 .. code-block:: python import time from pinpong.board import Board,Pin #导入必要的库函数 Board("uno").begin()#初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别 Sound = Pin(Pin.A1,Pin.ANALOG) #初始化声音传感器引脚为A1,检测声音大小 Light = Pin(Pin.A2,Pin.ANALOG)#初始化光线传感器引脚为A2,检测光线强度 LED = Pin(Pin.D13, Pin.OUT) #初始化LED引脚为D13 3. 加入判断 .. code-block:: python while True: vs=Sound.read_analog()#读取模拟声音信号数值 vl=Light.read_analog()#读取模拟灯光信号数值 print("Sound=",vs,"Light=",vl)#打印声音和光线数据 if vs>200 and vl < 100:#判断光线和声音大小 LED.write_digital(1) time.sleep(3) else: LED.write_digital(0) **如何进行多条件判断** 在本项目中我们需要判断两个条件,在我们做逻辑判断的时候经常会需要进行多条件判断,有些时候是需要两个条件都要满足的,有些时候是两个条件满足任意一条就可以了。在这种情况下,我们应该如何编写程序呢? 两条条件都需要满足的情况下,我们可以这样写 :: if 条件A and 条件B 两条条件满足任一即可的情况下,我们可以这样写 :: if 条件A or 条件B 想要得到反向的结果,即当x为true,得到的结果为false,当x为false时,得到的结果为true,我们可以这样写 not 条件。 四、硬件分析 ============ 在项目中我们用到了两种传感器,光线传感器和声音传感器。 光线传感器是将光信号变成电信号的特殊电子元件,在光线传感器中起到主要作用的就是就是光敏二极管。光敏二极管是光敏电阻中的一种。光明电阻在黑暗环境中,具有非常高阻值的电阻。光线越强,电阻值反而越低。随着两端电阻值的减小,电压也就相应减小,所以从模拟口独到的值也就变小。我们读取的数据也是由此而来的。 .. image:: images/lightsen.png 声音传感器的作用相当于一个麦克风。它用来接收声波,反馈声音的振动图像。在声音传感器上起到主要作用的就是麦克风,声波使麦克风内的薄膜震动,导致内部电容的变化,而产生与之对应的电压变化,经过转换为可监测的电压值反馈而来。 .. image:: images/soundsen.png