Arduino已经玩了一段时间了,在开始文章之前先简单谈下自己这段时间玩的感受。Arduino是一个开源的IC板,给予初级想入门单片机的小伙伴提供了一定的便捷性,但是真要想做一些应用的话,不管是从性能还是硬件IO方面还是明显不够的。
L298N是一个桥式直流电机驱动模块,关于这个模块的资料包括电路图在网上有很多,所以波波不再重复这些了。需要查看详细资料的朋友也可以参考:http://www.elecfans.com/dianzichangshi/20171211600733_a.html
下面是关于L298N控制直流电机正转反转的电平信号示例:
一个L298N模块一般是可以同时控制两路电机的,IN3和IN4同上图。
Arduino源代码:
- int in1=13;
- int in2=12;
- int in3=11;
- int in4=10;
- //上面定义了板上的4个控制端,12一组,34一组
- int speedPinA=6;
- int speedPinB=5;
- //上面定义了PWM引脚
- void setup()
- {
- pinMode(in1,OUTPUT);
- pinMode(in2,OUTPUT);
- pinMode(in3,OUTPUT);
- pinMode(in4,OUTPUT);
- //下面程序开始时让控制端都为高电平,电机保持不动。
- digitalWrite(in1,HIGH);
- digitalWrite(in2,HIGH);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,HIGH);
- }
- void loop()
- {
- //电机正转
- _mRight(in1,in2);
- _mRight(in3,in4);
- //读入电位器的值,然后通过PWM输出,控制电机转速
- int n=analogRead(A0)/4;
- _mSetSpeed(speedPinA,n);
- _mSetSpeed(speedPinB,n);
- }
- void _mRight(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
- {
- digitalWrite(pin1,HIGH);
- digitalWrite(pin2,LOW);
- }
- void _mLeft(int pin1,int pin2)//同上
- {
- digitalWrite(pin1,LOW);
- digitalWrite(pin2,HIGH);
- }
- void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
- {
- digitalWrite(pin1,HIGH);
- digitalWrite(pin2,HIGH);
- }
- void _mSetSpeed(int pinPWM,int SpeedValue)//控制速度,实际上就是断断续续的控制298N的使能端,手抖的厉害的可以用个按钮自己尝试一下,估计也能实现对电机速度的控制,O(∩_∩)O~
- {
- analogWrite(pinPWM,SpeedValue);
- }
将上述代码编译上传至Arduino开发板之后,我们就可以看到电机的转动情况了,但是在实际生活中我们往往不会简单的将代码上传就完事了,比如我们需要用红外遥控器控制窗帘或者用手机APP控制电机又或者通过手势动作去控制。当然这些都需要大家伙自己探索了,本篇笔记只是入门的基础。下面分享下关于一路电机控制窗帘的传动设计图。
根据上图中窗帘的电机控制示意图,我们很轻松的可以把窗帘的打开和关闭封装成一个事件,然后通过其他传感器如语音识别的信号很方便的调用。以上就是波波今日的分享,有喜欢玩Arduino的朋友也可以加我QQ502998120或2398156504进行交流。