arduinoPWM电机调速数码管档位显示项目教程.docx
- 文档编号:12944377
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:9
- 大小:1.06MB
arduinoPWM电机调速数码管档位显示项目教程.docx
《arduinoPWM电机调速数码管档位显示项目教程.docx》由会员分享,可在线阅读,更多相关《arduinoPWM电机调速数码管档位显示项目教程.docx(9页珍藏版)》请在冰点文库上搜索。
arduinoPWM电机调速数码管档位显示项目教程
基于Arduino的PWM电机调速+数码管档位显示实例教程
0引言
本实例适用于Arduino/机器人编程(创客)爱好者完成初级知识学习后,通过实际的综合项目训练,达到融会贯通解决实际问题的能力。
实例和代码均经本人测试无误,供有兴趣的朋友参考探讨。
1功能
对直流电机转速进行PWM调节控制,设为九档(档位通过1位数码管进行显示),红色按键每按下一次加一档;黑色按键每按下一次减一档。
2工作原理
通过Arduino端口的脉宽调制输出功能,对直流电机的工作电压进行脉宽调制,从而改变电机的工作电压,达到调试目的。
本实例采用ArduinoUNO自带5V电源,分为九档,并通过一位数码管显示出来。
3需要的组件
Arduinounox1;
直流小电机x1;
按键x2;
一位数码管x1;
ULN2003电机驱动芯片x1;
导线若干
4连线
数码管:
定义数字接口9连接a段数码管,数字接口11连接b段数码管,数字接口4连接c段数码管,数字接口5连接d段数码管
,数字接口6连接e段数码管,数字接口12连接f段数码管,数字接口13连接g段数码管,小数点位该项目不用,直接接高电平5v即可。
ULN2003:
电机负极接到驱动芯片in4引脚,in4再接到ArduinoUNO的数字10端口。
按键:
加速按键(红色)使用数字口7,减速按键(黑色)使用数字口8。
5代码
inta=9;//定义数字接口9连接a段数码管
intb=11;//定义数字接口11连接b段数码管
intc=4;//定义数字接口4连接c段数码管
intd=5;//定义数字接口5连接d段数码管
inte=6;//定义数字接口6连接e段数码管
intf=12;//定义数字接口12连接f段数码管
intg=13;//定义数字接口13连接g段数码管
//intdp=3;//该项目不用,直接接高电平5v即可
intmotor=10;//电机负极接到驱动板in4,in4再接到数字10
intkey=7;//加速按键使用数字口7
intkey2=8;//减速速按键使用数字口8
intval=0,val_0=0;//加速按键松开检测状态量
intval2=0,val2_0=0;//减速按键松开检测状态量
intspeed_0,n=0;
voidsetup()
{
inti;//定义变量
for(i=4;i<=6;i++)
pinMode(i,OUTPUT);//设置4~6引脚为输出模式
intj;//定义变量
for(j=11;j<=13;j++)
pinMode(j,OUTPUT);//设置11~13引脚为输出模式
pinMode(9,OUTPUT);
pinMode(motor,OUTPUT);
pinMode(key,INPUT);
pinMode(key2,INPUT);
Serial.begin(9600);
}
voiddisplay(intnum)
{
switch(num)
{
default:
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);break;
}
case0:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);break;
}
case1:
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);break;
}
case2:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);break;
}
case3:
{
digitalWrite(g,LOW);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(f,HIGH);
digitalWrite(e,HIGH);break;
}
case4:
{
digitalWrite(c,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(a,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);break;
}
case5:
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
case6:
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
case7:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);break;
}
case8:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
case9:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
}
}
voidloop()
{
//加速按键模块
val=digitalRead(key);
if(val!
=val_0)
{
delay(500);
if(val==1)
{
n++;
}
if(n>=9)n=9;
}
val_0=digitalRead(key);
//减速按键模块
val2=digitalRead(key2);
if(val2!
=val2_0)
{
delay(500);
if(val2==1)
{
n--;
}
if(n<=0)n=0;
}
val2_0=digitalRead(key2);
Serial.println(n);
display(n);
delay(20);
speed_0=n*(252/9);
analogWrite(motor,speed_0);//驱动电机旋转
}
6实物运行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arduinoPWM 电机 调速 数码管 档位 显示 项目 教程