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 实物运行


本文标签: 数字 数码管 电机 连接 按键