其他分享
首页 > 其他分享> > 树莓派实现声控步进电机

树莓派实现声控步进电机

作者:互联网

一.所需的硬件和使用的器件
Pico开发板、扩展板、电脑、USB数据线、声音传感器模块、继电器模块、步进电机、电机驱动模块、2根公对母杜邦线、11根母对母杜邦线。

二.实验现象
制作一个声音控制继电器开关,从而控制步进电机转动的小实验,用对着声音传感器模块吹气,或者鼓掌等方式发出声音,声音超过一定阈值时,继电器模块会打开开关,从而步进电机转动起来,再一次接收到声音超过阈值,则关闭开关。

三.各元件的连接
在这里插入图片描述
在这里插入图片描述
四.代码的编写

from machine import Pin
import utime
import _thread

led = Pin(25,Pin.OUT)
sound = Pin(10,Pin.IN)#声音传感器引脚初始化
relay = Pin(4,Pin.OUT)#继电器引脚初始化

#步进驱动模块的引脚初始化
in1 = Pin(16,Pin.OUT)
in2 = Pin(15,Pin.OUT)
in3 = Pin(14,Pin.OUT)
in4 = Pin(13,Pin.OUT)

delay = 1
ROUND_VALUE = 509

#四相八拍步进电机的顺序值
STEP_VALUE = [
	[0,0,0,1],
	[0,0,1,1],
	[0,0,1,0],
	[0,1,1,0],
	[0,1,0,0],
	[1,1,0,0],
	[1,0,0,0],
	[1,0,0,1],
]

def led_on():
	led.value(1)
def led_off():
	led.value(0)
#读取声音模块的状态
def sound_state():
	if sound.value() == 0:
		return True
	return False
#引脚输出低电平
def reset():
	in1(0)
	in2(0)
	in3(0)
	in4(0)
#单步运行,当count为正整数时是顺时针转,负整数则逆时针转
def step_run(count):
	direction = -1
	if count < 0:
		direction = 1
		count = -count
	for x in range(count):
	 for bit in STEP_VALUE[::direction]:
	 	in1(bit[0])
	 	in2(bit[1])
	 	in3(bit[2])
	 	in4(bit[3])
	 	utime.sleep_ms(delay)
reset()
#步进电机转动的角度,a是正整数则顺时针转,是负整数则逆时针转
def step_angle(a):
	step_run(int(ROUND_VALUE*a/360))
#继电器的开关设置
def relay_on():
	relay(1)
def relay_off():
	relay(0)
#运行步进电机的任务
def task_1():
	while True:
		step_run(1)
# 由于步进电机驱动需要耗时等待,所以放进子线程里运行
def main():
	_thread.start_new_thread(task_1,())
	time_point = utime.ticks_ms()
	motor_state = False  
	# 循环,检测声音模块,接收到声音切换继电器输出状态,从而改变电机运动状态。
while True:
	if sound_state() == True:
		if utime.ticks_ms() - time_point >=300: # 声音过滤300毫秒,避免重复检测
			print("get sound")
			time_point = utime.ticks_ms()
			motor_state = not motor_state
	if motor_state:
		relay_on()
		led_on()
	else:
		relay_off()
		led_off()
try:
	main()
except KeyboardInterrupt:
	thread.exit()	

五.给大家补充亿点小知识
(1)步进电机
步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机,每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比,因此,步进电动机又称脉冲电动机。
(2)步进电机驱动模块
步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速和定位的目的。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度,驱动器相当于开关的组合单元。通过上位机的脉冲信号有顺序给电机相序通电使电机转动。。
(3)继电器
继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

标签:树莓,led,relay,Pin,电机,声控,步进,def
来源: https://blog.csdn.net/qq_50955050/article/details/121739701