Arduino 入门





5.00/5 (4投票s)
Arduino 完全初学者指南
背景
如果你正在阅读这篇文章,说明你打算用一些嵌入式设备做些疯狂的事情。在购买树莓派(Pi)或 Arduino 等设备之前,请务必明确你的项目想法。一旦你清楚了你想做什么,例如构建一台打印机,一个疯狂的机器人或一辆疯狂的汽车,那么就开始考虑你的硬件、设备和开发语言等。
我的建议是,首先要理解你的项目以及你的需求是什么?如果你做到了这一点,那么你的工作就完成了一半,因为嵌入式项目与软件项目不同。
一旦你的想法明确了,就去研究一下设备以及你需要使用的操作系统。因为在嵌入式项目中,设备和操作系统将对你的项目起到至关重要的作用。例如,如果你选择了一个不太受欢迎的操作系统,你可能无法从操作系统社区获得足够的支持,这将很难克服项目中的障碍。
选择你的开发板。
我希望你对你的项目有清晰的认识,如果没有,请回去重新开始。在选择设备之前,请确保你有一个清晰的想法。
一些嵌入式开发板
- Arduino Due
- Maple
- Pinguino
- Rascal
- BeagleBoard
- Intel MinnowBoard Max
- 以上列出的只是几种不同的开发板类型。所以你需要选择最适合你的开发板。
我该如何选择我的开发板。
有两种类型,第一种是单板微控制器,第二种是单板计算机。
单板微控制器
根据维基百科的定义
A single-board microcontroller is a microcontroller built onto a single printed circuit board. This board provides all of the circuitry necessary for a useful control task:microprocessor, I/O circuits, clock generator, RAM, stored program memory and any support ICs necessary. The intention is that the board is immediately useful to an application developer, without them needing to spend time and effort in developing the controller hardware.
对于普通人来说,Arduino 是一款可编程的微控制器,你可以用微控制器做的事情是你可以下达指令让它工作。这类开发板设计用于读取传感器数据并计算数据,或者将信息发送到 PC 或任何其他设备,或者输出到 LCD。
这类开发板主要适用于纯粹的电子项目,如音乐应用、机器人、互动艺术展览、游戏小工具。
示例: Arduino、Maple、Pinguino、Rascal。
单板计算机
根据维基百科的定义
A single-board computer (SBC) is a complete computer built on a single circuit board, with microprocessor(s), memory, input/output (I/O) and other features required of a functional computer. Single-board computers were made as demonstration or development systems, for educational systems, or for use as embedded computer controllers. Many types of home computer or portable computer integrated all their functions onto a single printed circuit board.
单板计算机与单板微处理器板完全相反。我们可以间接地说,单板计算机就是台式机的 CPU。因为它包含可以存储操作系统的 SD 卡槽(如定制的 Linux)。它还包含音频、HDMI、视频输出、以太网端口。这些端口允许你连接到电脑显示器、电视、键盘、鼠标、浏览互联网等。
这些开发板主要用于软件项目,如基础的 Linux 计算机(我们可以用单板计算机构建基础计算机,成本不到 90 美元)、媒体中心、音乐播放器、编写游戏,或者你可以创建自己的 Web 服务器。或者比特币挖矿机。
示例: BeagleBoard、Banana PI、Raspberry Pi、THE PCDUINO。
如果你是新用户,我的建议是你可以选择 Arduino 或 Raspberry Pi。你可能会问为什么,因为这两种设备在市场上提供了更多的教程,也有许多社区成员可以帮助你构建自己的设备。
Raspberry Pi 与 Arduino 的区别
Raspberry Pi 的时钟速度是 Arduino 的 40 倍,内存速度是 Arduino 的 128,000 倍。使用 Raspberry Pi,我们可以构建计算机,它支持 USB 端口和以太网端口。
从这些特性来看,不要认为 Raspberry Pi 比 Arduino 更好。正如前面提到的,Raspberry Pi 速度更快,在软件应用方面很有用,但如果你设计的是与电子相关的嵌入式设备,那么 Arduino 会更胜一筹。
Arduino 的设计简单且灵活,可以连接任何类型的传感器或芯片,其端口可用于读取模拟传感器。Arduino 的另一个主要优点是它的 IDE,使用这个 IDE 我们可以轻松开发应用程序,它支持 C 语言。因此,它是硬件项目的完美选择。
选择你的操作系统。
构建项目的第三个重要任务是选择操作系统。现在,对于我们的项目,我们可以找到许多不同的操作系统,如 Tiny OS、RIOS OS、Contiki OS、Raspian、ArdOS 等。
你可以在此链接找到不同操作系统的完整列表:http://en.wikipedia.org/wiki/List_of_real-time_operating_systems
每个操作系统都有其独特的功能、优点和不同的用途,有些操作系统是为特定目的设计的,例如 Tiny OS 和 Contiki OS 是网络相关项目的最佳操作系统。Vxworks 和 Qnx 类操作系统主要为复杂的嵌入式系统设计。
因此,你需要根据你的项目来选择你的操作系统。有些操作系统支持不同的编程语言。
选择操作系统的建议。
1) 检查操作系统是否处于开发/构建阶段或已标准化。
2) 有多少人正在使用你选择的操作系统,如果使用人数越多,你将从开发社区获得更多的支持和帮助。
3) 不要为小型项目选择复杂的操作系统。
4) 所选操作系统是否支持你的编程语言。现在一些操作系统也支持 C++。
5) 如果你计划开发更复杂的项目,请检查该操作系统是否支持多线程、模块化和实时性(例如 Tiny OS 部分支持模块化和多线程)。
6) 有些操作系统设计用于在特定开发板上工作,例如 Raspian 主要用于基于 Raspberry Pi 的开发板,ArdOS 是为基于 Arduino 的开发板设计的。但 Tiny OS 和 RIOT OS 可以同时适用于 Raspberry Pi 和 Arduino 开发板。
如果你同时选择了操作系统和开发板,那么你就可以开始编程和设计你的开发板了。
我个人喜欢开发基于硬件的项目,所以我会解释如何设置 Arduino 开发板以及如何使用 Arduino 进行编程。
Arduino
Arduino 由 Massimo Banzi 开发并于 2005 年发布。它是一个开源平台。Arduino 是单板微控制器,可以使用 Arduino IDE,该 IDE 可以安装在 Linux、Windows 和 Mac 上,用于编写代码并将其上传到 Arduino 开发板。
Arduino 开发板
Arduino 为不同的目的提供了一套不同的开发板,你可以在 这里 找到 Arduino 产品。
最受欢迎的 Arduino 开发板是Arduino Uno 和 ATmega328 LilyPads。
ArdOS 是 ATmega168/328/1280/2560 系列微控制器的操作系统 (Ard OS)。它于 2013 年发布,并完全支持多任务、通信、互斥锁、消息队列。
电源
Arduino 设备功耗非常低,可以使用 USB 接口或圆筒形插孔供电。所以使用A-to-B USB 线缆可以开始供电。
Arduino IDE
Arduino 之所以受欢迎,是因为它的硬件和 IDE 这两点。
我们可以在不同的桌面操作系统(如 Windows、Linux、Mac 等)上安装 Arduino IDE。我们可以使用 C 或 C++ 编写代码。我们可以在桌面操作系统上轻松设置 Arduino IDE(我将在下面解释),并将程序加载到开发板中。
Arduino 架构
我将以 Arduino Uno 为例来解释 Arduino 开发板。
USB 连接器
使用 USB 连接器,我们可以提供电源,也可以将代码加载到 Arduino 开发板中。
圆筒形插孔。
您可以使用圆筒形插孔为 Arduino 开发板供电。
注意: - 不要使用超过 20 伏的电压。推荐的 Arduino 型号电压为 6 至 12 伏。
模拟
模拟输入(A0 至 A5)用于读取来自温度或热传感器等模拟传感器的信号,并将其转换为数字值,以便我们可以读取。
Digital
这些数字引脚(0 至 13)用于数字输入和数字输出(LED)。
重置按钮
从名称可以看出,它会暂时连接到复位引脚,使用此按钮,我们可以重新启动 Arduino 开发板上的代码。
LED 指示灯
使用此 LED 指示灯,我们可以知道您的 Arduino 正在工作。
主 IC
主 IC 是 Arduino 软件的关键部分,它将大脑连接到 Arduino。使用 IDE,我们将代码加载到主 IC 中。
电压调节器
它是 Arduino 的重要组成部分之一。它控制进入 Arduino 开发板的电压量。
它可以将高达 20 伏的电压正常化,如果电源电压大于 20 伏,它会损坏调节器。
更多关于 http://arduino.cc/en/Main/arduinoBoardUno 的信息。
理论知识足够了,我们开始编程吧。
Arduino IDE 设置
在任何桌面操作系统上安装 IDE 都非常简单,下面的教程将展示如何在 Windows 7 上安装 IDE。
http://arduino.cc/en/main/software
你可以从这个链接下载 IDE。下载 Arduino zip 文件后,将其解压到我的机器中。你也可以下载安装程序,但我更喜欢下载非安装软件套件。
设置 Arduino 开发板。
设置 Arduino 开发板比 Raspberry PI 容易得多。
硬件要求
1) Arduino Uno
2) Type B USB 线缆
- 将 Type B 线缆插入Arduino,另一端(USB)插入你的笔记本电脑。
- 一旦插入 Windows,它就会开始安装驱动程序。
- 几分钟后,它会失败,所以我们需要手动安装。
- 打开设备管理器(在搜索框中输入“设备管理器”)。
- 在设备管理器中,找到“端口 (COM & LPT)”项,你应该会看到一个名为 Arduino UNO (COMxx) 的端口。如果你没有 COM & LPT 部分,请查找“其他设备”。
- 右键单击 Arduino UNO (COMxx),然后转到“驱动程序”选项卡,单击“更新驱动程序”按钮。
- 选择“浏览我的计算机以查找驱动程序软件”选项。然后导航到 Arduino 软件下载的“Drivers”文件夹中的 uno 的驱动程序文件 “ArduinoUNO.inf”。
Hello Blink(你好,闪烁)。
通常,如果你学习编程语言,你的第一个程序会是“hello world”,但在嵌入式世界里,你的第一个程序是“Hello Blink”。
所需物品。
1) Arduino Uno
2) Type B USB 线缆
3) Arduino IDE,
4) 和一个 LED。
硬件设置
1) 将 Type B USB 线缆连接到开发板和你的电脑。
2) 如果你看到 LED 指示灯(红灯),那么你的开发板就可以工作了。
3) 将 LED 的两个引脚插入 Arduino 的 GND 和引脚 13。
注意:- LED 的较短的那个引脚应插入 GND。
软件设置
转到你加载的 IDE 文件夹并打开 Arduino exe 文件(我使用的是非安装版本),它会自动打开。如果你下载的是安装程序,它将像普通软件一样安装。
文件 -> 示例 -> 1.基础 -> Blink
Arduino 的 IDE 中已经包含了一些示例程序。
通过“工具 -> 开发板 -> Arduino Uno”选择 Arduino 开发板。
选择你连接的端口“工具 -> 端口 -> COM”。
如果你不确定你的设备连接到哪个端口,你可以将开发板从笔记本电脑上移除,然后在 IDE 中查看端口。消失的那个就是你的 Arduino 端口。
选择端口后,按下上传按钮。
几秒钟后,你就可以看到开发板上的 LED 灯在闪烁,在你的 IDE 中会看到消息“Done Uploading”(上传完成)。
让我们回顾一下代码。
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the Uno and Leonardo, it is attached to digital pin 13. If you're unsure what pin the on-board LED is connected to on your Arduino model, check the documentation at http://arduino.cc This example code is in the public domain. modified 8 May 2014 by Scott Fitzgerald */ // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
void setup() 函数用于初始化你的东西。
void loop() 函数用于循环你的事情。
pinMode(13, OUTPUT); 它会将引脚 13 初始化为输出引脚。
在主循环中,你用下面的代码行打开 LED。
digitalWrite(13, HIGH);
这会向引脚 13 提供 5 伏电压。这会在 LED 的引脚之间产生电压差,从而点亮 LED。然后你用下面的代码行将其关闭。
digitalWrite(13, LOW);
这会将引脚 13 的电压恢复到 0 伏,从而关闭 LED。在打开和关闭之间,你需要足够的时间让一个人看到变化,所以 delay() 命令告诉 Arduino 在 1000 毫秒(即一秒)内不执行任何操作。当你使用 delay() 命令时,在这段时间内不会发生其他事情。
不仅可以用于硬件项目,我们还可以使用 Arduino 进行网络相关项目。
Arduino 中的 HTTP 客户端。
如果你想连接到你的 Web 服务器并获取数据,在 Arduino 中非常简单,类似于 Java 程序。
#include <Bridge.h> #include <HttpClient.h> //In setup() start Bridge, and wait for a serial connection before going into loop(). void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); Bridge.begin(); Serial.begin(9600); while(!Serial); } //In loop(), create a named instance of HttpClient, and call a URL with client.get(url). void loop() { HttpClient client; client.get("http://arduino.cc/asciilogo.txt"); //As long as there are bytes from the server in the client buffer, read the bytes and print them to the serial monitor. Repeat every 5 seconds. while (client.available()) { char c = client.read(); Serial.print(c); } Serial.flush(); delay(5000); }
// 在 setup() 中启动 Bridge,并在进入 loop() 之前等待串行连接。
void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); Bridge.begin(); Serial.begin(9600); while(!Serial); }
在 loop() 中,创建一个 HttpClient 的命名实例,并使用 client.get(url) 调用一个 URL。
void loop() { HttpClient client; client.get("http://arduino.cc/asciilogo.txt");
// 只要服务器的字节在客户端缓冲区中,就读取字节并将其打印到串行监视器。每 5 秒重复一次。
while (client.available()) { char c = client.read(); Serial.print(c); }
上面的程序将从 arduino.cc 网站下载 asciilogo.txt 文件,并在串行监视器中显示数据。
Arduino Uno 在这里不起作用,所以你需要使用任何支持以太网的 Arduino 开发板,如 Arduino Yún 或 Arduino Ethernet Shield。
你可以在这里找到许多此类示例:
http://arduino.cc/en/Tutorial/HomePage
如果你正在寻找高级编程(如多任务、互斥锁和信号量、消息队列),那么就选择 ArdOS。
你可以从这个 位置 下载并安装 ArdOS。
最佳编码实践
· 尝试使用 int 数据类型。
· 永远不要使用递归。始终使用循环。
· 不要传递太多函数参数。尝试使用全局变量。
· 始终尝试使用 int 或定点运算,以减少算术运算。
· 在使用变量之前初始化它们。
· 在将传感器数据分配给变量之前进行验证。
· 不要暴露所有变量和函数,这可能导致名称冲突。
· 小心动态内存分配。如果你使用 new 关键字,请使用 free 命令删除。
参考文献
https://bitbucket.org/ctank/ardos/wiki/build
http://arduino.cc/en/Tutorial/HomePage