【pinpong库控制硬件】之Arduino uno-调光台灯

2020-09-015072
精华项目
AI 快速预览详细 收起
本项目介绍了如何使用pinpong库和Arduino UNO通过旋钮控制LED灯的亮度。首先,准备硬件包括Arduino UNO、IO传感器扩展板V7.1、LED发光模块和旋钮模块。接着,将LED发光模块接入6号数字引脚,旋钮模块接入A0模拟引脚。程序编写部分,通过读取旋钮的模拟信号值并转换为PWM值,实现LED灯的平滑亮度变化。这个项目适合STEM教育和编程启蒙,能够帮助孩子理解模拟输出的概念,并在实际操作中体验到灯光渐变的效果。


调光台灯

一、概述
——————————————————————————————————————

在前面的课程中我们学会了如何点亮并控制LED灯,那LED灯的亮度我们可以调节吗?如果输出的值不是数字量,而是模拟量,是不是就可以实现通过数值来精确控制灯光亮度了。

在上节课的设计中,我们使用的是按钮控制灯的亮灭,按钮只有两个状态,是没办法输出模拟值的,所以本项目我们就需要使用到旋钮来作为灯光亮度的输入。

【pinpong库控制硬件】之Arduino uno-调光台灯图5

二、项目实施
——————————————————————————————————————

(1)渐变灯光

硬件准备:
主控:Arduino UNO、IO 传感器扩展板 V7.1
模块:LED发光模块
连接线:TypeAtoB方口USB连接线

【pinpong库控制硬件】之Arduino uno-调光台灯图7
将LED发光模块接入6号数字引脚

程序编写:
1、打开pingpong库的官方文档,找到基础库示例中的“模拟输出”,并用IDLE打开。

【pinpong库控制硬件】之Arduino uno-调光台灯图1

2、摁下F5运行程序,查看效果。LED灯会逐渐变亮,当到最亮时熄灭再慢慢变亮,循环变化。

【pinpong库控制硬件】之Arduino uno-调光台灯图2

(2)旋钮调光
在上步完成的功能中,我们旋钮来精确的控制LED灯的亮度。

硬件准备:
主控:Arduino UNO、IO 传感器扩展板 V7.1
模块:LED发光模块、旋钮模块
连接线:TypeAtoB方口USB连接线

【pinpong库控制硬件】之Arduino uno-调光台灯图6

将LED发光模块接入6号数字引脚,将旋钮模块接入A0模拟引脚

程序编写
import time
from pinpong.board import Board,Pin
Board("uno").begin()               #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别
pwm0 = Pin(Pin.D6, Pin.PWM) #初始化引脚为PWM模式 模拟输出方法2
adc0 = Pin(Pin.A0, Pin.ANALOG) #引脚初始化为电平输出
while True:
    v = adc0.read_analog() #读取A0口模拟信号数值
    L = int(v*255/1024)
    pwm0.write_analog(L) #PWM输出
    print("A0=",L)

运行代码,旋转旋钮LED灯会慢慢亮起和熄灭。

【pinpong库控制硬件】之Arduino uno-调光台灯图3

三、代码分析
——————————————————————————————————————

1、导入必要的包和初始化设置。
import time
from pinpong.board import Board,Pin
Board("uno").begin() #初始化,选择板型和端口号,不输入则留空进行自动识别
pwm0 = Pin(Pin.D6, Pin.PWM)
adc0 = Pin(Pin.A0, Pin.ANALOG) #将Pin传入ADC中实现模拟输入

2、我们需要将旋钮输出的模拟值转换为LED灯亮度的PWM值,为了得到整数这里用了整型功能int
v = adc0.read_analog() #读取A0口模拟信号数值
L = int(v*255/1024)

3、接着让LED灯根据我们转换过的数值亮起。
pwm0.write_analog(L) #PWM输出
print("A0=",L)

数据类型-整数类型

在我们做运算的时候,传感器读取到的数值经过*180/1024运算的结果往往不会是一个整数,常常会带着长长的小数尾数。我们试着不加int整形得到的结果如下:

【pinpong库控制硬件】之Arduino uno-调光台灯图4

这样的数值我们是无法直接使用的,所以就需要使用到整形int将数据取整。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
DFBJFz5siXP
DFBJFz5siXP
新手报道
- 没有更多了 -