arduino编程语言如何商用降低成本

10块钱成本自制Arduino淘宝商家别怪我_Arduino入门与进阶
10块钱成本自制Arduino淘宝商家别怪我
作者:duino123.com
毛主席说过:自己动手丰衣足食,虽然我们已经小康了,这种精神还是要继续发扬!10元成本自制Arduino,淘宝商家如果知道了会不会哭?
PLCLIVE.COM注:
毛主席说过:自己动手丰衣足食,虽然我们已经小康了,这种精神还是要继续发扬!10元成本自制Arduino,淘宝商家如果知道了会不会哭?
This Instructable shows how to bootload and mount an Atmega328, Atmega328p or Atmega328p-pu for any project. This is a great way to save money by purchasing Atmega328 DIP package microcontrollers instead of using the Arduino development board itself. I put this together at techshop to be able to bootload microncontrollers for future applications they don't do a ton in electronics or programming but you can make some sweet gagets / enclosure there: http://www.techshop.ws!
You can purchase bootloaded Atmega328s from places like sparkfun but it's usually quite cheaper to get a non-bootloaded microcontroller. The Atmega328p-pu used in this instructable was purchased from tayda electronics for 3.50$, its a good place to buy many electrical components. All components except the wires and the arduino itself was purchased from&http://www.taydaelectronics.com
I didn't make the code for the bootloading, I'm using the code offered at&https://github.com/WestfW/OptiLoader
元件清单:
Atmega328烧写部分
1 - Arduino Uno with a bootloaded Atmega328
1 - Atmega328, Atmega328p or Atmega328p-pu
1 - 16MHz crystal
2 - 22pF Capacitor
1 - 10k ohm resistor
1 - breadboard
1 - Atmega328, Atmega328p or Atmega328p-pu
1 - 16MHz crystal
2 - 22pF Capacitor
1 - 10k ohm resistor
1 - breadboard
5v DC power source&or
DC power source above 5v with voltage regulator (Step 6)
(可选元件)
1 - 220 ohm resistor
1 - pushbutton
1 - 10k ohm resistor
1 - 0.1uF capacitor
Step 1: 烧写原理图
With the parts required, this is the schematic for bootloading the Atmega328.
In some cases the 16Mhz crystal circuitry is not required if the Atmega328 registers are set to use the internal clock. But if you include the circuitry it wont matter either way. (so I just recommend including it anyways)
A possible issue: as you can see the VCC to the Atmega on the breadboard is powered by Digital pin 9. This could be a problem since it can only supply so much current to the breadboard. So do not add any other circuitry to this otherwise it may not work. The VCC is connected to pin 9 so the code can easily reset the microcontroller for programming.
Step 2: 烧录程序
I'm using code from the source&https://github.com/WestfW/OptiLoader
You need to make a program with a .ino file (arduino file) also a .h file (header file) and copy the code from the website.
I also included a zip file that has the program already.
Once you have this project made verify and upload to your Arduino.
If you want some feedback while the Atmega328 is being bootloaded you can connect a serial terminal to the Atmega328s serial TX pin (pin 3). To do this you will need a RS-232 to USB cable, and a terminal program like docklight or X-CTU. (This is not required)
Once the Atmega328 is bootloaded you can test it by taking the Atmega328 from the Arduino and replacing it with the recently bootloaded one. Try uploading a program to the new Atmega328 and see if it works! I would suggest uploading the blink program since no circuitry is required to see if its working.
Step 3: 烧录Atmega328
That should complete it for bootloading yourself a new Atmega328!
If bootloading was unsuccessful you can reference the https://github.com/WestfW/OptiLoader readme. You can also try switching the pin 9 to VCC for powering the Atmega328.
I have done this bootloading multiple times with many microcontrollers. I would recommend getting the Atmega from tayda electronics &and getting the Atmega328p-pu. The Atmega328 is a higher power chip than the p/p-pu model so if your using that model the current from pin 9 may not be enough.
Step 4: 烧录完的Atmega328
This part of the instructable is for mounting a Flashed Atmega328 (the chip has been bootloaded and programmed by the Arduino).&
In this instructable the blink program is flashed on to my Atmega328p-pu.
Note: The capacitor connected between VCC to Ground isn't needed and it isn't included in the schematic. (it's a 1uF capacitor)
Step 5: Atmega328原理图
Here is the schematic for mounting the Atmega328 onto a breadboard, in most cases if your making a project you will be mounting this onto a PCB or a prototyping board.&
The LED connected to digital pin 13 is not needed, but works as a good test to check and make sure your circuit works.
The circuitry for the RESET (pin 1) is also optional, if you dont want to include a reset button you must directly wire that pin to VCC.&
As you may notice there is no power source, this is because its optional what way you want to do it. The power to this circuit MUST be 5v. If you have a power source higher than 5v you can include a 5v voltage regulator in the circuit. (circuit example on next step).
Also in some cases if your using the analog pins you need to connect pin 21 to VCC.
The second picture is a schematic of the breadboard layout, the circuit is exactly the same. The external circuitry depends on what you have connected to the pins for your projects.
Step 6: 安装Atmega328稳压器
Here is a circuit example of using a voltage regulator.
ONLY NEEDED if your DC source is above 5v.
You can purchase a 5v Voltage Regulator from here:
http://www.taydaelectronics.com/ic-integrated-circuits/voltage-regulators/lm-7805-voltage-regulator-ic-5v-1-5a.html
The C1 and C2 capacitors depend on the voltage regulator your using. The Voltage Regulator's datasheet should tell what values the capacitors need to be. These capacitors are usually around 0.5uF to 0.1uF.
Step 8: 总结
In most cases you will be mounting the Atmega328 onto a prototyping board and soldering it for projects. I suggest you get a 28 PIN DIP Socket for the microcontroller so it can be removed.&
I hope this instructable was helpful, following these processes is quite simple you just need the required parts!
如需更详细资料,如有好资源分享,请加入QQ交流群:
欢迎阅读,欢迎转载,不用注明出处!本站只提供入门和进阶资料,做您学习的小伙伴!请加群:
如何在面包板上自制Arduino
自制Arduino容性开关
自制Arduino摩斯码解码器 你以为你是007吗
自制Arduino全功能气象站
自动化世界arduino简单介绍 - 简书
arduino简单介绍
什么是arduino?
Arduino,是一个的,它使用了单片机,采用了开放源代码的软硬件平台,建构于简易输出/输入(simple I/O)界面板,并且具有使用类似、的Processing/Wiring开发环境。
以上是维基百科的解释,我觉得这个解释虽然很到位,但不好,在于它忽略了解释的对象,如果我是一个IT小白,那真不明白在说的什么。
那到底如何告诉别人什么是arduino?可以去看arduino中文论坛的。我介绍不来,不多说了,这篇文章主要针对熟悉电子电路的IT从业者以及工作交差。
很多电子从业者的朋友或许会鄙视arduino,不就是一块低性能的AVR单片机开发板吗?搭积木一样的傻瓜式编程的东西,给外行人玩的东西,有什么了不起。诚然,arduino表现出来的是一块单片机开发板,但仔细摸索你会发现,在GitHub里面有Arduino for STM32的源码,各类的IOT芯片也支持arduino,如wifi soc ESP8266等,各类芯片都把自己开发封装成arduino,你还觉得他是只是一块逼格比较高的AVR得开发板吗?所以说按我的理解,arduino是一个准标准的软硬件开发平台,类似VC开发Windows软件一样的平台,集成各类库文件,可以这样类比,电脑硬件对于arduino的硬件板,它的IDE类似VC,它集成各类嵌入式软件开发的库文件,比如delay(),Serial.read()等单片机开发常用函数,以及一些像I2C、SPI接口库或者传感器库,与单片机开发不同之处在于不需要对寄存器进行操作,直接调用函数,简单快捷。有人又说了,STM32、PIC、芯唐什么的单片机也有库函数,也可不直接操作寄存器。可是那些库函数只是简化写寄存器的方式,要使用对应的功能,还是要熟悉对应的寄存器操作,arduino的库函数是完全不用知道那些底层的寄存器的,不同的arduino板直接可以使用相同的函数,像不同单片机跑UCOS一样,移植后开发都一样。所以别说arduino是淘汰AVR的破板了,也别乱鄙视,电脑虽然强大,但8位单片机的出货量是电脑的几何倍,每个东西都有存在的空间,不是越强大越好,只有哪个场所合适用哪个的问题,况且让编程越来越简单是大势所趋,重复造轮子的事很没必要,arduino虽然不算完美方案,但是个指明出路的地方,Windows跟Ubuntu对比起来也丑,但第一系统是Windows,除了它出的早外,有个很大的原因就是基于VC的开发平台真是谁用谁知道,微软量身定做一大堆标准库,简简单单就上手的IDE平台,让多少程序员投入Windows怀抱,才有了现在Windows的生态。所以也很希望在嵌入式开发领域也有个类似的平台,可能arduino不是最终出路,但一定是那个出路的一个台阶。
arduino的优点
Arduino IDE可以在Windows、Macintosh OSX、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
简单清晰的开发
Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
社区与第三方支持
Arduino有着众多的开发者和用户,你可以找到他们提供的众多开源的示例代码、硬件设计。例如,可以在Github.com、Arduino.cc、Openjumper.com等网站找到Arduino第三方硬件、外设、类库等支持,更快更简单的扩展你的Arduino项目。
硬件开发的趋势
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
以上摘自《Arduino程序设计基础》
使用arduino的注意事项
每个东西都有其适用性的地方,其实对于熟悉某个单片机开发的人来说,使用arduino是不合适的,它虽然开发非常简单,对于简单项目,只要关注自己的业务逻辑,直接上手就行了。然而,就是因为他的简单,导致使用不灵活,片上资源也少,有些时候真的会掉进坑里,所以使用时三思,以下是我自己测试后,有些要注意的地方,可能不对,帮忙提醒下。
处理速度慢,实时性不高,基本的arduino版本都是ATmage做主控芯片,它时钟频路16M,跟增强型51差不多,而且代码又做了第二次封装,所以对处理性能要要求的应用自己酌情使用。别说Arduino for STM32,不是官方的,谁知道有什么坑。
多任务、多线程编程有点麻烦,虽然GitHub里可以找到多任务切换的源码,但使用时需要注意每个任务的时间片格,相对于UCOS、RT-Thread之类实时操作系统,各种优先级、抢占机制、线程通讯。用arduino累啊。
中断2个,计数器无,时钟频率设置麻烦,比如IO口的时钟频率基本不能设置,I2C、SPI口也是少的可怜,好多东西都要外扩,没有片上集成。
PWM输出、模拟输入口到挺多的,但PWM的频率最大是500Hz,对于一些控制是不符合要求的,比如有些电机及配套的驱动,用这个频率控制会导致电机振动厉害,另外占空比设置只能0-255,对于一些性能要求比较严格的控制也是比较麻烦的。模拟输入的采样精度是10位,采用间隔是100us,这些都是比较低的值,虽然能满足大部分传感器的值,选用开发时还是需要注意的。
串口缓存最大的数是128,而且不能中断接收,对于一些通讯协议定义起来需要注意了。
举例介绍下arduino的开发过程
说了这些,其实要是没自己上手下不会有概念的,那么我取个例子来说明下arduino的开发过程,就举个避障小车开发的例子。小车的系统结构大致如图。
采用带编码器的直流电机,PWM方式控制电机转速度,各类传感器先举红外传感器,其他待定,arduino控制电机以及各类传感器,于上层主控制器一起构成一个智能小车。
由于编码器需要采集电机脉冲信号,为了方便无误采用arduino的两个中断计数,串口通信和各类传感器采用遍询式判断,为了简化编程,采用任务调度器实现编程。
那么现在开始这个arduino的开发吧!
默认你准备了硬件,那么先安装吧,驱动安装不上看。安装好后打开软件如下图。
配置好后就可以上手了,这里推荐你看Arduino.Cookbook.Michael.Margolis这本书,上面有具体常用函数用法,有些不明白的可以查阅arduino IDE自带的例程,我觉得这样上手比较快,最后具体项目可以Google。比如我需要用到一个任务调度器,找到一个大神弄好的,先自己测试下这个调度器的性能,代码如下:
#include "TaskScheduler.h"
//下载源码放到项目目录下,引用
const int ledPin=13;//led引脚IO号
int ledState=0;//led状态标志
void setup()
// put your setup code here, to run once:
pinMode(ledPin,OUTPUT); //led引脚的IO设置成输出模式
Sch.init(); //初始化调度器
Sch.addTask(ledtest,20,1000,1);
//从第 20 毫秒开始闪烁 LED,每隔 1s, LED 状态改变一次
Sch.addTask(serialtest,0,1,0);
//串口测试程序
Serial.begin(9600); //开始串口通信
Sch.start() ;//启动调度器
void loop()
// put your main code here, to run repeatedly:
Sch.dispatchTasks();
// 执行被调度的任务,用调度器时放上这一句即可
void ledtest()
if(ledState==0) digitalWrite(ledPin,HIGH);
//输出为高电平
else digitalWrite(ledPin,LOW);
//输出为低电平
ledState=~ledS //取反
void serialtest()
if(Serial.available())
//判断串口缓存是否有数据
Serial.print((char)Serial.read());
//将读到的数据发送回去
Serial.flush(); //清空串口缓存
测试下,除了需要注意每个任务的调用时间片,其他都OK,就用这个做小车的软件框架。
未完待续……
多说多做,好好做人
关于Python语言的介绍安装请参考廖雪峰的Python教程Python是一门解释型语言,虽然不能够像c语言一样编译上传到Arduino——什么你说MicroPython,我们再说Arduino呢——仍然是可以跟Arduino的玩耍的,就像scratch一样。 前言 Pyt...
&大众创新 万众创业&,学校对于创客教育日渐重视,热情高涨,纷纷开始创客教育课程,有条件的打造学校创客实验室,不吝斥资;但是也有很多学校囊中羞涩,巧妇难为无米之炊,不知何处下手.诚然很多朋友说,现在硬件便宜了,买个山寨的不到20,自己diy10元,但是实际情况是硬件的申请是...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
http://arduino.osall.com/ http://study.163.com/course/courseMain.htm?courseId=194002#/courseDetail http://book.51cto.com/art/78...
春天是什么颜色?是豌豆的绿,是桃花的粉,还是梨花的白,抑或是蒿子的青翠,那剁碎的蒿子的汁液流淌在菜板上,墨绿色的汁液已经长进了三月的心间。
儿时的记忆中,在清明里一定要做蒿子粑的人,应该是二奶奶,非常干爱净,但不很大方的老人,满头花白卷曲的头发永远梳的层次分明,爽...
今天,安好! 清晨,在生物钟中准时醒来。 赖了几分钟床,喝一口温开水,依旧没有吃早餐。 明明知道早餐的重要性,却依旧没有吃。 戴着耳机听着喜欢的音乐,背着背包,地铁去皇岗口岸。 地铁可以准确的掌握时间。 提前五分钟到达和客户约定地点。 在同学群分享了深圳蓝 十点回到龙华。临...
突然回忆起年少时的我,天真单纯,以一片赤诚之心待人,以为三两个知己是天长地久的情谊,以为可以只求爱情相濡以沫不要面包唇齿相依…… 年纪越长,接触的繁华虚荣越多,心也愈发不坚定,不知何时起,变得开始计较得失,曾经的知己各自有了新的人生轨道,越行越远。曾经爱的非你不可,甚至不惜...
?是身体抵抗力下降了 ,免疫力下降,敏感度就会提高。 ?皮肤严重缺水,即使不换护肤品也会发生过敏 。 ?饮食中本身体质的过敏源、以及休息、环境等的改变,会导致分泌系统异常 ?人的心情和情绪也会导致分泌系统紊乱引起过敏。
一场精神的契合之旅 辽宁 无痕 从《教师博览》方心田总编微信群里遍寻“谁认识辽宁 无痕”开始,我便被幸运和幸福包裹着,尤其是看到自己的名字和那么多的文学和教育大咖放在一起的时候。毫无疑问,这注定是一场关于书、关于阅读、关于教育的精神盛宴,更注定是一场“尺码相同”人的精神契合...发生了什么?
随着移动互联的快速普及,用户越来越喜欢在手机端查看内容、交流互动。为了让大家不错过任何精彩瞬间,我们将小组和MOOC迁移至饭团,丰富产品使用功能,提供优质用户体验。
什么是饭团?
饭团是一个自由交流的平台,所有人都可以发布内容,和兴趣相投的人直接分享你的见解;内嵌于微信之中,操作简单,随时随地与他人交流!
我要怎么找到它?
小组和MOOC的用户内容和资料导出功能即将上线Arduino 是一款价格不高、易于使用的电子平台。包括硬件和软件在内的整个平台是完全开源的,并且使用的是松散地基于 C/C++ 的语言。Arduino 是为希望尝试创建交互式物理对象的实践者、喜欢创造发明的人以及艺术家构建的。这个三部分系列将从基本的 Arduino 硬件开始,并使用它创建名为 &'Duino tag& 的交互式激光游戏,玩家可以使用几乎从头开始构建的设备玩 tag 游戏。在 && 的第 1 部分中,我们将构思作为 'Duino tag 的一部分的基本预备试验。
无论您是 Arduino 新手还是经验丰富的构建者,此项目都有适合您的内容。没有比创建交互式物理对象更令人满意的事情了,因为在需要中断或者需要修改时,您知道所有部件的位置以及所有部件的工作原理。'Duino tag 枪是适合独立完成或与朋友共同完成的优秀项目。要完成此项目,您至少应当基本了解电子学(您应当知道寄存器是什么,但是不必知道其中的深奥原理)并且了解编程(您应当知道循环和变量是什么,但是您不必解析 Big O Notation)。您可以勇敢地进行动手实践。
关于本系列
在本系列中,我们将使用 Arduino 技术来创建名为 'Duino tag 的基本交互式激光游戏:
第 1 部分:了解一些 Arduino 基础知识,布置项目,并且做一个帮助您了解红外线工作原理的实验。
第 2 部分:构建和测试 'Duino tag 枪的接收器部分,包括测试。
第 3 部分:构建发送器并完成 'Duino tag 枪。
关于本教程
要继续学习本教程,您无需具有任何电子学工作经验,尽管使用电子元件的经验肯定对您有用。对于微控制器经验也是如此。如果您使用过微控制器,则有一定的优势,但是记住 Arduino 平台非常适合没有相应经验的人员。首先,您应当愿意拓展自己的技能。使用电子器件和微控制器会是一种有益的经验。大多数软件工程师没有机会为与物理世界交互的设备编写代码,而 Arduino 提供了使用交互式设备的低成本入口点。
本教程是 && 三部分系列的第 1 部分,将主要介绍 Arduino 基础知识。我们将开始使用 Arduino,了解语言基础知识和 API。我们将为 'Duino tag 项目做准备,包括设计基础和整合部件列表。我们将了解如何在线订购部件、去哪里购买以及需要哪些部件。最后,使用一些采购的元件和一些基本测试代码,我们将演示控制枪械操作的基本原理
对于本教程,我们需要一些工具和设备:
具有 USB 端口的计算机
虽然从技术的角度来说并不合适(许多类型的 Arduino 硬件接口都是基于旧式串行端口的),但是本系列在撰写时假定您使用的是基于 USB 进行通信的模型。Arduino 软件可用于 Microsoft& Windows&、Mac OS X 和 Linux&(32 位和 AMD 64 位)。
Arduino Diecimila
这是本教程中使用的 Arduino 硬件的具体模型。您可以替换 Arduino Duemilanove。请从正规的网上经销商那里订购一个。要获得链接,请参阅 。
USB A-B 线
这是类似于已经连接到打印机上的一根 USB 线。
基本的 5mm 红色发光二极管(Light-Emitting Diode,LED)
您可能已经有一个,或者可以在 Radio Shack 或者从网上经销商那里购买。
越亮越好。
Arudino 软件
要下载 Arudino 软件,请参阅 。
Arduino 的安装和设置指南
要下载 Arduino 安装指南,请参阅 。
构建基于 Arduino 的激光游戏,第 1 部分: Arduino 基础知识
用开源硬件与软件平台 Arduino 开始创建电子项目
Arduino 简介
在本节中,我们将介绍 Arduino 硬件的基础知识、如何设置,并简单介绍如何编写软件。
Arduino 是什么?
简言之,Arduino 板是一个微控制器 & 具有各种输入管脚和输出管脚的小型计算器。使用这些管脚,您可以创建无数交互式设备,包括像闪光灯一样简单的设备,以及通过各种输入创建使用伺服系统和引擎的复杂行为的复杂设备。第一个 Arduino 是 2005 年 1 月由米兰交互设计学院的两位教师 & David Cuartielles 和 Massimo Banzi & 创建的。要获得介绍 Arduino 开发人员的在线杂志文章,请参阅 。
Arduino 平台由两部分组成:硬件(包括微控制器、电路板等)和软件(编程接口和语言)。平台的两个部分都是开源的。如果需要,您可以下载 Arduino 的图表、购买需要的所有独立部件、切割电路板并从头开始制作一个电路板。有很多用于这一用途的各种项目(如 Freeduino)。图表和 CAD 文件已经在 Creative Commons Share-Alike 许可下发布。用于编写 Arduino 的软件也是开源的。它是用 Java& 编程语言编写的并且是在 GPL(有一些已经在 LGPL 许可下发布的 C/C++ 微控制器库)下发布的。
有几个可用的微控制器平台,并且许多平台都实现相同的目的:易于编程、与微控制器进行交互、将所有内容封装到一个包中等等。同样地,Arduino 旨在提供一个简单的界面和一个将所有功能集于一身的包,同时尝试提供其他优点:
可以从头开始构建便宜的 Arduino 板,并且预组装的组件十分便宜。Arduino Diecimila 花费大约 35 美元。
跨平台软件
获得适用于 Microsoft Windows、Mac OS X 和 Linux 的 Arduino 软件。
简单的语言
Arduino 开发人员尝试使语言可以被初学者轻松掌握,但是对于高级用户足够灵活。
Arduino 从上到下完全是开源的。如果需要构建或修改软件,您可以随意执行。此外,Arduino 的官方 Web 站点包含丰富的维基,其中的代码样例和示例都是免费共享的。
有大量可用的 Arduino 信息。最佳起点位于官方 Web 站点(请参阅 )。花一些时间阅读该站点中的优秀介绍性信息。
要与 Arduino 硬件进行交互,您需要安装软件。下载适用于您的操作系统的软件并遵循相应的分布安装和设置指南(请参阅系统要求)。它们遵循相同的步骤:
解压缩软件
安装 Arduino 的 USB 驱动程序
连接 Arduino 板
我们将不会详细介绍每个步骤,因为这些步骤将随着环境的不同而变化。让我们讨论一下软件和 Blink 示例。
注:按照 Arduino 的说法,独立的脚本和程序被称为 &sketches&。
在启动软件并装入 Blink 示例后(根据入门指南中的说明),您应当会看到类似图 1 的内容。
这里简要介绍一下该界面,顶部按钮行将控制基本任务,如编译、创建和保存文件、将代码上传到 Arduino 板中以及打开或关闭 Serial Monitor(稍后还有更多任务)。中间窗格包含 Blink 示例的所有代码,并且底部窗格将显示控制台输出、编译错误和序列消息(打开 Serial Monitor 时)。目前,让我们将精力放在中间的窗格上并讨论 Arduino 语言。
Arduino 语言基础知识
Arduino 语言是基于 C/C++ 的,并且如果您以前使用过这种语言,则应十分熟悉它的构造函数和特性。虽然完整回顾该语言不在本教程范围内,但是让我们剖析 Blink 示例并了解一点该语言的知识。如果您已经可以熟练使用代码,则这些内容可能有些过于简单,因此如果您愿意获取一本手册并进一步深入研究,请随意查阅更多语言参考(要获得更多语言参考,请参阅 )。
首先,查看大块注释。Arduino 语言中的注释是用两种样式编写的。
清单 1. 块样式
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&* Block Style like this
也可以用内联样式编写。
清单 2. 内联样式
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// inline like this
接下来,注意声明一个变量:int ledPin = 13;。
从这一行可立即看出 Arduino 语言中的行都是以分号为结尾的。此外,从中可以了解在 Arduino 语言中声明变量所需的几乎所有内容。语法为:声明变量类型,声明变量名,设置变量的初始值。除了整型之外,Arduino 语言还支持无符号的整型、布尔型、字符型、无符号的字符型、字节型、长型、无符号的长型、&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 浮点型、双精度型、字符串型和数组型。在 Arduino 语言参考中查找每种数据类型的详细信息,但是花一些时间了解一下数组类型。在声明数组时,清单 3 中所示的每种方法都是正确的。
清单 3. 声明数组的方法
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
int fourlong[4];& // creates an empty array, 4 elements long
int nolength[] = {8,18,32,64};& // the compiler will figure out how long this array is
int setboth[4] = {8,18,32,64};& // This creates a 4 element array
&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&// and sets the initial value
char someword[7] = "fizbin";& // You need to add one extra element for a null character
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
如果您拥有 Web 开发背景,则这些数组可能看上去有点奇怪。不必担心。在开始使用后,这些数组就更容易理解了。
注:数组是零索引的(zero-indexed)。
清单 4 显示了 setup 函数。
清单 4. setup 函数
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void setup()
& pinMode(ledPin, OUTPUT);
每当 Arduino 板被重置时,就运行一次该函数。每个 sketch 都必须有 setup 函数,即使该函数为空。在这种情况下,setup 函数用于设置 Arduino 硬件中的一个管脚的模式。目前忽略 pinMode 语句并查看该函数的结构。通过声明函数的返回类型(在这种情况下,void 表示函数将不返回值)和函数名来声明函数。在函数名后,请在括号内声明所有必要参数。setup 函数将不接受参数,但是如果需要创建一个接受一个或多个参数的函数,则只需像声明变量一样声明参数。
清单 5. 声明参数
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void someFunction(int a, int b=2)
最后,我们会看到函数代码是用大括号括起来的。
setup 函数之后是名为 loop 的另一个函数。
清单 6. loop 函数
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void loop()
& digitalWrite(ledPin, HIGH);
& delay(1000);
& digitalWrite(ledPin, LOW);
& delay(1000);
在执行了 setup 函数后,将不确定地无限次调用 loop 函数,直至 Arduino 板被关闭,或者直至某个重要事件在时间和空间上造成断层。我们通常在 loop 函数中执行大部分工作,侦听传感器输入并触发某种形式的输出。同 setup 函数一样,每个 sketch 都必须有 loop 函数,即使该函数为空。
除了从 Blink 示例中了解的知识之外,关于 Arduino 语言还需要注意以下事项:
大多数熟悉的控制结构都是受支持的(if、while、for、switch 等)。
算术、比较、布尔、位和混合运算符都是十分标准的。
语言本身支持一些数学、时间、三角学、随机数和串行通信功能。
可以在 sketch 顶部使用 #include 语句包括外部库。
除了所有这些标准功能之外,Arduino 还有一些独特的语言元素。这些构造函数(如上面所示的 pinMode 和 digitalWrite 函数)主要关心如何在 Arduino 中处理各种输入和输出管脚。Arduino 站点中有一个丰富的语言指南(请参阅 )。
好的 & 我们已经介绍了足够的 Arduino 基本知识。让我们了解一下此项目,看看您将从中学习到哪些知识,以及您将面临哪些挑战。
用开源硬件与软件平台 Arduino 开始创建电子项目
准备制造 'Duino tag 枪
如果您从未使用过 Arduino 或者任何其他微控制器,那么看上去这是一个比较庞大的项目。它的确是。此项目将带来一些需要克服的有趣挑战。但是就个人和社会而言,此项目也将带来同等的获益。让我们来看看这些挑战和获益。在本节中,我们将开始制造 'Duino tag 枪。
为什么构建 'Duino tag 枪?
官方 Arduino 页面同时加载了一些样例项目,其中大多数项目将比钻研诸如激光信号枪之类的内容简单得多。构建 'Duino tag 枪将引入一些独特的挑战,同时也提供了一些非常棒的优点。
首先,使用红外线十分复杂(很抱歉,在本教程的课程中没有使用实际的激光)。红外线远比您想像的复杂(肯定比我最初开始做这个项目时考虑得更加复杂)。首先,红外光源到处都是,并且它将从所有事物上弹回(如果您曾经从墙上或画上弹回过遥控装置的信号,则会知道这是怎么回事)。处理复杂的数据算法或者编写每秒必须处理数百万请求的代码是一回事。尝试并处理现实世界的干扰源(如太阳)完全是另一回事。编写代码时使用的解决方法在尝试解决物理世界的问题时会十分有用。
此外,一旦您能够开始使用红外线,那么您将能够开发许多以前从未考虑过的项目 & 包括与电视进行交互以创建通过 IR 彼此通信的廉价交互式设备,使用您自己设计的遥控装置控制计算机的各个部分。
除了处理红外线的复杂性之外,您将发现游戏中还有一个计时问题。目标是构建一个设备,用作发射红外线的枪和一个检测器,后者可以记录其他合法红外光源的击中数。处理这个特殊问题时有一点难度,并且您会发现在克服这个特殊难题后将获得一些好处(并且有希望得到一些乐趣)。
从社会学的角度讲,这个项目非常适合与朋友协同完成。我非常喜欢在我自己的工作室里创建设备,但是有时与一些朋友围坐在桌边并且一起工作也是一种乐趣。由于这些设备往往彼此交互操作,因此不可能只构建一个设备。通过朋友的参与,您将减轻自己的工作。您已经得到了更多发射传感器和更多枪来测试您自己的传感器。这必然将非常有趣。在 'Duino tag 启动并运行后,您将被迫立即向朋友射击。
并且最后,您不必从商店购买一个现成的、无法改装的设备,您已经和他人共同创造了自己的设备。如果您不喜欢它的工作方式,可以改造设备或者更改规则。这可能比购买便宜的现成组件花费多一点,但是最后,您能够拥有可以拆卸检修、重新组装并且随心所欲的设备。您在喜欢的全国玩具连锁店中可购买不到这种玩具。
现在您已经对该项目产生兴趣,让我们讨论一下 'Duino tag 枪。它将做什么?它如何工作?您需要哪些组件?如何封装电子元件?
设计 'Duino tag 枪
在开始设计枪之前,需要讨论它的工作原理。我在此过程中作出了一些声明和假设,以便使一切内容更加清晰。让我们讨论一下这种枪如何工作:
当玩家扣动扳机时,则射出一发子弹。
开枪时,它应当发出 &PEW PEW& 之类的声音。
枪支还将用于检测命中率。
当检测到命中时,枪支应当发出 &KZZKH KZZKH& 之类的另一种声音。
每把枪都可以射出一定数量的子弹。
当枪支没了弹药并且玩家扣动扳机时,枪支应当发出 &EEERK EEERK& 之类的第三种声音。
当玩家被除掉时,枪支应当发出 &BOOM KAPOW& 之类的最后一种声音(是的 & 那是两种声音)。
在这里可以添加更多规则变体,但是这是一个不错的起点。在我们将编写的代码中,我们将建立以下规则集:
每把枪有六发无损的子弹。不可以重新装弹药。可以在没有遇到危险的情况下射出这些子弹。
每个玩家都可以中六枪。当您中了六枪后,您就被杀死了。
在射完第六只子弹后,玩家每射出一发子弹都会增加枪支失灵的可能性。如果枪支失灵,玩家将被杀死。
更通俗地讲,您可以被击中六次,并且可以射击六次。在使用了六发无损的子弹后,每次射出一枪,枪支失灵的概率就会增加。如果枪支失灵,那么您就被杀死了。
基于这些简单规则以及教程中先前提及的一些声明,我们可以建立一些硬件基础:
'Duino tag 是基于红外线的。
枪用作发射器和传感器。
枪需要某种扳机。
枪有声音。
枪应当耐用。
本教程将不会花大量时间讨论如何封装 'Duino tag 枪。在制造完电子元件后,我们将介绍各种选项以创建或对应项目的各种案例。现在已经布置了行为,现在应当对硬件进行说明。但是必须先讨论一下红外线传感器如何工作。
处理红外线
如述,红外辐射包围着我们。太阳放射出红外辐射,灯泡、电视和动物(蝮蛇的 &腹& 指这类蛇用于寻找食物的传感器的形状)也会发出红外辐射。如果设置一个只要检测到任何红外线就触发的传感器,它将被经常触发,因而基本上是没有用处的。
因此如果是这种情况,红外线遥控装置如何工作?电视遥控器包含一个特殊设计的内置传感器,可以检测按照特定频率发射的红外线。例如,索尼将其红外线接口标准化为 40 KHz。换言之,红外线 LED 是以每秒 40,000 次的频率打开和关闭。通过仅感测给定频率的输入,电视可以忽略来自其他来源的红外线。遥控器将通过发射 IR 脉冲信号向电视发射不同的代码。
这是 'Duino tag 枪的实际工作原理。这意味着需要特殊类型的 IR 传感器。我们现在就将讨论这个问题,因为将介绍所需的部件以及从何处得到这些部件。
如述,我们需要一个 Arduino 扳。让我们看一下还需要什么。
红外线 LED
LED 没有任何特殊之处。我使用的是 All Electronics 的 T1 四分之三的 IR LED。
红外线传感器
撰写本系列时使用的是 TSOP2138YA 红外线传感器(也是 All Electronics 的产品)。
单极瞬时开关
这是扳机,因此需要一个不大不小的东西。
压电(Piezo)元素
我们将使用此元素发声。建议使用小闷声。
22 规格实心线或绞线
需要两种颜色。不需要太多 & 最多一米。
需要几个不同的电阻。一个 100&O 电阻(即 100 欧姆或者 Brown-Black-Brown)、一个 10k&O 电阻(即 10000 欧姆或 Brown-Black-Orange)及一个 82&O 电阻(即 82 欧姆或 Grey-Red-Black)。
需要一个 0.1uF 电容。
小放大镜(直径为 3/4 到 1 英寸)& 对于这第一次实验,您可以使用作为宴会礼物提供的便宜塑料镜头。
短的 PVC 或其他钢管。
这些部件花费不到 5 美元,这取决于您在哪里购买。
在哪里购买部件
您应当能够走进 Radio Shack 并找到完成本系列需要的电子元件。如果您愿意从在线经销商那里购买,下面有三家推荐商家:
以合理的价格提供各种电子元件
另一家优秀的在线电子元件货源
All Electronics Corp.
选择比另外两家少一些,但是提供了愉快的购物体验
要获得这些在线经销商的信息,请参阅 。此外,简单的 Web 搜索将返回许多选项。如果您决定在其他地方购买,请记住以下四点:
核对交付时间,尤其是从 eBay 经销商那里订购时。您可以从 eBay 经销商那里找到许多电子元件,但是这些商品经常是直接从中国运来的,需要花费一到两个星期。
不要订购没有规格表的元件。所有电子元件都有规格表,其中列出了关于电压和连接等大量重要信息。如果您手上没有这些信息,您可能会发现使用这些元件十分困难。
货比三家。元件价格差别很大。不要害怕相互参照不同站点开出的价格。除非您将下大单,否则从一个站点订购传感器而从另一个站点订购 LED 没有多大意义。但是您仍然应当确定自己获得的是有竞争力的价格。
精确核对型号,尤其是 IR 传感器的型号。如果您以前使用过电子元件,很显然应该这样做,但是如果您刚开始使用电子元件,则可能不清楚如何做。IR 传感器有许多制造商和型号,并且外观十分相似,但频率不相似。频率十分重要。
在等待部件运达时,让我们先仅使用 Arduino 完成一些操作。这将激发您对项目的兴趣并引入 LED 的罕见功能。这个实验不会成为最终项目的一部分,但是它应当可以帮助您更好地理解频率的工作原理。此外,它将让您开始使用 Arduino 软件和硬件。
用 Arduino 做实验
让我们做一个小实验,通过这个实验可以学习到一些 LED 的新知识,并且帮助我们了解频率。
激发兴趣的巧招
早些时候,我们说过需要一个 LED 和一个闪光灯才能完成本教程。在 Blink 示例中,我们已经使用过 LED。让我们使用同一个 LED 来检测光。是的,检测 光。除了闪光、照射和眩光(blinding)之外,LED 可用于检测光。要获得最佳结果,需要使用有色的 LED(例如红色)和普通白色闪光灯(越亮越好)。
首先取一个 LED 并将阳极(正极 & 通常为长端)插入板子底部的 0 Analog In 管脚中。将阴极(负极 & 通常为短端)插入板子底部的两个 Ground 管脚(标记为 &GND&)之一。
接下来,我们将编写一点代码来侦听 0 Analog 管脚并将读数输出到串口监视器中(我曾经说过我们会谈到这个主题)。
清单 7. 侦听 0 Analog 管脚并将读数输出到串口监视器中
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
/* LED Light Sensor
&* by Duane O'Brien
&* for IBM Developer Works
& int recvPin = 0;
& int wait = 1000;
& int val = 0;
& void setup()
&&& // Initialize the Serial Interface
&&& Serial.begin(9600);
& void loop()
&&& // Take a reading from the Analog Pin
&&& val = analogRead(recvPin);
&&& // Output the detected value
&&& Serial.print("DETECT : ");
&&& Serial.println(val);
&&& // Wait to take the next reading.
&&& delay(wait);
您可以看到这段代码没有太多内容。我们设置了几个变量,初始化串行接口,然后每秒从模拟输入中获取读数。它是一个简单的脚本,但是起到了非常好的效果。保存该脚本并将其上传到 Arduino 硬件中。上传完成后,单击 Arduino 窗口顶部的 Serial Monitor 按钮。这将重置 Arduino 板,然后您应当开始看到一些读数显示在底部窗格中。调暗光源并查看读数。这一切应当类似图 2。
显示的实际数字可能差别很大,这取决于周围的光线的强度、您使用哪种 LED 等等。接下来,打开闪光灯并用它照亮 LED。您应当会注意到检测到的值明显增加。在第一个屏幕快照中,读数大约为 167-168。但是查看图 3 中的读数。
您可以看到在 0-1,023 范围内的模拟输入在闪光灯照射到 LED 上时读数跳跃了大约 90。同样,这些数字可能差别很大,这取决于周围照明、LED 选择和闪光灯强度。但是这是最基本的光传感。
现在,为了作比较,打开 Arduino 硬件周围的几个光源,这样就增加了周边照明,然后注意基线如何增长。
当 LED 与其他光源结合在一起时,您可以看到基线数字增长大约 40,这种跳跃不太明显。在本例中,我们仍然可以从中看出闪光灯何时直接照射到 LED 上。
但是如果必须处理更多环境照明,或者必须处理漫射光源的物体(例如距离 LED 比较远的光),数字差异会变得越来越微妙。为了演示这种情况,需要对 Arduino 进行设置,以让闪光灯从房间的任何角落照射到 LED 上,然后检验结果。
除了展示使用基本 LED 的新方法之外,本例还演示了处理周围可见光和光检测时遇到的困难。您可以想象在处理红外线这样几乎无处不在并且肉眼看不到的光线时,问题将变得多么复杂。
频率的简单演示
现在光传感器已经工作,可以修改代码并使用它了解频率。我们已经了解到,红外线无处不在,因此传感器必须过滤掉不是以特定频率发射的光线。让我们在本节中简单演示一下发射频率如何工作。这并不是一次全面的科学实验,但是它可能会帮助阐明概念。
我们将更改代码,以便在光读数跳到超出基线的 5% 时,将启动一个循环,该循环将查看下两个读数,根据检测到的代码输出特定代码。首先,声明一些附加变量。我们需要一个变量来决定应当获取多少个读数来确定周围光线的基线数字,还需要一个变量来保存期望的最小读数跳跃值,以及一个迭代器、一个保存不同代码的数组和一个跟踪 int 来说明在循环中的位置。
清单 8. 声明变量
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& int recvPin = 0;
& int wait = 1000;
& int val = 0;
& int readings = 5;
& int jump = 0;
& int i = 0;
& int code[2];
& int incycle = 0;
接下来,需要在设置期间获取一组读数,计算平均值,然后决定 5% 的含义。依照我的经验,第一个读数总是异常地高,因此直接去掉该读数。
清单 9. 获取一系列读数
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& void setup()
&&& // Initialize the Serial Interface
&&& Serial.begin(9600);
&&& Serial.print("establishing baseline... ");
&&& val = analogRead(recvPin); // throw out the first one, it's usually high.
&&& delay(wait);
&&& for (i = 0; i &i++)
&&&&& jump += analogRead(recvPin);
&&&&& delay(wait);
&&& jump = (jump / readings)*1.05;
&&& Serial.println(jump);
&&& // Output the detected value
&&& delay(wait);
最后,在循环过程中,您需要读取管脚。如果在循环中,则需要保存代码,并且如果已经收到所有代码,则输出一个结果。如果不在循环中,并且读数高于基线 5%,则启动一个循环。清单 10 可以更加简洁,但是它清楚地说明了正在发生的情况。
清单 10. 读取管脚
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& void loop()
&&& // Take a reading from the Analog Pin
&&& val = analogRead(recvPin);
&&& switch (incycle)
& &&&&case 0:
&&&&&&& if (val & jump)
&&&&&&&&& Serial.println("In Cycle");
&&&&&&&&& incycle = 1;
&&&&&&& } else {
&&&&&&&&& Serial.println("Out Of Cycle");
&&&&& case 1:
&&&&&&&& if (val & jump)
&&&&&&&& {
&&&&&&&&&& code[0] = 1;
&&&&&&&& } else {
&&&&&&&&&& code[0] = 0;
&&&&&&&& }
&&&&&&&& incycle = 2;
&&&&&&&& Serial.println("Read One");
&&&&& case 2:
&&&&&&& if (val & jump)
&&&&&&&&& code[1] = 1;
&&&&&&& } else {
&&&&&&&&& code[1] = 0;
&&&&&&& incycle = 3;
&&&&&&& Serial.println("Read Two");
&&&&& case 3:
&&&&&&& if (code[0] == 0 && code[1] == 0)
&&&&&&&&& Serial.println("Reset");
&&&&&&& } else if (code[0] == 1 && code[1] == 0)
&&&&&&&&& Serial.println("Turn On");
&&&&&&& } else if (code[0] == 0 && code[1] == 1)
&&&&&&&&& Serial.println("Turn Off");
&&&&&&& } else if (code[0] == 1 && code[1] == 1)
&&&&&&&&& Serial.println("Explode");
&&&&&&& code[0] = 0;
&&&&&&& code[1] = 0;
&&&&&&& incycle = 0;
&&& delay(wait);
如果保存并上传这段代码(每次上传后需要打开串行监视器),您应当会看到读数何时完成。通过将闪光灯照射到 LED 上,您可以触发一个循环。下两个读数(一秒一个)将决定输出的最终代码。您可以触发不同的输出,方法为以每秒一次的频率交替打开和关闭闪光灯。例如,如果只是将闪光灯照射到 LED 三秒钟,则应当会触发 &Explode& 消息。如果打开闪光灯一秒钟,关闭一秒钟,然后打开一秒钟,则应当触发 &Turn Off& 代码。下面是一个输出样例。
在这里完成的是以非常低的频率发出二进制消息信号。这类似于 'Duino tag 枪的作用,不过信号枪要以更高的频率完成此操作。
现在,您应当已经为进一步创建和测试 'Duino tag 枪做好了准备,这些内容将在本系列的其余部分中介绍。
在学习第 2 部分之前,您应当准备好一些装备:
烙铁和一些焊料。您在这里不需要奇特的东西,因为您不会执行任何精细或复杂的焊接。
一对剪钳/剥皮钳。建议:不要使用牙齿来剥线。
先前介绍的电子元件。
花一些时间研究 Arduino 站点并学习一些教程。获取 LED 光传感器代码并研究一下您还可以如何处理它。可能最重要的是,召集一些朋友来与您一起完成此项目。如果有其他人参与,此项目将会更有意义(并且更容易)。
阅读(...) 评论()

我要回帖

更多关于 arduino和stm32谁厉害 的文章

 

随机推荐