请选择 进入手机版 | 继续访问电脑版
查看: 1353|回复: 1

Arduino开发之入门教程4教你设计智能风扇

[复制链接]
  • TA的每日心情
    开心
    2019-7-30 00:03
  • 签到天数: 114 天

    [LV.6]常住居民II

    117

    主题

    289

    帖子

    2679

    积分

    实习版主

    Rank: 7Rank: 7Rank: 7

    积分
    2679
    QQ
    发表于 2018-2-5 12:46:28 | 显示全部楼层 |阅读模式

    教你设计智能风扇这一节从物理电路的连接上,增加了带直流电机的风扇;从编程上,增加了if结构的变式等内容。

    一、RoMeo控制直流电机

    关于RoMeo:

    RoMeo V2[R3]是一款多合一Arduino兼容的微型控制器,它是专为机器人应用而设计的。得益于Arduino开放型平台,Romeo系列产品由众多开放型源码支持,可以诞生出很多酷炫的作品。它将双路直流马达驱动器和Xbee模块整合在一起,让您能立刻启动您的项目而不需额外添加电机驱动板或Xbee转接板。  
    RoMeo V2集成了5路按钮,可以轻松实现在线项目调试和测试,双排针排母设计不但可以兼容绝大多数DFRobot出品的传感器,还能兼容绝大多数Arduino UNO扩展板,包括LCD,WIFI等。RoMeo V2[R3]是基于ATmega32u4芯片,它的使用和Arduino Leonardo一样,您可以直接从Arduino IDE 1.0.1或更新的版本中启动它。由于它只有ATmega32U4一个微型控制器,因此RoMeo V2使用起来非常简便。ATmega32U4直接控制USB,这使得Romeo不但可以控制电机,还能具有电脑键盘,鼠标的功能,让您更多地使用USB-HID协议。更重要的是Atmega32u4提供了两个串口,这样可以让同时进行无线通信和程序更新成为可能。提高了使用的方便性,而再也无需频繁的插拔无线通信模块。  
    相对于Romeo V1,V2的改进除了将Atmega328芯片更换成Atmega32u4以外,还改进了电源接口。除了能用开关切换电源以外,还能动态的调整舵机电源,以满足多舵机大电流的供电需求。
    H609@J{}40NO[VOBH76VLCU.png

    RoMeo中电机控制针跳线,将分配用于电机控制引脚为数字口4,5,6,7RoMeo控制电机有两种模式:PWM模式和PLL模式,这里我们用到的是PWM模式通过改变两个数字IO引脚和两个PWM引脚的PWM对直流电动机控制端口实现。如果大家没有RoMeo的话,可以用L298N或L293D实现。它们的驱动方式和RoMeo大同小异。


    @KNP{WN@JT6`~UNG2L~9.png

    digitalWrite(4,HIGH)digitalWrite(4,LOW)是控制电机1的正转和反转的,analogWrite(5,100)是控制电机1的转动速度的。


    二、声控风扇


    大家能够转动电机之后,就尝试一下人工控制的风扇:声控风扇

    首先将电机、风扇、声音传感器连接好,通过串口程序测试声音传感器的模拟输出值。

    1. void setup() {
    2.   pinMode(4,OUTPUT);
    3.   pinMode(5,OUTPUT);
    4. }
    5. void loop() {
    6.   int a;
    7.   a=analogRead(A0); //读取模拟口的值
    8.   if(a>700){
    9.     digitalWrite(4,HIGH); //转动风扇
    10.     analogWrite(5,100); //设置风扇的转速
    11.     delay(2000);
    12.   }
    13.   else{
    14.     analogWrite(5,0);
    15.     delay(2000);
    16.   }
    17. }
    复制代码

    大家可以尝试着将if条件的700改换成自己串口检测到的数值,下载程序,查看现象。这样,通过更改if的执行条件,我们就完成了对传感器阈值的改变。通过改变这个数值,可以调节触发声音的响度。也就是你需要发出多大(或是很小的声音)的声音,风扇才会转动。


    三、换挡风扇

    大家家里的风扇是可以换档的,我们可以做个换挡风扇吗?前面我们学过的按钮可以实现吗?如何实现?首先,我们可以用自然语言描述一下换挡风扇的功能:初始状态,风扇是空档,按钮按下一次,风扇一档,再按一次,风扇二档,再按一次,回空挡。则时候需要多重的判断,我们需要用到前面if结构的变式。

    1. if变式:
    2. 变式1:
    3. if(条件1){
    4. if(条件2){
    5.   语句1;
    6. }
    7. else{
    8.   语句2;
    9. }
    10. }

    11. 变式2:
    12. if(条件1){
    13.   语句1;
    14. }
    15. else if(条件2){
    16.   语句2;
    17. }
    18. else{
    19.   语句3;
    20. }
    复制代码

    任务:有关换挡风扇的程序我已经放在后面fun2里了。这个程序最高档是二档,请大家下载程序查看一下效果,然后自己改装一个最高档是三档或更高的。


    四、扩展

    进行了刚刚这些设计,大家是否会觉得,用if语句设计出来的条件嵌套很杂乱,一点也不明了清晰,那么,我现在为大家介绍switch结构Switch结构与if结构一样,都属于选择结构,基本形式如下:

    1. Switch(条件){
    2. case 1:
    3.      语句1;  //满足结果1,执行语句1
    4.      break;
    5. case 2:
    6.      语句2;//满足结果2,执行语句2
    7.      break;
    8. default:
    9.      语句3;//不满足上述结果,执行语句3
    10. }
    复制代码


    1. 附录:
    2. 1)fun1声控风扇
    3. void setup() {
    4.   pinMode(4,OUTPUT);
    5.   pinMode(5,OUTPUT);
    6.   Serial.begin(9600);
    7. }
    8. void loop() {
    9.   int a;
    10.   a=analogRead(A0);
    11.   if(a>700){
    12.     digitalWrite(4,HIGH);
    13.     analogWrite(5,100);
    14.     delay(2000);
    15.   }
    16.   else{
    17.     analogWrite(5,0);
    18.     delay(2000);
    19.   }
    20.   Serial.println(a);
    21.   delay(1000);
    22. }

    23. 2)fun2二档风扇if结构未消抖
    24. int i=0;
    25. bool k;
    26. void setup() {
    27.   pinMode(2,INPUT);
    28.   pinMode(5,OUTPUT);
    29. }
    30. void loop() {
    31.   k=digitalRead(2);
    32.   if(k==LOW){
    33.     i++;
    34.     if(i==1){
    35.       analogWrite(5,50);
    36.     }
    37.     else if(i==2){
    38.       analogWrite(5,100);
    39.     }
    40.     else{
    41.       analogWrite(5,0);
    42.       i=0;
    43.     }
    44.   }
    45. }

    46. 3)fun3三档风扇switch结构消抖
    47. int i=0;
    48. bool k=0;
    49. bool s=1;
    50. void setup() {
    51.   pinMode(2,INPUT);
    52.   pinMode(5,OUTPUT);
    53. }
    54. void loop() {
    55.   if((!digitalRead(2)) && s){
    56.     k=!k;
    57.     i++;
    58.     switch(i){
    59.       case 1:analogWrite(5,50);
    60.              break;
    61.       case 2:analogWrite(5,100);
    62.              break;
    63.       case 3:analogWrite(5,200);
    64.              break;
    65.       default:analogWrite(5,0);
    66.               i=0;
    67.     }
    68.     delay(20);
    69.   }
    70.   s=digitalRead(2);
    71. }

    复制代码
    以上,便是本贴的所有内容,如果有说得不对的地方,欢迎大家在社区里私信我.
    敬请期待<Arduino开发之入门教程5教你设计变速风扇>
    如果您,还有什么问题,可以在社区里的Arduino专区发帖提问








    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    4

    积分

    小松子

    Rank: 1

    积分
    4
    发表于 2019-6-11 11:11:52 | 显示全部楼层
    提示: 该帖被管理员或版主屏蔽
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    【干货帖】锂电池充电IC-TP4056电路设计详解
    【干货帖】锂电池充电IC-T
    首先,先介绍下TP4056。TP4056是一款完整的单节锂离子电池采用恒定电流/恒定电压线性
    【评测板】荔枝派Nano
    【评测板】荔枝派Nano
    荔枝派 Nano,开启你的极客之心。这是一款仅有2.54cm X 3.3cm大小的精致小板,相当于
    二氧化碳传感器在酿酒厂中的应用分析
    二氧化碳传感器在酿酒厂中
    酿酒就是利用酵母菌在无氧条件下,做无氧呼吸,产生酒精。在发酵生产中,酿酒酵母有
    什么是尘埃粒子计数器_尘埃粒子计数器使用技巧
    什么是尘埃粒子计数器_尘
    尘埃粒子计数器是用于检测空气尘埃粒子的粒径和粒子分布的特殊装置,最开始是由显微
    空气质量检测仪中PM2.5传感器以及温湿度传感器的应用
    空气质量检测仪中PM2.5传
    随着我国工业化和城镇化的快速发展对能源的消耗也逐渐增大,在这个现代化的过程中会
    Arduino开发之入门教程4教你设计智能风扇
    Arduino开发之入门教程4教
    教你设计智能风扇这一节从物理电路的连接上,增加了带直流电机的风扇;从编程上,增
    什么是大气飘尘_PM2.5传感器在大气飘尘检测中的应用
    什么是大气飘尘_PM2.5传感
    飘尘也就是可吸入颗粒物,是物质燃烧时产生的颗粒状浮动物质。飘尘颗粒直径小于10微
    签到送开发板,耗材大礼包
    签到送开发板,耗材大礼包
    电子工程师福利再次来袭,连续24天,每天送开发板和3份耗材大礼包,活动彩蛋还有多份
    【开发板申请】ESP8266物联网开发板申请
    【开发板申请】ESP8266物
    用你熟悉的方式 快速实现每一个想法Gokit3(S)是机智云(GizWit
    硬件经典面试100题(附参考答案)资料分享
    硬件经典面试100题(附参
    硬件经典面试100题(附参考答案)资料分享

    手机版|小黑屋|

    • CopyRight  2018-2018  松果社区   CopyRight discuz X3.3   
    快速回复 返回顶部 返回列表