Python实现对小风扇的控制
1.本次小实验总共需要准备的物品包括:Pico开发板、扩展板、电脑、USB数据线、电位器模块、电机驱动模块、电机小风扇、6根母对母杜邦线。
(1).电位器模块:电位器是具有三个引出端、阻值可按某种变化规律调节的电阻元件。电位器通常由电阻体和可移动的电刷组成。当电刷沿电阻体移动时,在输出端即获得与位移量成一定关系的电阻值或电压。简而言之就是调节小风扇的转速的旋转开关,和家里的电风扇一样通过旋转开关调节风速档位,如下图1。
(2).电机驱动模块:通过主动工作来控制电机按照设定的方向、速度、角度、响应时间进行工作的集成电路。就是说当电机驱动模块接到电位器的指令(档位)时,就把电路中的电能转换为电机驱动模块所需的电能,来控制小风扇的转速,如下图。
2.实验现象:本课程是制作一个电位器调节电机小风扇速度的实验。按照下图接线后,下载程序,用手转动电位器,可以看到电机小风扇的速度会变化。
运行效果如下视屏链接
控制风扇的效果视频
3.我们使用Thonny这个编程软件进行编程和程序的运行。
下面是对代码的个人理解,非常简单通俗化。
from machine import Pin, PWM, ADC#从机器内置函数里引用Pin引脚和PWM脉冲宽带调制和ADC数模转换器
import utime#引用utime定时函数,也就是可以用来设定某个工作过程的时间
rp = ADC(28)#初始化电位器引脚,电位器IO端连接是Pico开发板的扩展板上的引脚GP28
pwm1 = PWM(Pin(13))#PWM输出初始化,电机引脚,因为我们电机驱动模块IN4端口连接的引脚Pico开发板扩展板的引脚是GP13
pwm1.freq(1000)# 设置频率
conver_100 = 101 / (65536)# 数值转化参数
def my_map(x, in_min, in_max, out_min, out_max):#定义一个my_map()函数,定义输入和输出的最大值和最小值四个参数和一个X参数
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)# 数值重映射(把电位器的值与电机模块的值一一对应),就是说把电位器的信号(数值)转换为电机模块能够理解的脉冲
def pwm_motor(speed):#定义一个pwm_motor函数,并给函数定义一个speed参数,设置风扇的转速,speed=[0, 100]
if speed > 100 or speed < 0:#如果风扇的转速大于100或者小于0,就返回重新获取0到100之间的速度
print(‘Please enter a limited speed value of 0-100’) return pulse = my_map(speed, 0, 100, 0, 65535)
print(pulse)#输出pluse
pwm1.duty_u16(pulse)#电机根据这个脉冲值进行风扇的转速的控制
while True: val_rp = int(rp.read_u16() * conver_100)
utime.sleep(.1)#设定睡眠时间1秒
pwm_motor(val_rp)# print(val_rp)