【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验七:旋转电位器模块 旋钮编码器电路板 模拟量输出0-5V电压 电子积木

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第1张图片
【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第2张图片
电位器模块实验环境
1、实验所需硬件清单——
电位器模块X1
Arduino Uno开发板 X1
杜邦线 若干(备了8条)
LED发光二极管(蓝色)X1
220欧姆限流电阻(1/8W)x1
SG90 9g舵机模块(180度)X1
有源蜂鸣器模块(低电平触发)X1
Proto Shield 原型扩展板(带mini面包板)X1

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第3张图片

(3)实验九开源仿真编程(Linkboy V4.2)串口输出

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第4张图片

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第5张图片

(4)实验十开源图形编程(Mind+、编玩边学)

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第6张图片
4、实验四:用电位器模块控制舵机(SG90 9g)
(1)安装库:IDE-工具-管理库-搜索“Servo”-安装

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第7张图片

(2)实验十一参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十一:用电位器模块控制舵机(SG90 9g)
  安装库:IDE-工具-管理库-搜索“Servo”-安装
  实验接线:电位器模块OUT接Uno的A0,舵机S端接D9
*/

#include  // 声明调用 Servo.h 库
Servo myservo; // 创建一个舵机对象
int potpin =A0; // 连接到模拟口 A0
int val; //变量 val 用来存储从模拟口A0读到的值

void setup()
 {
  myservo.attach(9); // 将引脚D9上的舵机与声明的舵机对象连接起来
}

void loop() 
{
  val = analogRead(potpin); //从模拟口A0读值,并通过val 记录
  val = map(val, 0, 1023, 0, 179); //通过 map 函数进行数值转换
  myservo.write(val); // 给舵机写入角度
  delay(15); // 延时 15ms 让舵机转到指定位置
}

(3)实验四场景图

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第8张图片
(4)实验十二开源仿真编程(Linkboy V4.2)

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第9张图片
(5)实验十三开源图形编程(Mind+、编玩边学)

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第10张图片
5、实验十四:利用电位器A0输入的模拟量,控制8位LED点亮状态
(1)实验说明:电位器阻值为0时,LED灯全熄灭,随着选择电位器阻值增大,逐个点亮8只LED灯,反向旋转电位器,则LED灯逐个熄灭。图为实验五接线示意图。

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第11张图片

(2)实验十四参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十四:电位器调速并带蜂鸣的8位跑马灯
  实验接线:电位器模块OUT接Uno的A1,8只LED灯分别接D2~D9
*/

// 模拟输入引脚定义(电位器)
const int analogPin = A1;

// 引脚定义 LED 个数
const int LEDCount = 8;

// 对应的 LED 引脚
int LEDPins[] = {
  2,
  3,
  4,
  5,
  6,
  7,
  8,
  9,
};


void setup() {
  // 循环设置,把对应的 LED 都设置成输出
  for (int thisLED = 0; thisLED < LEDCount; thisLED++) {
    pinMode(LEDPins[thisLED], OUTPUT);
  }
}

void loop() {
  // 读取电位器的值
  int sensorReading = analogRead(analogPin);
  // 把对应的值转化成 0 - 最大 LED 个数,这里设置的是 8
  int LEDLevel = map(sensorReading, 0, 1023, 0, LEDCount);
  // 循环对比输出到 LED
  for (int thisLED = 0; thisLED < LEDCount; thisLED++) {
    if (thisLED < LEDLevel) {
      digitalWrite(LEDPins[thisLED], HIGH);
    } else {
      digitalWrite(LEDPins[thisLED], LOW);
    }
  }
}

(3)实验五场景图

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第12张图片

(4)实验十五开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十五:电位器调速并带蜂鸣的8位跑马灯之二
  实验接线:电位器模块OUT接Uno的A0,8只LED灯分别接D0~D7
*/

const int ledCount = 8;

void setup() {
  for (int i = 0; i < ledCount; ++i) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  int sensorRead = analogRead(A0); // 获取A0端口的模拟量值
  int ledLevel = map(sensorRead, 0, 1023, 0, 8); 
// 进行map转换,范围为0~1023,输出值在0~8之间
  for (int i = 0; i < ledCount; ++i) {
    digitalWrite(i, i < ledLevel ? HIGH : LOW);    
  }
}

(5)实验十五接线示意图

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第13张图片

6、实验十六:电位器调速并带蜂鸣的8位跑马灯
(1)实验说明:这个实验比较麻烦,因为这个实验包含了跑马灯、蜂鸣器和电位器。电位器阻值越大,跑马灯速度越慢,间隔时间根据电位器的阻值采样为:(100+2×采样值)毫秒,采样值为0~1023。即100~2146毫秒之间,每次点亮LED时,蜂鸣器都会蜂鸣一次(20毫秒)。
实验十六参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十六:电位器调速并带蜂鸣的8位跑马灯
  实验接线:电位器模块OUT接Uno的A0,8只LED灯分别接D2~D9
  低电平触发蜂鸣器接D12
*/

#define Pot A0   //电位器引脚创建A0
#define Buzzer 12  //蜂鸣器接D12 
byte ledPin[] = {2, 3, 4, 5, 6, 7, 8, 9}; //Port 2~9 LED输出,高电平有效
int ledDelay;
int dir = 1;
int currentLED = 0;
int PotBuffer = 0;
unsigned long changeTime;

void setup() {
  pinMode(Buzzer, OUTPUT); //蜂鸣器为输出
  digitalWrite(Buzzer, HIGH); //蜂鸣器初始为不鸣叫
  for (int x = 0; x < 8; x++)
  {
    pinMode(ledPin[x], OUTPUT);  // LED为输出
  }
  changeTime = millis();
}

void loop(){
  PotBuffer = analogRead(Pot);      //读取AD值
  if ((millis() - changeTime) > 20)  //判断蜂鸣时间是否到了20ms
  {
    digitalWrite(Buzzer, HIGH);   //到了则关断蜂鸣器
  }
  if ((millis() - changeTime) > ledDelay)  //判断是否到了LED持续点亮的时间
  {
    changeLED();   //到了则点亮下一个LED
    changeTime = millis();    //再设置现在点亮的起始时间
  }
}

void changeLED() {
  for (int x = 0; x < 8; x++) {
    digitalWrite(ledPin[x], LOW);
  }
  digitalWrite(ledPin[currentLED], HIGH);
  //BuzzerDi();
  digitalWrite(Buzzer, LOW);
  ledDelay = 20 + 2 * PotBuffer;
  currentLED += dir;
  if (currentLED == 7) {
    dir = -1;
  }
  if (currentLED == 0) {
    dir = 1;
  }
}

(3)实验十六场景图

【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯_第14张图片

你可能感兴趣的:(单片机,嵌入式硬件,Arduino,物联网,旋转电位器模块)