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控制的电灯开关。当然,通过这个项目你可以控制更多的电灯。只需确保你的继电器支持你想要控制的设备所需的电源,你就可以很好的实现了。

Arduino 脉冲宽度调制

脉冲宽度调制或PWM是用于改变脉冲串中的脉冲宽度的常用技术。PWM有许多应用,如控制伺服和速度控制器,限制电机和LED的有效功率。

PWM的基本原理

脉冲宽度调制基本上是一个随时间变化而变化的方波。基本的PWM信号如下图所示。

Arduino 脉冲宽度调制

有很多术语与PWM相关:

  • On-Time(导通时间) 

    – 时间信号的持续时间较长。

  • Off-Time(关断时间) 

    – 时间信号的持续时间较短。

  • Period(周期) 

    – 表示为PWM信号的导通时间和关断时间的总和。

  • Duty Cycle(占空比) 

    – 它表示为在PWM信号周期内保持导通的时间信号的百分比。

周期

如图所示,Ton表示导通时间,Toff表示信号的关断时间。周期是导通和关断时间的总和,并按照以下公式计算:

Arduino 脉冲宽度调制

占空比

占空比用于计算为一段时间的导通时间。使用上面计算的周期,占空比计算为:

Arduino 脉冲宽度调制


analogWrite()函数


analogWrite()
函数将模拟值(PWM波)写入引脚。
它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用
analogWrite()函数之后,引脚将产生指定占空比的稳定方波,直到下一次调用
analogWrite()或在相同引脚上调用digitalRead()或
digitalWrite()。
大多数引脚上的PWM信号频率约为490 Hz。在Uno和类似的板上,引脚5和6的频率约为980Hz。Leonardo上的引脚3和11也以980Hz运行。

在大多数Arduino板上(ATmega168或ATmega328),此功能在引脚3,5,6,9,10和11上工作。在Arduino Mega上,它在引脚2-13和44-46上工作。旧的Arduino ATmega8板仅支持引脚9,10和11上的
analogWrite()


Arduino 脉冲宽度调制


Arduino Due支持引脚2至13以及引脚DAC0和DAC1上的 

analogWrite()与PWM引脚不同,DAC0和DAC1是数模转换器,用作真正的模拟输出。

在调用
analogWrite()之前,不需要调用pinMode()将引脚设置为输出。


analogWrite()函数语法


  analogWrite ( pin , value ) ;

value − the duty cycle: between 0 (always off) and 255 (always on).

value – 占空比:0(始终导通)到255(始终关断)之间。

示例

int ledPin = 9;

// LED connected to digital pin 9 int analogPin = 3;

// potentiometer connected to analog pin 3 int val = 0;

// variable to store the read value  void setup() {
 
  pinMode(ledPin, OUTPUT);

// sets the pin as output

  }  void loop() {
   val = analogRead(analogPin);

// read the input pin
    
  analogWrite(ledPin, (val / 4));

// analogRead values go from 0 to 1023, 
       // 
  analogWrite values from 0 to 255

  } 

Arduino I/O函数

Arduino板上的引脚可以配置为输入或输出。我们将在这些模式下解释引脚的功能。重要的是要注意,大多数Arduino模拟引脚可以按照与数字引脚完全相同的方式进行配置和使用。

引脚配置为INPUT

Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 

pinMode()显式声明为输入。以这种方式配置的引脚被称为处于高阻抗状态。输入引脚对采样电路的要求非常小,相当于引脚前面的100兆欧的串联电阻。

这意味着将输入引脚从一个状态切换到另一个状态所需的电流非常小。这使得引脚可用于诸如实现电容式触摸传感器或读取LED作为光电二极管的任务。

被配置为pinMode(pin,INPUT)的引脚(没有任何东西连接到它们,或者有连接到它们而未连接到其他电路的导线),报告引脚状态看似随机的变化,从环境中拾取电子噪音或电容耦合附近引脚的状态。

上拉电阻

如果没有输入,上拉电阻通常用于将输入引脚引导到已知状态。这可以通过在输入端添加上拉电阻(到5V)或下拉电阻(接地电阻)来实现。10K电阻对于上拉或下拉电阻来说是一个很好的值。

使用内置上拉电阻,引脚配置为输入

Atmega芯片内置了2万个上拉电阻,可通过软件访问。通过将pinMode()设置为INPUT_PULLUP可访问这些内置上拉电阻。这有效地反转了INPUT模式的行为,其中HIGH表示传感器关闭,LOW表示传感器开启。此上拉的值取决于所使用的微控制器。在大多数基于AVR的板上,该值保证在20kΩ和50kΩ之间。在Arduino Due上,它介于50kΩ和150kΩ之间。有关确切的值,请参考板上微控制器的数据表。

当将传感器连接到配置为INPUT_PULLUP的引脚时,另一端应接地。在简单开关的情况下,这会导致当开关打开时引脚变为高电平,当按下开关时引脚为低电平。上拉电阻提供足够的电流来点亮连接到被配置为输入的引脚的LED。如果项目中的LED似乎在工作,但很昏暗,这可能是发生了什么。

控制引脚是高电平还是低电平的相同寄存器(内部芯片存储器单元)控制上拉电阻。因此,当引脚处于INPUT模式时,配置为有上拉电阻导通的引脚将被开启;如果引脚通过pinMode()切换到OUTPUT模式,引脚将配置为高电平。这也适用于另一个方向,如果通过pinMode()切换到输入,则处于高电平状态的输出引脚将设置上拉电阻。

示例

pinMode(3,INPUT) ;

// set pin to input without using built in pull up resistor pinMode(5,INPUT_PULLUP) ;

// set pin to input using built in pull up resistor

引脚配置为OUTPUT

通过pinMode()配置为OUTPUT的引脚被认为处于低阻抗状态。这意味着它们可以向其他电路提供大量的电流。Atmega引脚可以向其他器件/电路提供(提供正电流)或吸收(提供负电流)高达40mA(毫安)的电流。这是足以点亮LED或者运行许多传感器的电流(不要忘记串联电阻),但不足以运行继电器,螺线管或电机。

试图从输出引脚运行高电流器件,可能损坏或破坏引脚中的输出晶体管,或损坏整个Atmega芯片。通常,这会导致微控制器中出现“死”引脚,但是剩余的芯片仍然可以正常工作。因此,最好通过470Ω或1k电阻将OUTPUT引脚连接到其他器件,除非特定应用需要从引脚吸取最大电流。

pinMode()函数

pinMode()函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。此外,INPUT模式显式禁止内部上拉。

pinMode()函数语法

Void setup ()
{
 
  pinMode (pin , mode);


  } 
  • pin – 你希望设置模式的引脚的编号

  • mode 

    – INPUT,OUTPUT或INPUT_PULLUP。

示例

int button = 5 ;

// button connected to pin 5
int LED = 6;

// LED connected to pin 6
 
void setup ()
{
 
  pinMode(button , INPUT_PULLUP);

    // set the digital pin as input with pull-up resistor
  
  pinMode(button , OUTPUT);

// set the digital pin as output
  }
 
void setup ()
{
   If (digitalRead(button ) == LOW) // if button pressed{
      
   digitalWrite(LED,HIGH);

// turn on led
      
  delay(500);

// delay for 500 ms
       
   digitalWrite(LED,LOW);

// turn off led
      
  delay(500);

// delay for 500 ms
     
   }
  }


digitalWrite()函数


digitalWrite()
函数用于向数字引脚写入HIGH或LOW值。
如果该引脚已通过pinMode()配置为OUTPUT,则其电压将被设置为相应的值:HIGH为5V(或3.3V在3.3V板上),LOW为0V(接地)。如果引脚配置为INPUT,则
digitalWrite()将启用(HIGH)或禁止(LOW)输入引脚的内部上拉。
建议将pinMode()设置为INPUT_PULLUP,以启用 内部上拉电阻。

如果不将pinMode()设置为OUTPUT,而将LED连接到引脚,则在调用
digitalWrite(HIGH)时,LED可能会变暗。在
没有明确设置pinMode()时,
digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。


digitalWrite()函数语法

Void loop()
{
   digitalWrite (pin ,value);


  } 
  • pin – 

    你希望设置模式的引脚的编号

  • value 

    – HIGH或LOW。

示例

int LED = 6;

// LED connected to pin 6
 
void setup ()
{
 
  pinMode(LED, OUTPUT);

// set the digital pin as output
  }
 
void setup ()
{
    
   digitalWrite(LED,HIGH);

// turn on led
   
  delay(500);

// delay for 500 ms
    
   digitalWrite(LED,LOW);

// turn off led
   
  delay(500);

// delay for 500 ms
  }

analogRead()函数

Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。为了读取这种类型的传感器,我们需要一个不同类型的引脚。

在Arduino板的右下角,你会看到6个标记为“Analog In”的引脚。这些特殊引脚不仅可以告知是否有电压施加给它们,还可以告知它们的值。通过使用analogRead()函数,我们可以读取施加到其中一个引脚的电压。

此函数返回0到1023之间的数字,表示0到5伏特之间的电压。例如,如果施加到编号0的引脚的电压为2.5V,则analogRead(0)返回512。

analogRead()函数语法

analogRead(pin);

  • pin – 要读取的模拟输入引脚的编号(大多数电路板上为0至5,Mini和Nano上为0至7,Mega上为0至15)

示例

int analogPin = 3;

//potentiometer wiper (middle terminal)
 //connected to analog pin 3 
int val = 0;

// variable to store the value read
 

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

// setup serial

  }
 
void loop()
{
   val = analogRead(analogPin);

// read the input pin
  
  
  Serial.println(val);

// debug value

  } 

Arduino 概述

Arduino是一个基于易用硬件和软件的原型平台(开源)。它由可编程的电路板(称为微控制器)和称为Arduino IDE(集成开发环境)的现成软件组成,用于将计算机代码写入并上传到物理板。


主要特点是:

  • Arduino板卡能够读取来自不同传感器的模拟或数字输入信号,并将其转换为输出,例如激活电机,打开/关闭LED,连接到云端等多种操作。

  • 你可以通过Arduino IDE(简称上传软件)向板上的微控制器发送一组指令来控制板功能。

  • 与大多数以前的可编程电路板不同,Arduino不需要额外的硬件(称为编程器)来将新代码加载到板上。你只需使用USB线即可。

  • 此外,Arduino IDE使用C++的简化版本,使其更容易学习编程。

  • 最后,Arduino提供了一个标准的外形规格,将微控制器的功能打破成更易于使用的软件包。

Arduino 概述

Arduino板的类型

根据使用的不同微控制器,可提供各种Arduino板。然而,所有Arduino板都有一个共同点:它们通过Arduino IDE编程。

差异基于输入和输出的数量(可以在单个板上使用的传感器,LED和按钮的数量),速度,工作电压,外形尺寸等。一些板被设计为嵌入式,并且没有编程接口(硬件),因此你需要单独购买。有些可以直接从3.7V电池运行,其他至少需要5V。

以下是可用的不同Arduino板的列表。

基于ATMEGA328微控制器的Arduino板

板名称 工作电压 时钟速度 数字i/o 模拟输入 PWM UART 编程接口
Arduino Uno R3 5V 16MHz 14 6 6 1 USB通过ATMega16U2
Arduino Uno R3 SMD 5V 16MHz 14 6 6 1 USB通过ATMega16U2
Red Board 5V 16MHz 14 6 6 1 USB通过FTDI
Arduino Pro 3.3v/8 MHz 3.3V 8MHz 14 6 6 1 FTDI兼容头
Arduino Pro 5V/16MHz 5V 16MHz 14 6 6 1 FTDI兼容头
Arduino mini 05 5V 16MHz 14 8 6 1 FTDI兼容头
Arduino Pro mini 3.3v/8mhz 3.3V 8MHz 14 8 6 1 FTDI兼容头
Arduino Pro mini 5v/16mhz 5V 16MHz 14 8 6 1 FTDI兼容头
Arduino 

Ethernet

5V 16MHz 14 6 6 1 FTDI兼容头
Arduino Fio 3.3V 8MHz 14 8 6 1 FTDI兼容头
LilyPad Arduino 328 main board 3.3V 8MHz 14 6 6 1 FTDI兼容头
LilyPad Arduino simply board 3.3V 8MHz 9 4 5 0 FTDI兼容头

基于ATMEGA32u4微控制器的Arduino板卡

板名称 工作电压 时钟速度 数字i/o 模拟输入 PWM UART 编程接口
Arduino Leonardo 5V 16MHz 20 12 7 1 本机USB
Pro micro 5V/16MHz 5V 16MHz 14 6 6 1 本机USB
Pro micro 3.3V/8MHz 5V 16MHz 14 6 6 1 本机USB
LilyPad Arduino USB 3.3V 8MHz 14 6 6 1 本机USB

基于ATMEGA2560微控制器的Arduino板卡

板名称 工作电压 时钟速度 数字i/o 模拟输入 PWM UART 编程接口
Arduino Mega 2560 R3 5V 16MHz 54 16 14 4 USB通过ATMega16U2B
Mega Pro 3.3V 3.3V 8MHz 54 16 14 4 FTDI兼容头
Mega Pro 5V 5V 16MHz 54 16 14 4 FTDI兼容头
Mega Pro Mini 3.3V 3.3V 8MHz 54 16 14 4 FTDI兼容头

基于AT91SAM3X8E微控制器的Arduino板卡

板名称 工作电压 时钟速度 数字i/o 模拟输入 PWM UART 编程接口
Arduino Mega 2560 R3 3.3V 84MHz 54 12 12 4 本机USB

Arduino LED条形图

此示例展示如何读取模拟引脚0处的模拟输入,将analogRead()中的值转换为电压,并将其输出到Arduino软件(IDE)的串口监视器。

必需的组件

你将需要以下组件:

  • 1 × Breadboard 面包板
  • 1 × Arduino Uno R3
  • 1 × 5k欧姆可变电阻(电位器)
  • 2 × 跳线
  • 8 × LED(LED条形图显示如下图所示)

程序

按照电路图连接面包板上的组件,如下图所示。

Arduino LED条形图

Arduino LED条形图

草图

在计算机上打开Arduino IDE软件。使用Arduino语言进行编码控制你的电路。通过单击“New”打开一个新的草图文件。

Arduino LED条形图

10段LED条形图

Arduino LED条形图

这10段条形图LED有许多用途。紧凑的占用空间,简单的连接,它们易用于原型或成品。实质上,它们是10个独立的蓝色LED,每个都有独立的阳极和阴极连接。

它们也有黄色,红色和绿色。

注意 – 这些条形图上的引脚可能与数据表中列出的内容不同。将设备旋转180度将纠正变化,使得引脚11成为第一引脚。

Arduino代码

/*
    LED bar graph
    Turns on a series of LEDs based on the value of an analog sensor.
     This is a simple way to make a bar graph display.
     Though this graph uses 8LEDs, you can use any number by
       changing the LED count and the pins in the array.
    This method can be used to control any series of digital
       outputs that depends on an analog input. */  
// these constants won't change: const
int analogPin = A0;

// the pin that the potentiometer is attached to const
int ledCount = 8;

// the number of LEDs in the bar graph
int ledPins[] ={2, 3, 4, 5, 6, 7, 8, 9  };

// an array of pin numbers to which LEDs are attached
 

void setup()
{
   // loop over the pin array and set them all to output:
   
for (int thisLed = 0;

thisLed <ledCount;

thisLed++)
{
    
  pinMode(ledPins[thisLed], OUTPUT);

    
   }
  }
 
void loop()
{
   // read the potentiometer:
   
int sensorReading = analogRead(analogPin);

   // map the result to a range from 0 to the number of LEDs:
   
int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

   // loop over the LED array:
   
for (int thisLed = 0;

thisLed <ledCount;

thisLed++)
{
  //if the array element's index is less than ledLevel,
   //turn the pin for this element on:
       if (thisLed <ledLevel)
{

    
   digitalWrite(ledPins[thisLed], HIGH);

     
  }else{ // turn off all pins higher than the ledLevel:
 
    
   digitalWrite(ledPins[thisLed], LOW);

     
  }
     
   }
  } 

代码说明

草图的工作方式是这样的:首先,你阅读输入。将输入值映射到输出范围,在这种情况下为十个LED。然后,你设置一个 for-loop 以迭代输出。如果系列中的输出数量低于映射的输入范围,则将其打开。如果没有,则将其关闭。

结果

当模拟读数的值增加时,你将看到LED逐个打开,而当读数减少时,LED逐个关闭。


Arduino 渐变LED

这个例子演示了使用
analogWrite()函数来渐变LED的功能。AnalogWrite使用脉冲宽度调制(PWM),以开和关之间的不同比率非常快速地打开和关闭数字引脚,以产生渐变效应。

必需的组件

你将需要以下组件:

  • 1 × Breadboard 面包板
  • 1 × Arduino Uno R3
  • 1 × LED
  • 1 × 330Ω 电阻
  • 2 × 跳线

程序

按照电路图连接面包板上的组件,如下图所示。

Arduino 渐变LED

注意 − 要了解LED的极性,请仔细查看。两个腿中较短的,朝向灯泡的平坦边缘表示负极端子。

Arduino 渐变LED

像电阻器这样的组件需要将其端子弯曲成90°角,以便恰当的适配面包板插座。你也可以将端子切短。

Arduino 渐变LED

草图

在计算机上打开Arduino IDE软件。使用Arduino语言进行编码控制你的电路。通过单击“New”打开新的草图文件。

Arduino 渐变LED

Arduino代码

/*
    Fade
    This example shows how to fade an LED on pin 9 using the 
  analogWrite() function.
     The 
  analogWrite() function uses PWM, so if you want to change the pin you're using, be
    sure to use another PWM capable pin. On most Arduino, the PWM pins are identified with
    a "

~"

sign, like ~3, ~5, ~6, ~9, ~10 and ~11. */  
int led = 9;

// the PWM pin the LED is attached to
int brightness = 0;

// how bright the LED is
int fadeAmount = 5;

// how many points to fade the LED by // the setup routine runs once when you press reset:
 

void setup()
{
   // declare pin 9 to be an output:
  
  pinMode(led, OUTPUT);


  }  // the loop routine runs over and over again forever:
 
void loop()
{
   // set the brightness of pin 9:
    
  analogWrite(led, brightness);

   // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;

   // reverse the direction of the fading at the ends of the fade:
    if (brightness == 0 || brightness == 255)
{
      fadeAmount = -fadeAmount ;

  
  }
    // wait for 30 milliseconds to see the dimming effect
   
  delay(300);


  }

代码说明

将引脚9声明为LED引脚之后,在代码的setup()函数中没有任何操作。你将在代码的主循环中使用的
analogWrite()函数会需要两个参数:一个告诉函数要写入哪个引脚,另一个表示要写入的PWM值。

为了使LED渐变熄灭和亮起,将PWM值从0(一直关闭)逐渐增加到255(一直开启),然后回到0,以完成循环。在上面给出的草图中,PWM值使用称为brightness的变量设置。每次通过循环时,它增加变量fadeAmount的值。

如果brightness处于其值的任一极值(0或255),则fadeAmount变为负值。换句话说,如果fadeAmount是5,那么它被设置为-5。如果它是-5,那么它被设置为5。下一次通过循环,这个改变也将导致brightness改变方向。

analogWrite()可以非常快速地改变PWM值,因此草图结束时的delay控制了渐变的速度。尝试改变delay的值,看看它如何改变渐变效果。

结果

你应该看到你的LED亮度逐渐变化。

Arduino 闪烁LED

LED是用于许多不同应用的小型强光灯。首先,我们将学习闪烁LED,即微控制器的Hello World。它就像打开和关闭灯一样简单。建立这个重要的基线将为你提供坚实的基础,以实现更复杂的实验。

必需的组件

你将需要以下组件:

  • 1 × Breadboard 面包板
  • 1 × Arduino Uno R3
  • 1 × LED
  • 1 × 330Ω 电阻
  • 2 × 跳线

程序

按照电路图连接面包板上的组件,如下图所示。

Arduino 闪烁LED

注意 – 要了解LED的极性,请仔细查看。两个腿中较短的,朝向灯泡的平坦边缘表示负极端子。


Arduino 闪烁LED

像电阻器这样的组件需要将其端子弯曲成90°角,以便恰当的适配面包板插座。你也可以将端子切短。


Arduino 闪烁LED

草图

在计算机上打开Arduino IDE软件。使用Arduino语言进行编码控制你的电路。通过单击“New”打开新的草图文件。

Arduino 闪烁LED

Arduino代码

/*
    Blink
    Turns on an LED on for one second, then off for one second, repeatedly. */  
// the setup function runs once when you press reset or power the board
 

void setup()
{  // initialize digital pin 13 as an output.
  
  pinMode(2, OUTPUT);


  }  // the loop function runs over and over again forever
 
void loop()
{
   
   digitalWrite(2, HIGH);

// turn the LED on (HIGH is the voltage level)
   
  delay(1000);

// wait for a second
    
   digitalWrite(2, LOW);

// turn the LED off by making the voltage LOW
   
  delay(1000);

// wait for a second
  }

代码说明

pinMode(2,OUTPUT) – 在使用Arduino的引脚之前,你需要告诉Arduino Uno R3它是INPUT还是OUTPUT。我们使用一个内置的“函数”pinMode()来做到这一点。


digitalWrite(2,HIGH)
– 当使用引脚作为OUTPUT时,可以将其命令为HIGH(输出5伏)或LOW(输出0伏)。

结果

你应该看到你的LED打开和关闭。如果没有看到所需的输出,请确保你已正确组装电路,并已验证和将代码上传到电路板。


Arduino 连接开关

按钮或开关连接电路中的两个开路端子。当按下连接到引脚8的按钮开关时,此示例打开引脚2上的LED。

Arduino 连接开关

下拉电阻

在电子逻辑电路中使用下拉电阻,以确保在外部器件断开连接或处于高阻抗状态时,Arduino的输入信号达到预期的逻辑电平。虽然没有任何东西连接到输入引脚,但这并不意味着它是一个逻辑0。下拉电阻连接在地面和器件上相应的引脚之间。

下图显示了数字电路中下拉电阻的示例。在电源电压和微控制器引脚之间连接了一个按钮开关。在这样的电路中,当开关闭合时,微控制器输入处于逻辑高值;但是当开关打开时,下拉电阻将输入电压下拉到接地(逻辑零值),防止输入处于未定义状态。

下拉电阻的电阻必须大于逻辑电路的阻抗,否则可能会使电压下降太多,而无论开关的位置如何,引脚处的输入电压将保持在恒定的逻辑低值。

Arduino 连接开关

必需的组件

你将需要以下组件:

  • 1 × Arduino UNO 板
  • 1 × 330欧姆电阻
  • 1 × 4.7K欧姆电阻(下拉)
  • 1 × LED

程序

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

Arduino 连接开关

草图

在计算机上打开Arduino IDE软件。使用Arduino语言进行编码控制你的电路。通过单击“New”打开一个新的草图文件。

Arduino 连接开关

Arduino代码

// constants won't change. They're used here to // set pin numbers: const
int buttonPin = 8;

// the number of the pushbutton pin const
int ledPin = 2;

// the number of the LED pin // variables will change:
int buttonState = 0;

// variable for reading the pushbutton status
 

void setup()
{
   // initialize the LED pin as an output:
  
  pinMode(ledPin, OUTPUT);

   // initialize the pushbutton pin as an input:
  
  pinMode(buttonPin, INPUT);


  }
 
void loop()
{
   // read the state of the pushbutton value:
    buttonState = digitalRead(buttonPin);

   // check if the pushbutton is pressed.
    // if it is, the buttonState is HIGH:
    if (buttonState == HIGH)
{
  //turn LED on:
       
   digitalWrite(ledPin, HIGH);

 
 } else{
  //turn LED off:
       
   digitalWrite(ledPin, LOW);

    
   }
  }

代码说明

当开关打开时(按钮未被按下),按钮的两个端子之间没有连接,因此引脚接地(通过下拉电阻),我们读取低电平。当开关闭合时(按钮被按下),它在其两个端子之间建立连接,将引脚连接到5伏,这样我们读出高电平。

结果

按下按钮时LED亮灯,松开按钮时LED熄灯。


Arduino 水位检测器/传感器

水位传感器砖设计用于水位检测,可广泛应用于检测降雨,水位,甚至液体泄漏。

Arduino 水位检测器/传感器

将水位传感器连接到Arduino是检测泄漏,溢出,洪水,雨水等的好方法。它可用于检测水的存在,水位,体积以及是否缺水。当这个用来提醒你给植物浇水时,有一个比较好的Grove传感器。传感器具有一系列暴露的迹线,当检测到水时读取LOW。

在本章中,我们将把水位传感器连接到Arduino上的数字引脚8,并将使用非常方便的LED来帮助识别水位传感器何时与水源接触。

必需的组件

你将需要以下组件:

  • 1 × Breadboard 面包板
  • 1 × Arduino Uno R3
  • 1 × 水位传感器
  • 1 × led
  • 1 × 

    330欧姆电阻

程序

按照电路图连接面包板上的组件,如下图所示。

Arduino 水位检测器/传感器

草图

在计算机上打开Arduino IDE软件。使用Arduino语言进行编码控制你的电路。通过单击“New”打开一个新的草图文件。

Arduino 水位检测器/传感器

Arduino代码

#define Grove_Water_Sensor 8 // Attach Water sensor to Arduino Digital Pin 8
#define LED 9 // Attach an LED to Digital Pin 9 (or use onboard LED)
 

void setup()
{
 
  pinMode(Grove_Water_Sensor, INPUT);

// The Water Sensor is an Input
  
  pinMode(LED, OUTPUT);

// The LED is an Output
  }
 
void loop()
{
   /* The water sensor will switch LOW when water is detected.
    Get the Arduino to illuminate the LED and activate the buzzer
    when water is detected, and switch both off when no water is present */
    if( digitalRead(Grove_Water_Sensor) == LOW)
{
      
   digitalWrite(LED,HIGH);

  
  }else{
      
   digitalWrite(LED,LOW);

    
   }
  }

代码说明

水位传感器具有三个端子:S,Vout(+)和GND(-)。按如下所示连接传感器:

  • 将+Vs连接到Arduino板上的+5v。
  • 将S连接到Arduino板上的数字引脚8。
  • 将GND连接到Arduino上的GND。
  • 将LED连接到Arduino板上的数字引脚9。

当传感器检测到水时,Arduino上的引脚8变为LOW,然后Arduino上的LED亮起。

结果

当传感器检测到水时,你会看到指示LED灯亮起。


【Micro:bit】入门教程02——Microbit是什么?(下)

教程前言:书接上回,Micro:bit就是在这样创客教育大趋势下被研发出来;先给大家介绍下Micro:bit的一些硬件配置。

从正面开始说起:

【Micro:bit】入门教程02——Microbit是什么?(下)

1、5×5的LED灯矩阵:

可以显示一些表情图标,数字和英文字符串(很抱歉,因为点阵太小了,显示不了中文)
实现显示方法很简单,只要拖拽LED点阵的积木块,然后再下拉菜单选择图标即可。

【Micro:bit】入门教程02——Microbit是什么?(下)

2、两个可编程按键:

分A键和B键,积木块编程也是很简单,一般就是触发按下A键、按下B键或者同时按下A+B键;

【Micro:bit】入门教程02——Microbit是什么?(下)【Micro:bit】入门教程02——Microbit是什么?(下)

3、IO金属触片:

为了增加可玩性,Micro:bit还特意留了三个可编程控制的IO口,从左到右分别是P0、P1和P2。

【Micro:bit】入门教程02——Microbit是什么?(下)

英国地区比较喜欢用鳄鱼夹夹着这些金属触片做一些很好玩的东西(难道你们用几毛钱的鳄鱼夹夹着一百多块的Microbit,不怕弄花不心疼吗?)我们家还特意为Micro:bit配套了一个敲鸡方便的带电池的扩展转接板——Robot:bit。

【Micro:bit】入门教程02——Microbit是什么?(下)

从背面介绍下:

【Micro:bit】入门教程02——Microbit是什么?(下)

【Micro:bit】入门教程02——Microbit是什么?(下)

1、Micro数据通讯口:

用于下载程序,Microbit右边还有一个led灯,当下载程序的时候,灯就会一闪一闪了。

【Micro:bit】入门教程02——Microbit是什么?(下)

2、复位开关:相当于电脑的重启按键

【Micro:bit】入门教程02——Microbit是什么?(下)

3、3V电池接口:

注意是3V电池接口,3V电池接口,3V电池接口!接上普通锂电池必烧(3.7V),例如插上Mbot的锂电池必烧。
这个接口是设计给我们平时常见的电池两节5号电池,或者两节7号电池。

【Micro:bit】入门教程02——Microbit是什么?(下)

4、蓝牙:

可以用作蓝牙通讯,可以与手机连接进行控制。悄悄告诉大家,实际Microbit的主芯片就是一个蓝牙芯片,我们的程序也是储存在这个芯片上。

【Micro:bit】入门教程02——Microbit是什么?(下)

5、高级传感器——陀螺仪和指南针

平时如果玩Arduino大家都知道这两个模块都是比较贵的,如果是Arduino用起来,还有一大坨代码。是不是觉得我们的介绍不错呢?

欢迎各位爱好者和我们一起互动交流。