查看: 184|回复: 1

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

[复制链接]
本帖最后由 _木子_ 于 2020-9-1 15:21 编辑

调光台灯

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

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

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

1.jpg

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

(1)渐变灯光

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

3333333.jpg
将LED发光模块接入6号数字引脚

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

图片3.png

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

图片4.png

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

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

3.jpg

将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灯会慢慢亮起和熄灭。

图片6.png

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

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整形得到的结果如下:

图片7.jpg

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

DFBJFz5siXP  见习技师

发表于 2020-9-1 21:29:06

新手报道
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail