一、实验目的
通过本实验,了解电位器的工作原理和应用场景,熟悉电位器的安装使用过程,掌握在Arduino项目中获取电位器输出值的方法,并能应用电位器控制LED灯的闪烁频率、三色LED的显示颜色、舵机的转动角度等。
二、实验要求
1、使用ESP 8266电路板、电位器(如图所示)、LED灯、电阻和导线搭建实验电路并编写相应Arduino程序代码,通过旋转电位器按钮控制LED灯的闪烁频率。
图10-1电位器
2、将第1步实验中的LED换成三色LED(如图所示),并添加电阻及导线,修改实验代码,实现旋转电位器按钮使三色LED呈现不同颜色灯光的效果。
图10-2三色发光二极管(RGB LED)
3、将第2步实验中的三色LED及其电阻和导线拆除,使用1个舵机(如图所示),修改实验代码,实现旋转电位器按钮使舵机指向不同角度的效果。
图10-3舵机(伺服电机)
三、实验过程
1、电位器控制LED灯闪烁
(1)使用导线分别连接面包板的电源总线正极和负极到电路板的3V3和GND接口;将1个电位器放置在面包板上,注意三个针脚必须在不同的行上,其中电位器上标注了数字1的针脚使用导线连接到面包板电源总线负极上,标注了数字3的针脚使用导线连接到面包板电源总线正极上,中间针脚使用导线连接到电路板A0口;在面包板上放置1个LED,将正极通过1个1K电阻连接到电路板D2(GPIO4)接口,负极使用导线连接到面包板电源总线负极上。电路连接如图所示。
图10-4实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
int potPin = 0; //定义电位器连接的模拟接口号
int ledPin = 4; //定义LED灯连接的数字接口号
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
//获取电位器连接的模拟接口的输出值,与电压成正比,此处为0-1023
val = analogRead(potPin);
digitalWrite(ledPin, HIGH);
delay(val);
digitalWrite(ledPin, LOW);
delay(val);
}
(3)将USB线缆插入计算机,待程序上传成功后旋转电位器按钮,观察LED闪烁频率的变化,电位值越小,闪烁频率越快。
2、电位器控制三色LED灯显示不同颜色
(1)将第1步实验中的LED及电阻拆除,放置1个三色LED在面包板上,注意4个针脚必须在不同行,其中最长的针脚使用导线连接到面包板电源总线负极;靠近负极针脚的最外侧针脚为红色针脚,通过1个1K电阻并使用导线将其连接到电路板的D1(GPIO5)接口;负极针脚的另一侧针脚为绿色针脚,通过1个1K电阻并使用导线将其连接到电路板的D2(GPIO4)接口;剩下的1个针脚为蓝色针脚,通过1个1K电阻并使用导线将其连接到电路板的D3(GPIO0)接口。电路连接如图所示。
图10-5实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
int trim = 0; //定义电位器所连接的模拟接口号
int val = 0;
int redPin = 5; //定义三色LED的红色针脚所连接的接口号
int greenPin = 4;
int bluePin = 0;
void setup(){
Serial.begin(115200);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop(){
val = analogRead(trim);//获取电位器输出值
Serial.println(val);//从串口输出可以观察当前值
//根据旋转电位器得到的不同输出值,设置为不同的颜色显示
if(val < 100)
setColor(255, 0, 0);//调用自定义的setColor函数
else if(val >= 100 && val < 200)
setColor(0, 255, 0);
else if(val >= 200 && val < 300)
setColor(0, 0, 255);
else if(val >= 300 && val < 400)
setColor(255, 255, 0);
else if(val >= 400 && val < 500)
setColor(255, 0, 255);
else if(val >= 500 && val < 600)
setColor(0, 255, 255);
else if(val >= 600 && val < 700)
setColor(255, 255, 255);
else if(val >= 700 && val < 800)
setColor(200, 100, 50);
else if(val >= 800 && val < 900)
setColor(50, 200, 100);
else if(val >= 900)
setColor(100, 50, 200);
}
//自定义函数,设置三色LED灯的显示颜色
void setColor(int red, int green, int blue){
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
(3)将USB线缆插入计算机,待程序上传成功后旋转电位器按钮,观察三色LED灯光颜色的变化,本实验结果会呈现一共10种不同颜色,还可以打开串口监视器查看当前电位器的输出值(应为0-1023之间的1个整数)。
3、电位器控制舵机转动
(1)将第2步实验中的三色LED及其电阻和导线拆除,使用导线把舵机的控制线(标有三角形标记的接口)连接到电路板D5(GPIO14)接口,电源线(中间接口)连接到面包板电源总线正极,接地线连接到面包板电源总线负极。电路连接如图所示。
图10-6实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
#include <Servo.h>
int trim = 0; //定义电位器所连接的模拟接口号
int val = 0;
Servo myservo; //创建一个舵机控制类
int pos = 0;
void setup(){
Serial.begin(115200);
myservo.attach(14); //连接舵机到14号数字口
}
void loop(){
val = analogRead(trim); //获取电位器输出值
Serial.println(val); //从串口输出可以观察当前值
pos=map(val,0,1023,0,180); //将读到的模拟值0-1023映射为0°~180°
myservo.write(pos); //舵机转动到相应角度
delay(100); //延时一段时间让舵机转动到对应位置
}
(3)将USB线缆插入计算机,待程序上传成功后旋转电位器按钮,观察舵机旋转角度的变化,也可打开串口监视器观察当前电位器的输出值。
该实验的结果是:随着转动电位器按钮,串口监视器可查看到电位器输出值在0-1023之间变化,同时舵机的指向角度也随之在0-180度范围内改变。舵机在物联网领域有非常广泛的用途,可以作为机器人手臂的控制器,也可以作为摄像头的底座来使用。