亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 电位器控制 LED 条形图:入门经典实验

项目简介

这是一个 Arduino 入门级经典实验:10 个 LED 组成条形图,通过旋转电位器控制亮灯数量。实验涵盖模拟输入读取、map() 映射函数、数组遍历与数字输出控制等核心概念,代码不足 30 行,极适合初学者理解“模拟量转离散量”的思想。

元器件清单

接线图解

LED 条形图 (共阴极)

D2  → LED1 阳极 (串联 220Ω)
D3  → LED2 阳极
...
D11 → LED10 阳极
所有 LED 阴极 → GND

电位器

左脚  → 5V
中间  → A0
右脚  → GND

完整代码 (含注释)

const uint8_t ANALOG_PIN = A0;      // 电位器中间脚
const uint8_t LED_COUNT  = 10;      // LED 总数
const uint8_t LED_PINS[LED_COUNT] = {2,3,4,5,6,7,8,9,10,11}; // 对应引脚

void setup() {
  for (uint8_t i = 0; i < LED_COUNT; i++) {
    pinMode(LED_PINS[i], OUTPUT);
  }
}

void loop() {
  int sensorValue = analogRead(ANALOG_PIN);           // 0~1023
  int ledLevel = map(sensorValue, 0, 1023, 0, LED_COUNT); // 映射为 0~10

  for (uint8_t i = 0; i < LED_COUNT; i++) {
    digitalWrite(LED_PINS[i], (i < ledLevel) ? HIGH : LOW);
  }
  // 可选:串口绘图器观察波形
  // Serial.println(ledLevel);
}

代码核心解析

map(value, fromLow, fromHigh, toLow, toHigh)
线性映射函数,将 10-bit ADC (0–1023) 映射为 LED 等级 (0–10)。注意:map() 使用整数运算,不四舍五入。
数组遍历控制
for (i=0; i 配合 i < ledLevel 判断,实现“低位亮、高位灭”的条形图效果。
扩展:平滑过渡
若需“呼吸”效果,可对 ledLevel 做一阶滤波:ledLevel = 0.7*ledLevel + 0.3*newLevel。

常见变体与进阶

教学延伸建议

  1. 串口绘图器实时显示 ledLevel 波形,观察映射曲线
  2. 加入按键切换:线性/对数/反向三种映射模式
  3. 结合蜂鸣器,做“电子音高指示器”
  4. 用 74HC595 移位寄存器仅占 3 引脚驱动 8/16/24 个 LED

制造工艺

  1. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  2. DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
  3. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  4. 打造功能完整的 Arduino 驱动 3D 打印机械臂:分步指南
  5. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  6. 非接触体温筛查闸机:Arduino MKR1000 + 红外测温 + 舵机控制
  7. PiBot:Arduino驱动的88键钢琴机器人,精准演奏MIDI乐曲
  8. Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
  9. Arduino + ThingSpeak 实时气象监测站
  10. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  11. Arduino + TEA5767 打造 FM 收音机:Nokia 5110 显频谱/信号强度/立体声
  12. Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里

变体硬件变化代码要点
共阳极 LED阴极接 GND,阳极接引脚digitalWrite(..., (i < ledLevel) ? LOW : HIGH) 取反
RGB LED 条 (WS2812)单根数据线控制全彩用 FastLED / Adafruit_NeoPixel,fill_solid(leds, ledLevel, CRGB::Red)
对数刻度 (VU 表)硬件不变ledLevel = log10(sensorValue+1)/log10(1024)*LED_COUNT 更符合人耳听感
双向条形图 (中间为零)LED 排成一行,中间为基准映射为 -5~+5,正亮右半,负亮左半