Arduino教程 Lesson 之--自制风扇


这次,我们会做一个小风扇。同时会接触两件新元件——继电器、直流电机。继电器,我们可以理解为是用较小的电流去控制较大电流的一种“自动开关”。在这里,继电器是用来控制电机转动的。

所需材料

  • 1×  5mm LED灯

  • 2×  220欧电阻

  • 1×  按钮

  • 1×  继电器 HRS1H-S -DC5V

  • 1×  小电机

  • 1 × 风扇叶片


STEP 1: 硬件连接

按下图进行连线,按钮连接到数字2。按钮一端连接5V,另一端连接GND,并用一个220Ω的电阻作为下拉电阻,以防引脚悬空干扰。继电器有6个引脚,分别标有序号。1,2引脚为继电器的输入信号,分别接Arduino的数字引脚和GND。3,4,5,6为继电器输出的控制引脚,这里只使用4,6两个引脚。我们把继电器想成一个开关,开关也只要用到两个引脚。


 



STEP 2: 输入代码

  1. int buttonPin = 2;                          // button连接到数字2

  2. int relayPin = 3;                           // 继电器连接到数字3

  3. int relayState = HIGH;                      // 继电器初始状态为HIGH 

  4. int buttonState;                            // 记录button当前状态值

  5. int lastButtonState = LOW;                  // 记录button前一个状态值

  6. long lastDebounceTime = 0;                  

  7. long debounceDelay = 50;                    //去除抖动时间


  8. void setup() {

  9.        pinMode(buttonPin, INPUT);

  10.        pinMode(relayPin, OUTPUT);

  11.   

  12.        digitalWrite(relayPin, relayState);       // 设置继电器的初始状态

  13. }


  14. void loop() {

  15.        int reading = digitalRead(buttonPin);   //reading用来存储buttonPin的数据

  16.   

  17.        // 一旦检测到数据发生变化,记录当前时间

  18.        if (reading != lastButtonState) {   

  19.                    lastDebounceTime = millis();

  20.         } 

  21.   

  22.        // 等待50ms,再进行一次判断,是否和当前button状态相同

  23.        // 如果和当前状态不相同,改变button状态

  24.        // 同时,如果button状态为高(也就是被按下),那么就改变继电器的状态

    主要学习单片机的定时器、计数器、中断、及接口技术,掌握LED数码管的工作原理和接口电路,能综合运用模拟电路、数字电路、传感器等基础知识,设计与制作比较复杂的作品,并针对作品编写50个左右的单片机C语言程序,就算已经入门单片机技术了。

  25.        if ((millis() - lastDebounceTime) > debounceDelay) {

  26.               if (reading != buttonState) {

  27.                       buttonState = reading;

  28.       

  29.                        if (buttonState == HIGH) {

  30.                                  relayState = !relayState;

  31.                        }

  32.                }

  33.          }

  34.          digitalWrite(relayPin, relayState);


  35.          // 改变button前一个状态值

  36.          lastButtonState = reading;

  37. }

复制代码

通过按键,可以控制电机和LED的开和关。


STEP 3: 代码回顾
代码的大部分内容,基本应该没有什么难度了,主要说下按键去抖问题。代码中:

  1.   if (reading != lastButtonState) {   

  2.          lastDebounceTime = millis();

  3.   } 

  4.   if ((millis() - lastDebounceTime) > debounceDelay) {

  5.          if (reading != buttonState) {

  6.                ……

  7.          }

  8.   }

复制代码

reading有变化之后,不是立马就采取相应的行动,而是先“按兵不动”,先看看这个信号是不是“错误信号”,所以再等待一阵,(也就是通过millis来实现这个等待过程的),发现确实是前方发过来的正确信号,然后执行相关动作。

之所以这么做的原因是,按键在被按下时,会有个抖动的过程,而不是立马由低变高,或者由高变低。所以这个过程中,可能会产生错误信号,我们通过程序中的这种方法,来解决硬件上的这个问题。


STEP 4:硬件回顾


继电器


我们可以把继电器理解为一个“开关”,实际上是用比较小的电流去控制较大电流的“开关”。这里只是为了让初学者了解继电器工作原理,所以没有使用较大的电源器件,还是选用是需要5V就能驱动的直流电机。

我们来看下继电器的内部构造:

 


这款继电器一共有6个引脚。1,2 引脚是用来接Arduino数字引脚和GND。通过数字引脚来驱动继电器。1,2两端为线圈两端。Arduino给HIGH后,线圈中就有电流,线圈就会产生磁性(就像磁铁一样),吸合中间的触片(能听到“哒”一声),常开端(NO)就与公共端导通。相反,如果Arduino给LOW,线圈中没有电流,常闭端(NC)就与公共端导通

所以,电路中我们接了4,6引脚用于控制电机和LED的通断,(当然也可以用引脚3,6)。

直流电机、直流减速电机与舵机的区别


普通直流电机是我们接触比较多的电机。一般只有两个引脚,上电就能转,正负极反接则反向转动。如你所见,它做着周而复始的圆周运动,无法进行角度的控制,不过可以通过电机驱动板,可以对转速进行控制,不过由于普通电机转速过快,所以,一般不直接用在智能小车上。


直流减速电机是在普通电机加上了减速箱,这样便降低了转速,使得普通电机有的更广泛的使用空间,比如可以用于智能小车上。同样也可以通过PWM来进行调速。
舵机也是一种电机,它使用一个反馈系统来控制电机的位置,可以用来控制角度。所以,舵机经常用来控制一些机器人手臂关节的转动。

来源:http://blog.csdn.net/srock288/article/details/37730561

单片机

每天更新
单片机
各种知识,电子制作DIY,及
电子行业
最新资讯,关注我们,棒棒哒!

学习单片机是需要成本的。必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。

生成海报
点赞 0

Abin

我还没有学会写个人说明!

相关推荐

[教程]第2课:单片机引脚介绍

单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 ⒈ 电源: ⑴ VCC - 芯片电源,接+5V; ⑵ VSS - 接地端; ⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊ 控制线:控制线共有4根, ⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ①