物联网实战 篇一:用 Arduino 点亮一颗 LED

2021-07-20 11:27:23 5点赞 18收藏 1评论

我曾经购买和 DIY 过很多的智能硬件,它们都是基于米家或者易微联平台的,这些原厂的产品应用场景有限,并不能满足所有的控制需求,使用上也有诸多限制,于是利用暑假打算学习下物联网相关的知识,从 Arduino 到 ESP8266-NodeMCU 再到树莓派,最终将所有的设备和传感器互联互通。

我之前只是学过简单的 51 单片机,Arduino 也是从头学起,参考的是「太极创客」团队编写的教程,这套教程免费开源,讲解的非常详细,会中文就能入门,老师的声音也十分好听。本文是第一大章长达 7 小时视频教程的学习笔记,如果有看不懂的地方可以翻看原视频。


一、初识 Arduino 开发板

Arduino 是一款简单易学且功能丰富的开源平台,包含硬件部分(各种型号的 Arduino 开发板)和软件部分(Arduino IDE)。Arduino 开发板能够读取来自不同传感器的模拟或数字输入信号,并将其转换为输出,例如激活电机,打开/关闭 LED,连接到云端等多种操作,帮助我们完成一个又一个炫的创客项目。

Arduino 开发板是一个大的家族,Arduino 官网上一共列出有几十种不同的开发板,初学者常用到的主要有下面三种:

  • Arduino Uno:基于微控制器 ATmega328P,有 14 个数字输入/输出引脚(这些引脚中有 6 个引脚可以作为 PWM 输出引脚),6 个模拟输入引脚,性价比最高,简单易学、稳定可靠,Uno 开发板也是应用最为广泛且参考资料最多的开发板。

  • Arduino Mega:基于 ATmega2560,它是为较为复杂的 Arduino 开发项目而设计的,尺寸要比 Uno 开发板大一倍。有 54 个数字输入/输出引脚(其中有 15 个引脚可用于 PWM 输出),16 个模拟输出引脚,可应用于 3D 打印以及机器人等大型项目。

  • Arduino Nano:与 Uno 核心微控制器(ATmega 328)相同,身材小巧,尺寸和重量都只有 Uno 的三分之一左右。它与 Uno 的区别是 Nano 没有直流电压供电接口,同时 Nano 通过 Mini-B USB 接口与电脑连接。但 Nano 的引脚数量还要略多于 Uno。如果项目对尺寸和重量有要求可以选用 Nano。

用 Arduino 点亮一颗 LED

二、关于 Arduino UNO

Uno 开发板是最适合初学者的 Arduino 开发板,市售的有 Arduino 官方出品的官方板和其它厂商制作的克隆板,外观略有不同,功能都是一样的,售价只有十几块钱。

For-arduino改进行家版本UNO-R3控制开发板ATmega328P单片机模块26.1元天猫精选去购买

用 Arduino 点亮一颗 LED

  • UNO 有 14 个数字输入/输出引脚(数字端口 0-13),其中标有~符号的 6 个引脚可以作为 PWM 输出引脚(3、5、9、10、11),13 脚连接到板载的 LED 指示灯。每个引脚可提供/接收最高 40 mA 的电流(推荐电流 20 毫安)。

  • 6 个模拟输入引脚(A0-A5),作为 ADC(模数转换器)使用。引脚 A0-A5 能够读取模拟电压,ADC 具有 10 位分辨率,这意味着它可以通过 1024 个数字电平表示模拟电压。 ADC 将电压转换成微处理器可以理解的位。

  • ICSP 插头是烧写器利用串行接口给单片机烧写程序用的,我们一般是通过 USB 利用串口通信写程序,ICSP 用不到。

  • 数字引脚 0 和 1 分别是 RX、TX 串行接口(TTL),用于在 Arduino 板和其他串行设备(如计算机,显示器,传感器等)之间交换数据。

每个引脚除了上述的基础功能外,还有更多的复用功能,比如数字引脚 10-13 可以用作 SPI 通信,模拟引脚 A4 和 A5 用作 I2C 通信,数字引脚 2 和 3 为外部中断引脚,详细的引脚功能见下图。

用 Arduino 点亮一颗 LED

三、Arduino IDE 下载和安装

Arduino IDE 软件是 Arduino 开发板的程序开发环境,可以从官网上下载。Arduino 开发语言是基于 C/C++的,如果没接触过编程也没关系,C/C++语言可以说是当今最通用的编程语言之一,学习它的难度也没有您所想象的那么大,去 W3Cschool 上学习一个下午,就能入门了。

打开 Arduino IDE,在工具里面选择 Arduino UNO 开发板,选择合适的端口(可以在计算机设备管理器里面查看),主界面自动生成了两个函数 setup()和 loop(),其中当你给开发板通电后或者按下复位按钮后,setup 函数运行一次,而 loop 函数永远会反复的运行。

打开文件-示例-01.Basics-Blink 程序,这是一个让板载 LED 闪烁的示例程序,点击上传,把程序烧录进 Arduino 里面,如果能观察到开发板上的板载 LED 闪烁,说明配置成功。

用 Arduino 点亮一颗 LED

四、输入与输出

1. pinMode(pin, mode)

Arduino 的引脚可以通过 pinMode() 函数配置为以下三种模式:

  • 输出(OUTPUT)模式:引脚为低阻抗状态,可以向其它电路元器件提供电流(<40mA),比如点亮 LED 或者驱动电机。

  • 输入(INPUT)模式:引脚为高阻抗状态(100 兆欧),此时该引脚可用于读取传感器信号或开关信号。但是引脚悬空时处于不确定状态,需要外接上拉电阻或下拉电阻(一般可以选用 10K 欧姆)。

  • 输入上拉(INPUT_PULLUP)模式:使用 Arduino 微控制器自带内部上拉电阻。

2. digitalWrite(pin, value)

如果该引脚通过 pinMode() 设置为输出模式(OUTPUT),您可以通过 digitalWrite() 语句将该引脚设置为 HIGH(5V)或 LOW(GND)。

// 点亮13引脚的板载LED
pinMode(13, OUTPUT);
digitalWrite(ledPin, HIGH);

3. digitalRead(pin)

读取数字引脚的 HIGH(高电平)或 LOW(低电平)使用 digitalRead() 函数,记得先把引脚配置为输入上拉模式。

// 引脚3接按键开关,按下按键后点亮13引脚的LED,完整程序如下:
int inputPin = 3;
int ledPin = 13;
void setup(){
pinMode(ledPin, OUTPUT); //将引脚13设置为输出模式
pinMode(inputPin, INPUT_PULLUP); //将引脚2设置为输入上拉模式,引脚2与外部按钮连接
}
void loop(){
int val = digitalRead(inputPin); // 读取引脚2的输入情况,开关闭合后,引脚2将获得低电平信号
if (val == LOW){ // 检查引脚2是否为低电平
digitalWrite(ledPin, HIGH); // 当按钮按下时,引脚2为低电平,点亮引脚13 LED
} else{
digitalWrite(ledPin, LOW); // 当按钮未按下,引脚2为高电平,熄灭引脚13 LED
}
}

4. analogWrite(pin, value)

数字输出只能控制 LED 的亮灭,如果要控制 LED 的亮度或者控制电机的转速,就要用到模拟输出 analogWrite() 函数。analogWrite() 指令给该引脚(UNO 只支持引脚 3,5,6,9,10,11)一个固定频率的 PWM 信号(频率大约为 490Hz),0 到 255 为 PWM 的占空比, 0 对应 off, 255 对应 on。在调用 analogWrite() 函数前,无需使用 pinMode() 函数来设置该引脚。

// LED 呼吸灯
for (int a=0; a<=255;a++){ analogWrite(11,a);}
for (int a=255; a>=255;a--){ analogWrite(11,a);}

5. analogRead(pin)

Arduino 控制器有 5 个(A0-A5)10 位数模转换通道,可以将 0-5 伏特的电压输入信号映射到数值 0-1023,比如当模拟输入引脚的输入电压为 2.5 伏特的时候,该引脚的数值为 512。注意在模拟输入引脚没有任何连接的情况下,用 analogRead() 指令读取该引脚,这时获得的返回值为不固定的数值。

// 通过调节电位器, A0引脚的输入电压将在0V-5V之间。
int val = analogRead(A0);

五、实战:用电位器调节 LED 亮度

最后通过一个实战将以上所有内容融会贯通,也就是用电位器调节 LED 的亮度,如果能看懂并复现,Arduino 也就入门了。

电路连接:电位器中间引脚连接到模拟输入 A0 引脚,电位器两端引脚分别连接在 Arduino +5V 和 GND,LED 连接在 Arduino 的 9 号引脚上。

用 Arduino 点亮一颗 LED

原理解释:通过调节电位器,A0 引脚上的电压从 0 变化到 5V,使用analogRead()读取为 0-1023,使用map (x, in_min, in_max, out_min, out_max)函数将模拟输入数值(0 - 1023)等比映射到模拟输出数值区间(0-255)内,然后用analogWrite()函数将该数值写入 9 号引脚,输出对应占空比的 PWM 信号,驱动 LED 发光。

用 Arduino 点亮一颗 LED

程序实现:

void setup() {
pinMode(9, OUTPUT); // 设置9号引脚为输出模式
}

void loop() {
int analogInputVal = analogRead(A0); // 读取模拟输入值
int brightness = map(analogInputVal, 0, 1023, 0, 255); //将模拟输入数值(0 - 1023)等比映射到模拟输出数值区间(0-255)内
analogWrite(9, brightness); //根据模拟输入值调节LED亮度
}

小结

以上就是我从太极创客团队出品的 Arduino 基础教程中学到并整理的相关内容,如果你想入门 Arduino 的话,强烈建议去 B 站观看他们的「零基础入门学用 Arduino」视频教程,除了本文中提到输入输出控制外,还有数码管驱动、Arduino 程序结构、串口通讯相关的内容,简单易懂,一学就会~

做个预告,Arduino 教程的第二章是舵机控制与操作 MeArm 机械臂,欢迎关注,交流学习~

展开 收起

Microsoft 微软 Office 2019 家庭学生版

Microsoft 微软 Office 2019 家庭学生版

189元起

《3D绳结》iOS 生活技能类App

《3D绳结》iOS 生活技能类App

暂无报价

Office 365 家庭版

Office 365 家庭版

239元起

Internet Download Manager 序列号注册激活码

Internet Download Manager 序列号注册激活码

28元起

《国家地理 每日精选》iOS数字版软件

《国家地理 每日精选》iOS数字版软件

1元起

《Picsew》iOS数字版软件

《Picsew》iOS数字版软件

1元起

NS switch 向下走 going under 下行 存档修改金钱技能

NS switch 向下走 going under 下行 存档修改金钱技能

10元起

《kirakira+》 iOS软件

《kirakira+》 iOS软件

暂无报价

《扫描全能王付费版》iOS数字版软件

《扫描全能王付费版》iOS数字版软件

1元起

《拍照取字 专业版》iOS数字版软件

《拍照取字 专业版》iOS数字版软件

1元起

Microsoft 微软 Office 365 个人版 1年订阅

Microsoft 微软 Office 365 个人版 1年订阅

263.62元起

《DARK SOULS III》(黑暗之魂3 )PC数字版游戏

《DARK SOULS III》(黑暗之魂3 )PC数字版游戏

237元起

《航旅纵横PRO》iOS数字版应用

《航旅纵横PRO》iOS数字版应用

1元起

Nintendo 任天堂 SWITCH 马里奥赛车8 豪华版

Nintendo 任天堂 SWITCH 马里奥赛车8 豪华版

301.3元起

《一言》iOS数字版软件

《一言》iOS数字版软件

1元起

《凤凰新闻(专业版)》iOS数字版应用

《凤凰新闻(专业版)》iOS数字版应用

1元起
1评论

发表评论请 登录
  • 最新
  • 最热
评论举报

请选择举报理由

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
18
扫一下,分享更方便,购买更轻松