ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

树莓派实现声控步进电机

2021-12-06 11:02:07  阅读:174  来源: 互联网

标签:树莓 led relay Pin 电机 声控 步进 def


一.所需的硬件和使用的器件
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有