Arduino笔记1:基本概念整理+点亮第一个LED

Posted by 橙叶 on Sun, Jan 21, 2018

话说我的Arduino UNO R3自从买回来就一直在桌子上当小摆件放着,最近陆续有一些用到Arduino的想法,索性从头开始慢慢地边学边记。

初次碰Arduino,反正我的感觉是无从下手。虽然Arduino的级别算是入门中的入门,但是对刚刚接触它的我来说,真正了解还是需要一番功夫的。以下是几点我对Arduino的初步了解,很基础,不过也是很重要的,至少让我不再犯懵。

Arduino怎么读?

这是个很尴尬的问题,Google了半天也没找到带音标的,根据老外在视频教程中的发音,自己尝试拼出音标:

[ɑdʒuːrinoʊ](仅供参考,长短音基本不分),另附音频文件(来自Youtube RightSpeech - Pronunciations & Vocabulary)

[embed]https://static.orgleaf.com/audio%2FArduino%20-%20How%20to%20pronounce%20Arduino.mp3[/embed]

中文音译大概是:a zhu rui nao。

Arduino是什么?如何开源?

Arduino是一个开源电子设计平台,在它上面可以进行简单的电路控制设计,使用C作为编程语言。

一款硬件设备的开源意味着这电路、IDE之类的全部公开,根据Arduino的开源协议Creative Commons Attribution Share-Alike,其他人可以根据公开的内容自行生成制作Arduino,也可以对原电路进行修改,但是要继续沿用Creative Commons Attribution Share-Alike协议。

这样一来,我们在购买Arduino时没必要非得选择官方原版,可以选择国内的制造商(当然要靠谱的),价格会便宜很多。比如国产Mega的价格甚至低于原版UNO R3,原版的价格是国产的3~4倍,快要接近树莓派的价格了。

Arduino能做什么?

这儿我并不想列出一个长长的包括什么简单点的比如点亮LED,复杂点的拨入自动避障机器人、3D打印机等等的列表。他们基本上都源于最基本的几个功能(此处以UNO R3为参考):
  1. 供电。Arduino可直接提供3.3v、5v的直流电,用于为外接设备提供电能(也可以外接)
  2. 信号的输出。Arduino能够输出数字信号,实际上就是依靠通断电传递信号0和1,这个数字信号也可以用来给发光二极管供电,电流在20mA左右,电压最大为5v。
  3. 信号的输入。Arduino可以接受两种信号:数字信号和模拟信号。模拟信号和数字信号的概念我也只是基本了解,就不在这里装内行了,简单说一下自己的理解:模拟信号可以在一定范围内变化,即电压在一定范围内变化,而Arduino可以识别到电压不同信号,好像是能分1024级吧,典型的应用是做成一个粗略的电压表。
  4. PWM。我也是弄了半天才搞清PWM到底是啥,所谓的"脉冲宽度调制",实际上就是一种类似模拟信号的数字信号。Arduino并不能输出模拟信号,如果没有PWM,那么Arduino可以输出的只有5v和0v,即全通和全断,PWM可以通过控制0和1的频率,来使电压总体上小于5v,以控制LED的亮度和转速等等。可以使用PWM的针脚有3,5,6,9,10,11。
  5. 串口通讯。这个不多说了,就当一种传递数据的方式就行了。
以上这些功能,将通过C/C++语法的语言进行操作。

基本技能树

[ssbluelist]
  • C/C++基础,只要能驾驭语法就可以,会使用基本的运算符。
  • 电学知识,以闭合电路欧姆定律为基础
  • 知道几种传感器
  • 想到了再补充吧
[/ssbluelist]

需要的基本材料

先熟悉再做事

学习中所需的基本材料有:

[ssbluelist]

  • 电阻
  • 电容
  • 二极管
  • 三极管
  • 发光二极管(LED)
  • 面包板
  • 杜邦线
  • …………
[/ssbluelist]

这些东西都可以在淘宝上或者在本地买到,价格便宜,甚至论斤卖。

从最经典教程开始:点亮第一个LED

如果只想点亮第一个LED,很简单,把它的正极插到3.3v/5v,负极接地,别忘了串联电阻,否则将近0Ω的电阻会瞬间烧毁LED,可能还会顺便烧掉Arduino。

[caption id=“attachment_3041” align=“alignright” width=“229”] 二极管伏安特性曲线[/caption]

 

数字输出的高电平也会给二极管提供5v的电压,不过因为数字信号的产生需要经过单片机等元件,总电阻就大了一些,也可能勉强不串电阻点亮LED,不过对于LED和单片机来说都有烧毁的危险。

如果一时没有电阻和LED也没关系,Arduino自带了一个LED(标记为L或L13),在13号阵脚下方,相当一颗插在13pin的LED。那么如何控制它呢?

下载安装Adruino的IDE,新建一个文件,默认会有这样两部分:

// 因为作用域的关系,一些变量/常量要在这儿设置,比如针脚

void setup() {
  // 这儿用于设置各项参数,比如一个针脚是负责输出还是输入
  
}

void loop() {
  // 这儿是主体控制代码,loop意味着这儿的代码会被无限循环,接收输入信号的操作一般在这儿进行

}

下面我们来点亮L13。

首先定义针脚,我们只需要用到13号针脚,就可以定义一个常量ledPin:

const int ledPin = 13;

然后到了参数设置环节,因为点亮LED需要输出一个高电平供电,所以要将针脚的状态设置为OUTPUT:

void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin,OUTPUT);
  
}

所用到的函数为pinMode(针脚号,状态)

最后是点亮LED:

void loop() {
  digitalWrite(ledPin,HIGH);
}

所使用的函数为digitalWrite(针脚号,电位),顾名思义,使用的是数字针脚,HIGH指输出高电平,LOW则指输入低电平。

完整的代码如下:

const int ledPin = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin,OUTPUT);
  
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledPin,HIGH);
}

编译上传,如果没错应该就是下面这样:

而Arduino的L13就会被点亮,且保持常亮: 

我们还可以给它赋予更多效果,比如定时闪烁,需要用到delay(延时时长)(单位为毫秒):

const int ledPin = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin,OUTPUT);
  
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledPin,HIGH);
  delay(1000);
  digitalWrite(ledPin,LOW);
  delay(1000);
}

效果为持续点亮1秒,熄灭1秒,如此循环:

结语

目前为止我基本入门了Arduino,我又有C/C++基础,剩下的就好办了。后面会看如何接收数字信号、串口通信,最后会进行一些应用,准备以3D打印机收尾,有点难度,不过只是时间问题。

现在当务之急是买一堆电子元件……手头上除了一大把杜邦线没别的了。



comments powered by Disqus