Raspberry Pi和Arduino谁更好?

两大科技福音,Raspberry Pi(简写为RasPi)和Aruidno把人们从黑暗的“不可创造”中解救出来,指引着一代代勇敢前行的创造者们走向明亮的未来。

今天我们就来普及一下RasPi和Arduino的前世今生。

红方

树莓派由注册于英国的慈善组织“Raspberry Pi 基金会”开发,Eben·Upton/埃·厄普顿为项目带头人。2012年3月,英国剑桥大学埃本·阿普顿(Eben Epton)正式发售世界上最小的台式机,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能,这就是Raspberry Pi,中文译名”树莓派”。什么?只有信用卡大小的电脑?(默默的看向手边无比大的iphone 6p)

Raspberry Pi和Arduino,谁更好?

这么小到个人电脑可以用他来干啥?连屏幕都没有,应该也不能干啥吧。No!树莓派不仅能做服务器、编程、驱动硬件设备,甚至还能用来完Minecraft!简直是科技爱好者的福音,一想到把一台小小电脑装进钱夹里带着到处走就兴奋不已。

Raspberry Pi和Arduino,谁更好?

绿方

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等人共同研发。

Raspberry Pi和Arduino,谁更好?

Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。

Raspberry Pi和Arduino,谁更好?

那么问题来了,RasPi和Arduino哪家强呢?

我们先来看一组参数

Raspberry Pi和Arduino,谁更好?

最明显的的参数就是价格了,5刀的差距不会太大。多花30块人民币就能得到一个512MB内存,700MHz的ARM CPU,还自带wifi和操作系统的小电脑,比起另一边Arduino Uno还不到1M的内存和只有16MHz的时钟周期,在性能上和性价比上树莓派兼职是“完胜”了Arduino。

Raspberry Pi和Arduino,谁更好?

然而世上从没有完胜这种事情。就像我们的祖先驯服了小麦,成功让小麦产出大量的食物,但是我们的祖先也因为种植小麦而终身被困在土地上,小麦也从一种不被重视的杂草,一跃成为地球上最成功的植物,所以到底是我们驯服了小麦,还是小麦驯服了我们?

Raspberry Pi和Arduino,谁更好?

35刀的价位虽然让树莓派一跃成为性价比最高的卡片计算机,但是说到要驱动各种各样的传感器、读取模拟信号、驱动各种电机,树莓派就不那么有优势了。如果把树莓派比作一个文静的白面书生,擅长思考,肉身却不强壮,那么Arduino就是一个壮汉,虽然头脑简单,但是身强体壮。虽然现在俨然已经是智识为上,但是Arduino这种强健的体魄让他的应用更为广泛。如果在树莓派运行过程中把某一个针脚上的线拔了一下,树莓派轻则死机,重则损坏硬件,整个树莓派报废。相比之下,Arduino即使在运行时也能随时插拔,而且Arduino能够直接和各种传感器互联,有什么问题都自己扛,而树莓派有时只能通过另一些设备的驱动才能和传感器通信,有些问题只能让别人来帮忙。这样来看,谁更可爱一些?

Raspberry Pi和Arduino,谁更好?

再来一题

编程学习哪家强,树莓派还是Arduino?

说到树莓派,就不得不说到老大哥Linux系统了。在那个微软称霸的黑暗年代中,linux系统就像一道明亮的闪光一样照亮了大家前行的路,当然,这是程序员眼中的世界。如果换做普通用户,故事就变成了,为什么桌面系统流行了这么多年,这个系统还要输入命令,不能忍!

Raspberry Pi和Arduino,谁更好?

Linux有他独特的学习曲线,而且Linux系统不是自带桌面系统的,也就是说当你开机后等着登录的按钮跳出来的时候,画面会停在写有Login的黑色屏幕上,即使要打开文件夹,都需要输入cd命令。这对于孩子来说,太不直观了。如果说要先学习Linux才能领略Python(一种优雅的编程语言)的强大,先学Python才能驱动整个设备运行,对于孩子来说,前提条件已经消磨了他们的兴趣。如果换做Arduino的话,我们只需要一些电路知识,外加一些scratch基础,就能让孩子上手。随着时间推移,还能够让孩子从Scratch转到C语言,甚至可以对着Scratch代码来看C代码,这种对孩子友好的设备真的不多见。

Raspberry Pi和Arduino,谁更好?

树莓派很优秀也很有趣,只是那并不是初学者的玩具,而是高手的宝刀。我们不能期望着孩子能一步登天。这也是为什么,我们在编程课程的进阶篇中选择了Arduino作为我们的硬件基础。能够提前接触电学、提前玩转诸多传感器设备、提前将代码付诸实践,让自己的设计的逻辑过程能够完成实际的工作。

另外我们在编程课程的进阶篇中也会引入诸如App Inventor等优秀的App制作工具,以及PBL的设计讨论会。我们会快速的复习一下编程中的概念,然后在每一次项目之前,进行讨论、收集资料、讨论设计功能的目的、研究如何实现功能着一些PBL的必备步骤,接着进入软硬件结合的实践。这门课适合12岁以上或者有一定软硬件基础的同学。

极客DIY:利用Arduino 制作一个小机器人

引文Arduino是一款开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。arduino的一些特点,开源架构。我们也可以很低的价格从网上购买到现成的控制板;统一接口的传感器,应有尽有的传感器组件。通过统一的插口,很方便就能连接不同扩展设备。作者提供了一些参考(点击我)。

作者决定开始购买电子元件以及开发板来完成这次的任务,我需要至少两个电机、一些模块(Arduino)、L293D芯片等。

 

下面就是需要用到的东西L293D芯片

极客DIY:利用Arduino 制作一个小机器人

arduino nano V3.0 ATMEGA328P(OSOYOO)

极客DIY:利用Arduino 制作一个小机器人

后来又用了Arduino  Nano V3.0

极客DIY:利用Arduino 制作一个小机器人

杜邦线

极客DIY:利用Arduino 制作一个小机器人

面包板(170孔)

极客DIY:利用Arduino 制作一个小机器人

机器人小车底盘套件、编码器以及电池盒

极客DIY:利用Arduino 制作一个小机器人

Arduino Nano可以说是Arduino USB接口的微型版本,最大的不同是没有电源插座以及USB接口是Mini-B型插座。Arduino Nano是尺寸非常小的而且可以直接插在面包板上使用。其处理器核心是ATmega168(Nano2.x)和ATmega328(Nano3.0),,同时具有14路数字输入/输出口(其中6路可作为PWM输出),8路模拟输入,一个16MHz晶体振荡器,一个mini-B USB口,一个ICSP header和一个复位按钮。 考虑价格等因素于是选择了后者,当然可以利用    Arduino IDE编写程序,然后可通过Nano上ICSP header直接下载程序到MCU。

极客DIY:利用Arduino 制作一个小机器人

如果想要了解更多之前的芯片资料,可以访问Arduino网站。(点击我)

确保之后的工作继续,我将Arduino Nano连接到我的电脑,打开 Arduino IDE然后复制好测试程序(找一个led灯闪烁测试程序),然后查看板子上LED灯是否按照程序执行。

 

 

 

在RobotPlatform.com网站上面有关于L293D芯片的详细信息,视频(见文章最后)中详细介绍了利用面包板如何与板子连接,还有连接跳线的具体方法。视频中虽然有接线方法,但是作者提供了一个示例图,可以通过这个图来帮助你连接板子。

极客DIY:利用Arduino 制作一个小机器人

我在这里虽然使用了L293D芯片,当然如果你想要在此基础上增添更多的功能,可以通过跳线连接面包板的方式来扩展更多的功能。当然你需要确保提供5v的电压,而外接电池引脚是VIN,如果需要更多的电压,可以利用这一点,其自带稳压IC的。

Pin 8 -> VIN  Nano

Pin 1 -> Pin 16

Pin 9 -> Pin 16

Pin 16 -> 5v供电(Nano)

Pin 12 -> Pin 13 (接地)

Pin 4 -> Pin 13 (接地)

Pin 12 ->  Nano(Gnd )

Pin 10 -> D5 ( Nano)控制右边电机

Pin 15 -> D4 (Nano)控制右边电机

Pin 7 -> D7 (Nano )控制左边电机

Pin 2 -> D6 (Nano )控制左边电机

Pin 3 -> 左边电机负极

Pin 6 -> 左边电机正极

Pin 14 -> 右边电机负极

Pin 11 -> 右边电机正极

电池正极-> VIN(Nano)

电池负极->GND( Nano)

接线图

极客DIY:利用Arduino 制作一个小机器人

如果引脚被短路的接地或在其5V电路上会受到损坏甚至烧毁,所以需要小心这一点。所以作者后来考虑成本问题,又买了三个新的板子。这种布线方式允许Nano和电机被同一组电池供电,作者用的电池组可以供6v电压。

作者代码是在论坛上选的,这样就可以看看电机是如何工作的了。

现在可以在Arduino  IDE上面编译它了,在Arduino  IDE 工具选项里面,选择processor(作者是 ATamega328),以及端口(dev/cu.wchusbserial1420)。

 

将程序传至板子上,看看会发生什么,它应该在三秒内向前向后运动,当然这一切取决于连接方式,如果按照之前的来,应该之后会突然停止然后迅速向左转,然后再向前走。利用这篇文章的思路,结合自己的实际情况可以完成更多的事情。

视频观看

 

*参考来源:volumelabs,FB小编亲爱的兔子编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)    

本文转自网络,版权归原作者,如果您觉得不好,请联系我们删除!

Arduino 作品之按键控制熊猫走路

主要元器件介绍

         Arduino 开发板、按键、导线若干,具体照片就不上了,还不清楚的建议去看一下之前的文章。

电路连接示意图

Arduino开发板参加学校的活动上交了,这次就用之前发过的照片充一下数吧~~~~

 

Arduino 作品之按键控制熊猫走路

Arduino 作品之按键控制熊猫走路

                             
Scratch代码如下

当按键被按下,数字口9高电平,然后熊猫就开始向前走,按键松开即停止

   

Arduino 作品之按键控制熊猫走路

 

 

arduino整的永远弹跳的乒乓球

arduino整的永远弹跳的乒乓球

在Reddit上,Electron Dust的制造商“tkuhn”打算创造一台机器,  “目标是尽可能长时间保持乒乓球弹跳。 

为了实现这一点,他使用四个驻极体麦克风感知弹跳球的声音之间的时间差来转向音频反馈。音频处理是在简单的触发器电路的帮助下完成的,而Arduino Nano则用于在每个周期后重置它。

arduino整的永远弹跳的乒乓球

然后将数据传递给Arduino Uno,它采用四个步进电机/驱动器和一个连杆系统来保持球的运行。这个令人印象深刻的设置可以在下面的视频中看到,代码可以在GitHub上去下载。

 

 

 

如何使用arduino发送邮件

如何使用arduino发送邮件

如何使用arduino发送邮件

使用的硬件:

  1. wemos D1开发板(基于ESP8266)

使用的软件:

  1. arduino IDE

实现的效果:

  1. 让wemos D1开发板向指定邮箱发送电子邮件

制作步骤:

一、安装库

  1. 到GitHub网站下载库的zip文件,网址:https://github.com/tackelua/ESP8266GmailSender

如何使用arduino发送邮件

下载的zip文件

2.打开arduino IDE安装这个zip库:

如何使用arduino发送邮件

如何使用arduino发送邮件

这里面的路径是和arduino首选项中设置的是一样的,如下图所示:

如何使用arduino发送邮件

二、修改库文件

修改库文件夹中的Gsender.h文件,如下图所示:

如何使用arduino发送邮件

我这里修改成了网易163邮箱,SMTP端口是465,SMTP服务器是smtp.163.com。其中账号和密码要使用BASE64编码,编码网址为:

http://www.base64encode.org/

如何使用arduino发送邮件

三、示例代码

#include <ESP8266WiFi.h>

#include <Gsender.h>

 

#pragma region Globals

const char* ssid = “”;                           // WIFI network name

const char* password = “”;                       // WIFI network password

uint8_t connection_state = 0;                    // Connected to WIFI or not

uint16_t reconnect_interval = 10000;

#pragma endregion Globals

 

uint8_t WiFiConnect(const char* nSSID = nullptr, const char* nPassword = nullptr)

{

static uint16_t attempt = 0;

Serial.print(“Connecting to “);

if(nSSID) {

WiFi.begin(nSSID, nPassword);

Serial.println(nSSID);

} else {

WiFi.begin(ssid, password);

Serial.println(ssid);

}

 

uint8_t i = 0;

while(WiFi.status()!= WL_CONNECTED && i++ < 50)

{

delay(200);

Serial.print(“.”);

}

++attempt;

Serial.println(“”);

if(i == 51) {

Serial.print(“Connection: TIMEOUT on attempt: “);

Serial.println(attempt);

if(attempt % 2 == 0)

Serial.println(“Check if access point available or SSID and Passwordrn”);

return false;

}

Serial.println(“Connection: ESTABLISHED”);

Serial.print(“Got IP address: “);

Serial.println(WiFi.localIP());

return true;

}

 

void Awaits()

{

uint32_t ts = millis();

while(!connection_state)

{

delay(50);

if(millis() > (ts + reconnect_interval) && !connection_state){

connection_state = WiFiConnect();

ts = millis();

}

}

}

 

void setup()

{

Serial.begin(115200);

connection_state = WiFiConnect();

if(!connection_state)  // if not connected to WIFI

Awaits();          // constantly trying to connect

 

Gsender *gsender = Gsender::Instance();    // Getting pointer to class instance

    String subject = “Subject is optional!”;

    if(gsender->Subject(subject)->Send(“xxxxx@xx.com”, “Setup test”)) {

        Serial.println(“Message send.”);

} else {

Serial.print(“Error sending message: “);

Serial.println(gsender->getError());

}

}

 

void loop(){}

四、发送之后的效果

如何使用arduino发送邮件

如何使用arduino发送邮件

邮件发送成功了!

10个轻松上手制作的Arduino项目

创建Arduino项目可以给您带来很大的满足感,但很多时候初学者不知道从哪里开始。启动创建项目时需要考虑很多事情,如果您没有制作的经验,那可能会令人困惑。正是因为这个原因,我们为初学者收集到10个任何人都可以做的Arduino项目!

 

为了让您开始入门,最好使用Arduino入门套件,包含:Arduino开发板、跳线、电阻、面包板、LED和按钮。一些项目需要额外的部件,我们将列出可以购买它们的链接。

 

在下面的所有项目中,我们使用circuito.io作为BoM(物料清单)、连线指南和代码示例。

 

准备开始了吗?

 

1.  摇摆的温度计

对于该项目,您需要一个Arduino Uno开发板、DS18B20 – 单线数字温度传感器和7段数码管串行显示。

10个轻松上手制作的Arduino项目

 

 

这种温度计非常简单,只需要基本的接线和代码。逻辑非常简单:DS18B20温度传感器的数据通过使用Segment.write和ds18b20.readTempC()显示在7段数码管串行显示上,然后7段数码管显示温度读数:

  1. sevenSegment.write(ds18b20.readTempC());

 

现在摇摆设置:我们用Sugru将零件粘合在一起。它颜色很多,并且很结实。您还可以看到,在最终版本中,我们用穿孔方式替代标准面包板,但这不是必须的。

在我们Hackster.io的项目:https://www.hackster.io/circuito-io-team/simple-arduino-based-thermometer-10b6f0  中,您可以找到有关如何自行构建该项目的所有详细信息。

 

2.  你能喝多快?

我们在这个项目中使用的组件是Arduino Uno、FSR(压力感应电阻)、按钮、压电扬声器和7段数码管显示。

这是我们为圣帕特里克节做的一个不错的小项目。可以看到,我们使用了相同的串行7段数码管显示,但这次显示的不是温度,而是显示时间。压力传感器检测过杯垫上的杯子重量,一旦取出,传感器就会检测到重量的变化,并在7段数码管上开始计时。当它检测到杯子回到在杯垫上时,计数器停止,触发压电扬声器播放曲调。按钮复位时间,您可以进行第二个项目了。

我们在Hackster.io的项目中有该项目所有的细节。Hackster.io项目链接:Chug Meter for St. Patrick’s Day:https://www.hackster.io/circuito-io-team/chug-meter-for-st-patrick-s-day-by-circuito-io-13b137 

3.  监测空气污染

对于这个项目,您将需要一个Arduino Uno开发板、MQ7一氧化碳传感器和共阳极RGB LED指示灯。

一氧化碳传感器通过将RGB LED的颜色从绿色改变为红色(红色=空气质量差,绿色=良好的空气质量)来检测空气中CO气体浓度的水平,并指示空气质量。这个项目有点复杂,因为它需要将MQ7传感器焊接到分组板上,但这真的没有什么大不了的,所以你不用担心。一旦你超过了这个小障碍,你会遇到代码中的map函数,这在不同的Arduino项目中非常有用,因为它将数字从一个范围重新映射到另一个范围。在这种情况下,从MQ7传感器的范围到RGB LED的范围为0-255。如果您准备开始使用,请参阅我们的Hackster教程:https://www.hackster.io/circuito-io-team/red-balloon-air-pollution-detector-709727  中的所有详细信息。

 

4.  口渴的火烈鸟

口渴的火烈鸟是另一个旅程中的伟大的项目。它将帮助您使用Sparkfun土壤湿度传感器监测植物的水分含量。

10个轻松上手制作的Arduino项目

 

要启动项目,您可以在circuito.io生成一个请求,使用SparkFun土壤水分传感器作为输入,压电扬声器为输出,。

如上所述,您还将需要为项目添加其他组件,这些组件将自动添加到circuito.io回复中的BoM部分,以使您的生活更轻松。使用分步指南组装电路,然后上传并自定义代码。

下一步包括使用STL文件打印Thirsty Flamingo的身体。您最终通过将PCB和电池放在适当位置并将两个身体部位拧在一起来组装所有内容。将口渴的火烈鸟放在你的植物盘中,当水分含量变低时会发出哔哔声。

 

5.  回收机器臂

作为创客,也需要学习使用您所拥有的材料,并降低项目成本。

在电子部门,现在是介绍伺服金属齿轮的时候了。伺服系统集成了齿轮和可控制在180度范围内的轴。我们将在以后的文章中介绍这个主题。在这个具体的项目中,我们使用了3个通用金属齿轮伺服系统:

1个用于左右移动手臂

1个用于上下移动手臂

1个用于胳膊夹

 

为了控制舵机,我们使用了一个2轴操纵杆,它由两个电位计和一个按钮组成。我们映射了操纵杆值(再次使用map函数),以便操纵杆x轴将其中一个伺服从右到左(0-180度)移动。操纵杆y轴上下移动不同的伺服(0-180度)。夹具伺服器具有两个位置:180度 – 表示夹具关闭,0表示夹具打开。操纵杆按钮在这些预定位置之间切换。更多详情请参看:Robotic Arm from Recycled Materials:https://www.hackster.io/circuito-io-team/robotic-arm-from-recycled-materials-7e318a?ref=channel&ref_id=27041_trending___&offset=17 

 

6. 飞翔的海牛

一个非常有趣的技术领域是运动检测器,这个Arduino项目将使您能够制作一个能够动摇其翼的海牛作为动作的回应。

10个轻松上手制作的Arduino项目

 

在规划阶段,您只需要一个电源、像Arduino Pro micro 5v这样的微控制器和两个组件:PIR运动传感器和伺服电机。完成整理电路并调整代码之后,您可以通过遵循所提供的步骤和说明或使用Hackster.io项目中的STL压缩文件,为您的海牛3D打印这个漂亮的外壳。

10个轻松上手制作的Arduino项目

 

此时您需要做的就是将电池和开发板放在适当位置,将身体部位拧在一起。将您的飞翔的海牛带到您的门口或任何其他地方,检测到任何运动时,它就会打开双翼。

 

7.  34Five Arduino宠物

当您进入微控制器和代码领域时,您可以制作的另一件事就是这种对加速度做出反应的电子宠物。我们承认,这是一个奇怪而古怪的项目,但它有很多热闹的反应。有一些乐趣怎么了?

10个轻松上手制作的Arduino项目

 

您需要选择用于输入的加速度计、Arduino Uno控制器、用于电源的电池和用于输出的压电扬声器。单击生成并将电路放在一起后,您可以使用STL文件3D打印宠物的身体。在你知道之前,你会有一个惊人的34five Arduino宠物,你可以出去散步,你会惊讶于你已经做了多少。完整的教程是在Hackster.io:https://www.hackster.io/circuito-io-team/34five-arduino-pet-0ab9bb  ,所以你可以访问更多的细节。

 

8.  无人机空气门

无人机最近变得非常受欢迎,你可以用无人机将你的游戏时间提升到一个新的水平,使用这个交互式空气门。对于这个项目,您需要的包括HC-SRO4超声波传感器、9v电池、Sparkfun Arduino Pro迷你控制器和共阳极RGB漫光指示灯。

10个轻松上手制作的Arduino项目

 

无人机对于练习你的飞行技术是非常好的。超声波传感器检测到无人机靠近,将光从红色变为绿色。制造尽可能多的空气门,并通过他们建立一个障碍,让你的朋友们相遇。真的很有趣,相信我们。和往常一样,您在Hackster.io上的社区中心有完整的指示。

 

9. 一个无用的Arduino礼盒

如果你已经达到这个目标,你应该奖励一个Giftduino!

10个轻松上手制作的Arduino项目

 

玩得开心也是Arduino创客世界的重要组成部分,而制造没有目的的项目也没有任何问题。

您可以使用的有趣的组件是A1302霍尔传感器。该传感器工作在霍尔效应的原理上,这意味着它对磁场的差异作出反应。因此,为了激活本项目中的霍尔传感器,我们将磁体放在盒子的盖子上。当盒子打开时,压电扬声器开始播放曲目,屏幕显示礼品盒(或任何你喜欢的)。在这个项目中,您可以看到我们没有使用面包板,而是使用Arduino原型扩展板。我们现在不会在这篇文章中介绍这个话题,但是我们一定会在将来的帖子中加以说明。同时,您可以按照本教程制作自己的Giftduino。链接地址:Giftduino – The Perfect Arduino Gift Box:https://www.hackster.io/circuito-io-team/giftduino-the-perfect-arduino-gift-box-670837 

 

10.  Nespresso胶囊咖啡检测器

对咖啡的爱是普遍的,Nespresso胶囊咖啡检测器可以是一个惊人的小工具来帮助您选择胶囊咖啡。

10个轻松上手制作的Arduino项目

 

该项目的运作机制是RGB光传感器读取红色、绿色和蓝色通道的亮度级别,并将其发送到Arduino,Arduino将根据代码预定义的值识别您的胶囊。在这种情况下,circuito.io在帮助您从每个步骤所需的每一步中仍然是重要的。所需的组件包括RGB光传感器、Arduino pro mini、墙上适配器、电源和串行LCD。自动生成Circuito的材料,原理图和代码,您将可以将其放在一起。按照我们的Hackster.io教程中的说明,在3D打印胶囊容器之前加入电路并对其进行编码。组装在一起,瞧,你有一个Nespresso胶囊检测器。

 

所以现在你有一个更多的信息,关于这个整个Arduino的事情如何工作,是时候开始!花一点时间来准备你的工作环境,并确保你有一切你需要的,然后再坐下来工作。前几个项目可能是具有挑战性的,但它打开了一个创造性的可能性的世界!太奇妙了!

单片机:为Arduino添加命令行界面

单片机:为Arduino添加命令行界面

现在想象一下,如果你想要做一个小制作,想要以一定的顺序产生一个信号脉冲——比如正在测试一个新的芯片或是外设、数字逻辑电路等等,那你少不得要找一块单片机或是Arduino之类的微控制器板,然后写一个简单的程序来控制它。在这个过程中如果想要改变什么参数就必须要重新写程序,然后重新下载或是执行Debug。而对于Arduino来说更是麻烦——更别提Arduino IDE中还不包括Debug功能。有没有什么简单的方法呢?

单片机:为Arduino添加命令行界面

Pieter使用一套固件解决了这个问题。这套固件被下载进Arduino后,上位机(就是你的电脑)就可以用串口的方式与Arduino交互。通过串口,它为你提供了一套使用命令行界面来控制Arduino的方式。就像是Linux等操作系统一样,你可以在命令行界面中输入指令,实时操作Arduino所提供的功能。当前,这套固件支持对GPIO、ADC、I2C、SPI和一个软件RTC进行操作。如果你正在调试一个使用标准I2C或是SPI通信的外设芯片的话,那么这样的一套命令行系统将大大增加调试的便利程度。

单片机:为Arduino添加命令行界面

和其他的命令行界面一样,该界面支持TAB键命令补全、查看历史命令以及一个简单的“help”指令。对于日常的调试使用来说,它使得你能够摆脱每次测试都要写一个简单的小程序的麻烦。安装这个固件需要你将它的Hex文件使用Xloader下载至Arduino Uno。在上电后,使用TERA Term或类似的串口终端软件连接Arduino。

GitHub上Hex文件下载地址:https://github.com/piconomix/piconomix-fwlib/tree/master/boards/avr/arduino_uno_board/apps/cli_explorer

XLoader下载地址:http://xloader.russemotto.com/

项目官方网站:https://piconomix.com/fwlib/_a_r_d_u_i_n_o__u_n_o__b_o_a_r_d__a_p_p__c_l_i.html

Arudino基础教程

基本

Arduino 网络通信

Arduino 无线通信

Arduino 音调库

Arduino 串行外设接口

Arduino 内部集成电路

Arduino 中断

Arduino 通信

Arduino 随机数

Arduino 脉冲宽度调制

Arduino Due 和 Zero

Arduino 三角函数

Arduino 数学库

Arduino 字符函数

Arduino 高级I/O函数

Arduino I/O函数

Arduino 数组

Arduino 时间函数

Arduino 字符串

Arduino 函数

Arduino 循环

Arduino 控制语句

Arduino 运算符

Arduino 变量和常量

Arduino 数据类型

Arduino 程序结构

Arduino 安装

Arduino 板的说明

Arduino 概述

键盘

Arduino 键盘串口

Arduino 鼠标按钮控制

Arduino 键盘消息

Arduino 键盘注销

LED

Arduino LED条形图

Arduino 闪烁LED

电机

Arduino 步进电机

Arduino 伺服电机

Arduino 直流电机

传感器

Arduino 连接开关

Arduino 水位检测器/传感器

Arduino 温度传感器

Arduino 超声波传感器

Arduino PIR传感器

Arduino 湿度传感器

用 Arduino 实现带继电器的拨动开关

用 Arduino 实现带继电器的拨动开关

 

很多情况下我们需要通过程序去实现同一个按钮对应多个操作,例如开关机按钮,按一下开,再按一下就关(注意,这里是指用轻触按钮,而不是通过自锁开关从物理上实现);再例如播放按钮,按一下播放,再按一下暂停。

现在我们会在这样的开关下接一个继电器,通过拨动开关来控制所接入的设备。

为了更简单清晰地呈现中继触发控制的原理,我做了这个小项目。项目的原理图和线路连线如上图。

所需材料:
继电器 X 1
330Ohm 电阻 X 2
晶体管 NPN 2N2222 X 1
二极管 1N4148 X 1
按钮 X 1
LED X 1

按钮连接上拉电阻,需要二极管来截留从继电器线圈返回的电流。这被称为续流二极管(或飞轮二极管)。

工作原理:这里我使用了一个按钮作为拨动开关,它可以模拟打开和关闭而不是用两个按钮。对于继电器上的负载,暂时只使用Led来演示。

用 Arduino 实现带继电器的拨动开关

多数类似项目的这一部分被忽略了。用欧姆表,找到线圈端子的位置。它的值大约或小于100欧姆。找到线圈上没有电压的触点闭合NC(常闭)~0Ohm。(对其他触点NO(常开)开路电阻执行相同操作。)

用 Arduino 实现带继电器的拨动开关

看图片并根据原理图正确连接晶体管E(发射极),B(基极),C(集电极)。

/********************* Simple toggle switch Created by: P.Agiakatsikas *********************/ int button = 8; int led = 13 int status = false; void setup(){ pinMode(led, OUTPUT); pinMode(button, INPUT_PULLUP); // set the internal pull up resistor, unpressed button is HIGH } void loop(){ //a) if the button is not pressed the false status is reversed by !status and the LED turns on //b) if the button is pressed the true status is reveresed by !status and the LED turns off if (digitalRead(button) == true) { status = !status; digitalWrite(led, status); } while(digitalRead(button) == true); delay(50); // keeps a small delay }

用 Arduino 实现带继电器的拨动开关

Arduino 网络通信

德州仪器的CC3000 WiFi模块是一个小型银包,最终为你的Arduino项目带来了易用,经济实惠的WiFi功能。
它使用SPI进行通信(而不是UART),因此你可以根据需要尽可能快或尽可能慢地推送数据。它有一个合适的IRQ引脚中断系统,因此你可以有异步连接。它支持802.11b/g,open/WEP/WPA/WPA2安全,TKIP及AES。具有“BSD socket”接口的内置TCP/IP堆栈支持客户端和服务器模式下的TCP和UDP。

Arduino 网络通信

必需的组件

你将需要以下组件:

  • 1 × Arduino Uno
  • 1 × Adafruit CC3000分线板
  • 1 × 5V继电器
  • 1 × 整流二极管
  • 1 × LED
  • 1 × 220欧姆电阻
  • 1 × 面包板和一些跳线

对于这个项目,你只需要通常的Arduino IDE,Adafruit的CC3000库以及CC3000 MDNS库。我们也将使用aREST库通过WiFi向中继发送命令。

程序

按照电路图进行连接,如下图所示。

Arduino 网络通信

这个项目的硬件配置非常简单。

  • 将CC3000板的IRQ引脚连接到Arduino板的引脚3。
  • VBAT连接到引脚5,CS连接到引脚10。
  • 将SPI引脚连接到Arduino板:MOSI,MISO和CLK分别连接到引脚11,12和13。
  • Vin连接到Arduino 5V,GND连接到GND。

现在,让我们连接继电器。
将继电器放在面包板上后,你可以开始识别继电器上的两个重要部分:指示继电器的线圈部分和连接LED的开关部分。

  • 首先,将Arduino板的8号引脚连接到线圈的一个引脚。
  • 将另一个引脚连接到Arduino板的接地。

您还必须将整流二极管(阳极连接到接地引脚)放置在线圈的引脚上,以在继电器切换时保护电路。

  • 将Arduino板的+5V连接到继电器开关的公共引脚。
  • 最后,将开关的另一个引脚(通常是继电器断开时未连接的引脚)连接到与220欧姆电阻串联的LED,并将LED的另一端连接到Arduino的接地。

测试单个组件

你可以使用以下草图测试继电器:

const
int relay_pin = 8;

// Relay pin
 

void setup()
{
 
  Serial.begin(9600);

 
  pinMode(relay_pin,OUTPUT);


  }
 
void loop()
{
   // Activate relay
    
   digitalWrite(relay_pin, HIGH);

   // Wait for 1 second
   
  delay(1000);

   // Deactivate relay
    
   digitalWrite(relay_pin, LOW);

   // Wait for 1 second
   
  delay(1000);


  }

代码说明

代码是不言自明的。你只需将其上传到电路板,继电器将每秒切换状态,LED将相应地亮起和熄灭。

添加WiFi连接

现在让我们使用CC3000 WiFi芯片无线控制继电器。该项目的软件基于TCP协议。但是,对于这个项目,Arduino板将运行一个小的Web服务器,以便我们可以“监听”来自计算机的命令。我们先来看看Arduino草图,然后我们将看到如何编写服务器端代码并创建一个漂亮的界面。
首先,Arduino草图。这里的目标是连接到你的WiFi网络,创建Web服务器,检查是否有传入的TCP连接,然后相应地更改继电器的状态。

代码的重要部分

#include <Adafruit_CC3000.h>#include <SPI.h>#include <CC3000_MDNS.h>#include <Ethernet.h>#include <aREST.h>

你需要在代码中定义特定于你的配置的内容,即Wi-Fi名称和密码,以及TCP通信端口(我们在此使用了80)。

// WiFi network (change with your settings!)
   
#define WLAN_SSID "yourNetwork" // cannot be longer than 32 characters!
   
#define WLAN_PASS "yourPassword"
   
#define WLAN_SECURITY WLAN_SEC_WPA2 // This can be WLAN_SEC_UNSEC, WLAN_SEC_WEP,
 //WLAN_SEC_WPA or WLAN_SEC_WPA2  // The port to listen for incoming TCP connections
   
#define LISTEN_PORT 80

然后我们可以创建CC3000实例,服务器和aREST实例:

// Server instance
    Adafruit_CC3000_Server restServer(LISTEN_PORT);

// DNS responder instance
    MDNSResponder mdns;

// Create aREST instance
    aREST rest = aREST();

在草图的setup()部分,我们现在可以将CC3000芯片连接到网络:

cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY);

计算机将如何知道在哪里发送数据?一种方法是运行草图一次,然后获取CC3000板的IP地址,并再次修改服务器代码。但是,我们可以做得更好,这就是CC3000 MDNS库发挥作用的地方。我们将使用此库为我们的CC3000板分配一个固定名称,以便我们可以将此名称直接写入服务器代码。
这可以用下面的代码片段完成:

if (!mdns.begin("arduino", cc3000))
{
   while(1);


  }

我们还需要监听传入的连接。

restServer.begin();

接下来,我们要对将被连续执行的草图的loop()函数进行编码。我们首先要更新mDNS服务器。

mdns.update();

在Arduino板上运行的服务器将等待传入连接并处理请求。

Adafruit_CC3000_ClientRef client = restServer.available();

rest.handle(client);

现在通过WiFi测试项目非常容易。确保你使用自己的WiFi名称和密码更新草图,并将草图上传到Arduino板。打开你的Arduino IDE串口监视器,并查找电路板的IP地址。
我们假设其余的是192.168.1.103。
然后,只需进入你喜欢的网络浏览器,然后键入:
192.168.1.103/digital/8/1
你应该看到继电器自动打开。

构建继电器界面

 

我们现在将编写项目的界面。这里将有两个部分:包含界面的HTML文件和用于处理界面上点击的客户端Javascript文件。这里的界面基于aREST.js项目,这是为了方便从你的计算机控制WiFi设备。
让我们先看一下名为interface.html的HTML文件。第一部分包括导入所有界面需要的库:

<head>
<meta charset = utf-8 />
<title>Relay Control </title>
<link rel = "stylesheet" type = "text/css"
 
  href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<link rel="stylesheet" type = "text/css" href = "style.css">
<script type = "text/javascript"
 
  src = "https://code.jquery.com/jquery-2.1.4.min.js">
</script>
<script type = "text/javascript"
 
  src = "https://cdn.rawgit.com/Foliotek/AjaxQ/master/ajaxq.js">
</script>
<script type = "text/javascript"
 
  src = "https://cdn.rawgit.com/marcoschwartz/aREST.js/master/aREST.js">
</script>
<script type = "text/javascript"
 
  src = "script.js">
</script>
</head>

然后,我们在界面中定义两个按钮,一个用于打开继电器,另一个用于再次关闭继电器。

<div class = 'container'>
<h1>Relay Control</h1>
<div class = 'row'>   <div class = "col-md-1">Relay</div>   <div class = "col-md-2">
 <button id = 'on' class = 'btn btn-block btn-success'>On</button>      </div>   <div class = "col-md-2">
 <button id = 'off' class = 'btn btn-block btn-danger'>On</button>      </div>   </div>
</div>

现在,我们还需要一个客户端Javascript文件来处理按钮上的点击。我们还将创建一个设备,我们将链接到Arduino设备的mDNS名称。如果你在Arduino代码中改变了这个,你也需要在这里修改它。

// Create device var device = new Device("arduino.local");

// Button
$('#on').click(function()
{
   device.
   digitalWrite(8, 1);


  });

$('#off').click(function()
{
   device.
   digitalWrite(8, 0);


  });

该项目的完整代码可以在 GitHub 存储库中找到。进入界面文件夹,只需用你喜欢的浏览器打开HTML文件。你应该会在浏览器中看到类似的内容:

Arduino 网络通信

 

尝试点击Web界面上的按钮;它应该立即改变继电器的状态。
如果你设法让它工作了,恭喜你,你刚刚构建了一个Wi-Fi控制的电灯开关。当然,通过这个项目你可以控制更多的电灯。只需确保你的继电器支持你想要控制的设备所需的电源,你就可以很好的实现了。