话说我的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为参考):- 供电。Arduino可直接提供3.3v、5v的直流电,用于为外接设备提供电能(也可以外接)
- 信号的输出。Arduino能够输出数字信号,实际上就是依靠通断电传递信号0和1,这个数字信号也可以用来给发光二极管供电,电流在20mA左右,电压最大为5v。
- 信号的输入。Arduino可以接受两种信号:数字信号和模拟信号。模拟信号和数字信号的概念我也只是基本了解,就不在这里装内行了,简单说一下自己的理解:模拟信号可以在一定范围内变化,即电压在一定范围内变化,而Arduino可以识别到电压不同信号,好像是能分1024级吧,典型的应用是做成一个粗略的电压表。
- PWM。我也是弄了半天才搞清PWM到底是啥,所谓的"脉冲宽度调制",实际上就是一种类似模拟信号的数字信号。Arduino并不能输出模拟信号,如果没有PWM,那么Arduino可以输出的只有5v和0v,即全通和全断,PWM可以通过控制0和1的频率,来使电压总体上小于5v,以控制LED的亮度和转速等等。可以使用PWM的针脚有3,5,6,9,10,11。
- 串口通讯。这个不多说了,就当一种传递数据的方式就行了。
基本技能树
[ssbluelist]- C/C++基础,只要能驾驭语法就可以,会使用基本的运算符。
- 电学知识,以闭合电路欧姆定律为基础
- 知道几种传感器
- 想到了再补充吧
需要的基本材料
先熟悉再做事学习中所需的基本材料有:
[ssbluelist]
- 电阻
- 电容
- 二极管
- 三极管
- 发光二极管(LED)
- 面包板
- 杜邦线
- …………
这些东西都可以在淘宝上或者在本地买到,价格便宜,甚至论斤卖。
从最经典教程开始:点亮第一个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); }
编译上传,如果没错应该就是下面这样:
我们还可以给它赋予更多效果,比如定时闪烁,需要用到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