89024| 46
|
[入门教程] Arduino教程 Lesson 14--自制风扇 |
该教程实验平台:Arduino入门套件 上一篇教程:Arduino教程 Lesson 13-- 彩灯调光台 由于我们新版的入门套件还未面世,所以对于现在的入门套件还没法做这个实验~当然你也可以自己找材料 这次,我们会做一个小风扇。同时会接触两件新元件——继电器、直流电机。继电器,我们可以理解为是用较小的电流去控制较大电流的一种“自动开关”。在这里,继电器是用来控制电机转动的。 所需材料
STEP 1: 硬件连接 按下图进行连线,按钮连接到数字2。按钮一端连接5V,另一端连接GND,并用一个220Ω的电阻作为下拉电阻,以防引脚悬空干扰。继电器有6个引脚,分别标有序号。1,2引脚为继电器的输入信号,分别接Arduino的数字引脚和GND。3,4,5,6为继电器输出的控制引脚,这里只使用4,6两个引脚。我们把继电器想成一个开关,开关也只要用到两个引脚。 STEP 2: 输入代码 通过按键,可以控制电机和LED的开和关。STEP 3: 代码回顾 代码的大部分内容,基本应该没有什么难度了,主要说下按键去抖问题。代码中: reading有变化之后,不是立马就采取相应的行动,而是先“按兵不动”,先看看这个信号是不是“错误信号”,所以再等待一阵,(也就是通过millis来实现这个等待过程的),发现确实是前方发过来的正确信号,然后执行相关动作。之所以这么做的原因是,按键在被按下时,会有个抖动的过程,而不是立马由低变高,或者由高变低。所以这个过程中,可能会产生错误信号,我们通过程序中的这种方法,来解决硬件上的这个问题。 STEP 4:硬件回顾 继电器 我们可以把继电器理解为一个“开关”,实际上是用比较小的电流去控制较大电流的“开关”。这里只是为了让初学者了解继电器工作原理,所以没有使用较大的电源器件,还是选用是需要5V就能驱动的直流电机。 我们来看下继电器的内部构造: 这款继电器一共有6个引脚。1,2 引脚是用来接Arduino数字引脚和GND。通过数字引脚来驱动继电器。1,2两端为线圈两端。Arduino给HIGH后,线圈中就有电流,线圈就会产生磁性(就像磁铁一样),吸合中间的触片(能听到“哒”一声),常开端(NO)就与公共端导通。相反,如果Arduino给LOW,线圈中没有电流,常闭端(NC)就与公共端导通。 所以,电路中我们接了4,6引脚用于控制电机和LED的通断,(当然也可以用引脚3,6)。 直流电机、直流减速电机与舵机的区别 普通直流电机是我们接触比较多的电机。一般只有两个引脚,上电就能转,正负极反接则反向转动。如你所见,它做着周而复始的圆周运动,无法进行角度的控制,不过可以通过电机驱动板,可以对转速进行控制,不过由于普通电机转速过快,所以,一般不直接用在智能小车上。 直流减速电机是在普通电机加上了减速箱,这样便降低了转速,使得普通电机有的更广泛的使用空间,比如可以用于智能小车上。同样也可以通过PWM来进行调速。 舵机也是一种电机,它使用一个反馈系统来控制电机的位置,可以用来控制角度。所以,舵机经常用来控制一些机器人手臂关节的转动。 下一篇教程:Arduino教程 Lesson 15--红外接收 |
想调电机转速。两个想当然的想法,均未达到预期效果。 第一个方案是想着在6脚下接一个10k电位器,通过分压来达到电压不同转速不同的效果。结果失败,一动不动。 于是第二个方案,想着通过analogin来读取电位器电压,pwm口接继电器4脚依据模拟口输入来供电电压值。结果是转动了,但都是低速转动,不对旋钮调节做出响应。 想想两个原因是否均为电流不足,130马达参考电流300-400mA,arduino引脚输出最大40mA,至于10k电位器分压... 所以是想当然了。 请问: 1、不知道能不能加个三极管放大下电流来达到驱动效果 2、不知道电机驱动版是什么原理 |
Mr.why 发表于 2015-2-9 23:09 A1: buttonState是按钮当前的状态,lastButtonState是记录上一个状态的,意义不同的。 A2: lastButtonState = reading;意思是把按钮改变的状态值赋给lastButtonState用于和下一个状态进行比较。 A3: 先排除是不是接线错误了,如果不是的话,不接电机试试看,灯是不是正常运行 |
实际效果是灯亮电机先转2s,然后灯灭电机停。。。然后按按钮灯亮电机转。。。再按按钮灯灭电机停。 将电机和button去掉, 只保留继电器和LED灯, 然后使用最简单的测试程序: int relayPin = 4; // 继电器连接到数字8 void setup() { pinMode(relayPin, OUTPUT); digitalWrite(relayPin, HIGH); // 设置继电器的初始状态 } void loop() { // put your main code here, to run repeatedly: } 加电后灯会点亮1s左右, 然后熄灭。 是否继电器本身有问题啊? 对于初始阶段, 继电器要怎样精准操作呢? |
实际效果是灯亮电机先转2s,然后灯灭电机停。。。然后按按钮灯亮电机转。。。再按按钮灯灭电机停。 将电机和button去掉, 只保留继电器和LED灯, 然后使用最简单的测试程序: int relayPin = 4; // 继电器连接到数字8 void setup() { pinMode(relayPin, OUTPUT); digitalWrite(relayPin, HIGH); // 设置继电器的初始状态 } void loop() { // put your main code here, to run repeatedly: } 加电后灯会点亮1s左右, 然后熄灭。 是否继电器本身有问题啊? 对于初始阶段, 继电器要怎样精准操作呢? |
继电器的管脚是很短。 是否接触面包班良好我也很难判断。 从自制风扇的表现上来看, 只要过了头1-2秒, 整个操作是正常的,表明继电器的在后面工作是正常的。 就是初始加电的表现不正常。 版主有用新版开发者套件里的继电器和面包板试过吗? |
我接通电源也是直接电机转了,所以我把电机放在继电器5脚,默认relayState=LOW。 另外我有个问题是关于直流电机对IR的干扰,我用IR电源键控制继电器(开关)进而控制直流电机,启动电机没有问题,但是电机一旦启动, 用于监控红外的串口就是各种错误码刷屏了,根本停不下来。。。
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed