实验十 电位器应用

实验十 电位器应用


一、实验目的

通过本实验,了解电位器的工作原理和应用场景,熟悉电位器的安装使用过程,掌握在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)使用导线分别连接面包板的电源总线正极和负极到电路板的3V3GND接口;将1个电位器放置在面包板上,注意三个针脚必须在不同的行上,其中电位器上标注了数字1的针脚使用导线连接到面包板电源总线负极上,标注了数字3的针脚使用导线连接到面包板电源总线正极上,中间针脚使用导线连接到电路板A0口;在面包板上放置1LED,将正极通过11K电阻连接到电路板D2GPIO4)接口,负极使用导线连接到面包板电源总线负极上。电路连接如图所示。

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个针脚必须在不同行,其中最长的针脚使用导线连接到面包板电源总线负极;靠近负极针脚的最外侧针脚为红色针脚,通过11K电阻并使用导线将其连接到电路板的D1GPIO5)接口;负极针脚的另一侧针脚为绿色针脚,通过11K电阻并使用导线将其连接到电路板的D2GPIO4)接口;剩下的1个针脚为蓝色针脚,通过11K电阻并使用导线将其连接到电路板的D3GPIO0)接口。电路连接如图所示。

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及其电阻和导线拆除,使用导线把舵机的控制线(标有三角形标记的接口)连接到电路板D5GPIO14)接口,电源线(中间接口)连接到面包板电源总线正极,接地线连接到面包板电源总线负极。电路连接如图所示。

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度范围内改变。舵机在物联网领域有非常广泛的用途,可以作为机器人手臂的控制器,也可以作为摄像头的底座来使用。