admin 管理员组文章数量: 1184232
2024年4月27日发(作者:activex控件是什么有哪些)
基于Arduino的PWM电机调速+数码管档位显示实例教程
0 引言
本实例适用于Arduino/机器人编程(创客)爱好者完成初级知识学习后,通过实际的
综合项目训练,达到融会贯通解决实际问题的能力。实例和代码均经本人测试无误,供有
兴趣的朋友参考探讨。
1功能
对直流电机转速进行PWM调节控制,设为九档(档位通过1位数码管进行显示),
红色按键每按下一次加一档;黑色按键每按下一次减一档。
2 工作原理
通过Arduino端口的脉宽调制输出功能,对直流电机的工作电压进行脉宽调制,从而
改变电机的工作电压,达到调试目的。本实例采用Arduino UNO自带5V电源,分为九
档,并通过一位数码管显示出来。
3 需要的组件
Arduino uno x1;
直流小电机 x1;
按键x2;
一位数码管x1;
ULN2003电机驱动芯片x1;
导线若干
4连线
数码管:定义数字接口9 连接a 段数码管,数字接口11连接b 段数码管,数字接
口4 连接c 段数码管,数字接口5 连接d 段数码管
,数字接口6 连接e 段数码管,数字接口12 连接f 段数码管,数字接口13连接g
段数码管,小数点位该项目不用,直接接高电平5v即可。
ULN2003:电机负极接到驱动芯片in4引脚,in4再接到Arduino UNO的数字10
端口。
按键:加速按键(红色)使用数字口7,减速按键(黑色)使用数字口8。
5代码
int a= 9;//定义数字接口9 连接a 段数码管
int b= 11;// 定义数字接口11连接b 段数码管
int c= 4;// 定义数字接口4 连接c 段数码管
int d= 5;// 定义数字接口5 连接d 段数码管
int e= 6;// 定义数字接口6 连接e 段数码管
int f= 12;// 定义数字接口12 连接f 段数码管
int g= 13;// 定义数字接口13连接g 段数码管
//int dp=3;// 该项目不用,直接接高电平5v即可
int motor = 10; //电机负极接到驱动板in4,in4再接到数字10
int key = 7; //加速按键使用数字口7
int key2 = 8; //减速速按键使用数字口8
int val = 0,val_0 = 0; //加速按键松开检测状态量
int val2 = 0,val2_0 = 0; //减速按键松开检测状态量
int speed_0,n=0;
void setup()
{
int i;//定义变量
for(i=4;i<=6;i++)
pinMode(i,OUTPUT);//设置4~6 引脚为输出模式
int j;//定义变量
for(j=11;j<=13;j++)
pinMode(j,OUTPUT);//设置11~13 引脚为输出模式
pinMode(9, OUTPUT);
pinMode(motor, OUTPUT);
pinMode(key, INPUT);
pinMode(key2, INPUT);
(9600);
}
void display(int num)
{
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;
}
case 0:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);break;
}
case 1:
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);break;
}
case 2:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);break;
}
case 3:
{
digitalWrite(g,LOW);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(f,HIGH);
digitalWrite(e,HIGH);break;
}
case 4:
{
digitalWrite(c,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(a,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);break;
}
case 5:
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e, HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
case 6:
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
case 7:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e, HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);break;
}
case 8:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
case 9:
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
}
}
void loop()
{
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);break;
}
//加速按键模块
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);
n(n);
display(n);
delay(20);
speed_0 = n *(252 / 9);
analogWrite(motor, speed_0); //驱动电机旋转
}
6 实物运行
版权声明:本文标题:arduino_PWM电机调速_数码管档位显示项目教程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1714207947a669842.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论