版主: wanchong , wangyu , eepwwp , firedom

分享到:
共145条 10/15 |‹ « 6 7 8 9 10 11 12 13 14 15 »   

RE: Edison教程系列+官方样例集合

颜珍
我是MM
普通会员

最后登陆时间:2015-01-14 10:52:47

91# 发表于 2014-10-28 19:29:54
很不错的经验贴。赞

RE: Edison教程系列+官方样例集合

xinlian1
我是MM
普通会员

最后登陆时间:2015-01-14 10:52:47

92# 发表于 2014-10-28 19:32:53
报道,佩服

RE: Edison教程系列+官方样例集合

哇额
我是MM
普通会员

最后登陆时间:2015-01-14 10:52:52

93# 发表于 2014-10-28 20:04:46
留名

RE: Edison教程系列+官方样例集合

pengrui
我是MM
普通会员

最后登陆时间:2015-10-30 14:51:20

94# 发表于 2014-10-28 20:10:52
pengrui的原帖
Edison教程系列01 按键控制






Edison教程系列01 按键控制
作者:Angelo 来自 DFRobot
http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=3274

来个最简单的实验吧!按钮控制LED开关,按键按下,LED点亮。按键松开,LED熄灭。

所需元件
  •   1×  数字食人鱼红色LED发光模块

e01.jpg 

  •   1×   数字大按钮模块

e02.jpg





Edison教程系列04 触摸台灯
作者:Angelo 来自 DFRobot
http://www.dfrobot.com.cn/commun ... thread&tid=3295

不再单调的通过按钮来控制台灯的开关,改造个可触摸开关控制的台灯。在本节中,我们选用简单的LED来作为例子,原理明白之后,改造其他电器也不再遥不可及。

所需元件
401.jpg     402.jpg    403.jpg
404.jpg405.jpg

  •   1×  数字触摸开关
  •   1×   数字继电器模块
  •   1×   IO 传感器扩展板 V7.1
  •   1×   英特尔® Edison for Arduino开发板
  •   自行选择不同电压值LED(或其他输出设备)及相应电源设备



硬件连接

数字触摸开关 → 数字2
数字继电器模块 → 数字12

406.jpg 

特别说明下,继电器部分的连接,继电器可以理解为是个开关,只是这个开关的特别之处在于可以控制大电流,我们可以用来控制一些大电流的交流设备。我们这里以3V的LED来作为例子,便于理解继电器原理。为了安全起见,不建议第一次直接改造交流设备。在弄清原理之后,可以在具有一定电路知识的朋友帮助下改造!

继电器如何使用?

大致看下继电器如何使用,继电器模块是通过数字引脚控制开关的,可以把它理解为LED,控制器控制它开与关。
继电器输出部分有四个引脚,如下图所示,COM(公共脚),NO(常闭端),NC(常开端),N/A(空脚)。

407.jpg

解释下常开和常闭的区别。NO引脚(常开端)常态下和COM(公共端)断开,只有继电器至高之后,才导通。而NC引脚(常闭端)刚好相反,常态下是断开的,只有继电器至高之后,才断开。


输入代码

打开样例代码TouchControlRelay,可见

int touchPin = 2;                  //触摸开关连接到数字2
int relayPin =12;                 //继电器连接到数字12
int relayState =HIGH;             // relayState记录继电器状态
int touchState;                    //touchState记录触摸开关状态
int lastTouchState =LOW;   // lastTouchState记录触摸开关前一个状态
long lastDebounceTime= 0;
long debounceDelay =50;         //去除抖动时间
void setup() {
  pinMode(touchPin, INPUT);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, relayState);
}
void loop() {
  //reading用来存储touchPin的数据
  int reading = digitalRead(touchPin);
  
  // 一旦检测到数据发生变化,记录当前时间
  if (reading != lastTouchState) {
        lastDebounceTime= millis();
  }
  
  // 等待50ms,再进行一次判断,是否和当前触摸开关状态相同
  // 如果和当前状态不相同,改变触摸开关的状态
  // 同时,如果触摸开关状态为高(也就是被按下),那么就改变继电器的状态
  if ((millis() - lastDebounceTime) >debounceDelay) {
    if (reading != touchState) {
      touchState = reading;
      if (touchState == HIGH) {
          relayState = !relayState;
      }
    }
  }
  
  digitalWrite(relayPin, relayState);
   
  // 改变触摸开关前一个状态值
  lastTouchState = reading;
}
   
下载完代码,碰下触摸开关,灯点亮。再碰下,灯熄灭


硬件分析(数字输入—数字输出)

很明显,触摸开关是输入设备,继电器是输出设备。继电器再相应的控制其他设备。
4790.jpg 
代码回顾
由硬件分析可以看出,触摸是输入设备,继电器是输出设备。
pinMode(touchPin, INPUT);
pinMode(relayPin, OUTPUT);
      通过digitalWrite()读取按键的状态:
int reading = digitalRead(touchPin);
按下在由低变高或者由高变低时,都会有个抖动的过程,时间非常的短,如下图所示:


410.jpg

为了避免由于抖动产生的错误信号,所以我们代码中有个去抖的过程。去抖的方法很简单,就是等到数据发生变化时,隔一段时间再检测一次。
一旦检测到读取的数据发生变化,通过millis()函数记下时间:
if (reading !=lastTouchState) {
      lastDebounceTime = millis();
}
millis()是一个函数,该函数是Arduino语言自有的函数,它返回值是一个时间,Arduino开始运行到执行到当前的时间,也称之为机器时间,就像一个隐形时钟,从控制器开始运行的那一刻起开始计时,以毫秒为单位。
再等待50ms,再进行一次判断,是否和当前触摸开关状态相同。如果和当前状态不相同,改变触摸开关状态。同时,如果触摸开关状态为高(也就是被按下),那么就改变继电器的状态。
if ((millis() - lastDebounceTime) > debounceDelay) {
  if (reading != touchState) {
      touchState =reading;
    if (touchState ==HIGH) {
          relayState= !relayState;
      }
    }
  }

RE: Edison教程系列+官方样例集合

pengrui
我是MM
普通会员

最后登陆时间:2015-10-30 14:51:20

95# 发表于 2014-10-28 20:18:55
Edison教程系列05 声控灯
作者:Angelo 来自 DFRobot
http://www.dfrobot.com.cn/commun ... thread&tid=3305

小时候有没有对走廊的声控灯很感兴趣呢?会不会拼命的跺脚只为让那盏灯点亮。这节我们就做个这样的声控灯。只有你轻轻拍下手, 灯就自动亮起来了,没了声音,灯就又自动关了。这里用到的是个声音传感器,我们可以利用这个传感器做出更多互动作品,通过声音触发来控制更多好玩儿的东西,比如说做个发光鼓等等。

【所需元件】

  1×  数字食人鱼红色LED发光模块

501.jpg

  1×  模拟声音传感器

502.jpg

  1×   IO 传感器扩展板 V7.1

503.jpg

  1×   英特尔® Edison for Arduino开发板

504.jpg

【硬件连接】

  • 模拟声音传感器 → 模拟0
  • 数字食人鱼红色LED发光模块 → 数字13

505.jpg 

【输入代码】
  1. //声控灯
  2. int soundPin = 0;       //声音传感器接到模拟0
  3. int ledPin =  13;       //LED接到数字13

  4. void setup() {
  5.   pinMode(ledPin, OUTPUT);
  6. // Serial.begin(9600);    //用于调试
  7. }

  8. void loop(){
  9.   int soundState = analogRead(soundPin);  //读取传感器的值
  10. // Serial.println(soundState);      //串口打印声音传感器的值

  11. //如果声音值大于10,亮灯,并持续10s,否则关灯
  12.   if (soundState > 10) {           
  13.       digitalWrite(ledPin, HIGH); 
  14.       delay(10000);
  15.   }else{
  16.       digitalWrite(ledPin, LOW);
  17.   }
  18. }
复制代码
对着话筒拍下手,或者说句话,试试灯能不能点亮?

【硬件分析】(模拟输入—数字输出)

前面几次我们接触的都是数字传感器,这次我们要尝试使用模拟传感器了,还记得在一开始说的数字与模拟的区别吗?(串口中认识“数字”与“模拟”一节)。数字,只有两个值(0/1)。模拟,是线性的,理论上的无限值(0~1023)。

所以这里是个,模拟输入,数字输出的模式。

507.jpg 


【代码回顾】

在setup()中只设置了LED为输出,为什么没有设置声音传感器输入模式?这是因为模拟口都是输入设置,所以不需要设置了。
     
声音传感器是输入设备,所以需要读取对应模拟口0的值。与读取数字口函数digitalRead(pin)类似,所以模拟口读取函数是:

analogRead(pin)

这个函数用于从模拟引脚读值,pin是指连接的模拟引脚。Arduino的模拟引脚连接到一个了10位A/D转换,输入0~5V的电压对应读到0~1023的数值,每个读到的数值对应的都是一个电压值。比如512 = 2.5V。
最后是一个if判断,判断是否到达你预设的值。
if (soundState > 10) {           
       ...
}else{
       ...
}
   
需要修改预设值的话,可以打开串口监视器,看看你需要的声音强度的值在什么范围,然后做相应调整就可以了。


此帖由pengrui于2015-01-14 10:58:42最后编辑

RE: Edison教程系列+官方样例集合

pengrui
我是MM
普通会员

最后登陆时间:2015-10-30 14:51:20

96# 发表于 2014-10-28 20:59:20
Edison教程系列06 感应灯
作者:Angelo 来自 DFRobot
http://www.dfrobot.com.cn/commun ... thread&tid=3320

这节要做的是个感应灯,当有人经过的时候,LED灯就会自动亮起,人一旦走了,LED又自动关闭了。这里用到的传感器是人体红外热释电运动传感器。它是一种能检测人或动物身体发射的红外线的传感器。拿它来做整人玩具应该是个不错的选择!
所需元件
l 1×  数字食人鱼红色LED发光模块                       


硬件连接
人体红外热释电运动传感器  →  数字引脚2
数字食人鱼红色LED发光模块  →  数字引脚13

605.jpg 


输入代码
  1. int sensorPin = 2;             //传感器连接到数字2
  2. int ledPin =  13;               //LED连接到数字13
  3. int sensorState = 0;           //变量sensorState用于存储传感器状态

  4. void setup() {
  5.   pinMode(ledPin, OUTPUT);         //LED为输出设备
  6.   pinMode(sensorPin, INPUT);      //传感器为输入设备
  7. }

  8. void loop(){
  9.   sensorState = digitalRead(sensorPin);    //读取传感器的值

  10.   if (sensorState == HIGH) {       //如果为高,LED亮
  11.     digitalWrite(ledPin, HIGH); 
  12.   }
  13.   else {                               //否则,LED灭
  14.     digitalWrite(ledPin, LOW);
  15.   }
  16. }
  17.    
复制代码
下载完成后,可以试着人走开,等待一段时间,看看LED是否会关掉。随后再试着靠近,LED是不是会自动亮起。
硬件分析(数字输入—数字输出)
整个装置分为三个部分,输入,控制与输出。人体红外热释电运动传感器为输入设备, Arduino就是控制设备,LED发光模块就是输出设备。
又由于人体红外热释电运动传感器为数字量的传感器,所以接数字口。LED输出信号也是数字量,同样接数字口。

606.jpg 




Edison教程系列07 夜光宝盒
作者:Angelo 来自 DFRobot
http://www.dfrobot.com.cn/commun ... thread&tid=3331

夜光宝盒,听着名字是不是很好玩,实际也是这么好玩儿!我们要做的这个盒子,在白天是闭合的,一旦进入了深夜,就开始慢慢张开,灯光也会慢慢变亮,好似一颗“夜明珠”,一旦到了白天,又慢慢合上了!哈哈…先来大致说下原理吧!通过一个模拟环境光传感器,来检测环境光线强弱,随着亮度的不同,输出值不同。到了晚上的设定值,就转动舵机角度,LED同时慢慢变亮。
所需材料

1×  TowerPro SG50舵机

硬件连接

  • TowerProSG50舵机 → 数字口9
  • 模拟环境光线传感器  模拟口0
  • 数字食人鱼红色LED发光模块  数字口3

706.jpg 

输入代码
  1. #include    
  2. Servo myservo;
  3. int LED = 3;                      //设置LED灯为数字引脚3
  4. int val = 0;                      //val存储环境光传感器的值
  5. int pos = 0;
  6. int light =0;

  7. void setup(){
  8.      pinMode(LED,OUTPUT);         //LED为输出模式
  9.      Serial.begin(9600);          //串口波特率设置为9600
  10.      myservo.attach(9);           //舵机接到数字口9
  11.      myservo.write(0);            //初始角度为0
  12. }

  13. void loop(){
  14.      val = analogRead(0);         // 读取传感器的值
  15.      Serial.println(val);         // 串口查看电压值的变化
  16.      if(val<40){                   // 一旦小于设定的值,增加角度
  17.           pos = pos +2;
  18.           if(pos >= 90){        //转到了90°后,就保持90°
  19.               pos = 90;             
  20.           }
  21.           myservo.write(pos);      //写入舵机的角度
  22.           delay(100);
  23.           light = map(pos,0,90,0,255);  //随角度增大,LED亮度增大
  24.           analogWrite(LED,light);   //写入亮度值
  25.      }else{                 
  26.           pos = pos -2;    //减2°
  27.           if(pos <= 0){
  28.              pos = 0;       //减到0°为止
  29.           }
  30.           myservo.write(pos);      //写入舵机的角度 
  31.           delay(100);    
  32.           light = map(pos,0,90,0,255);//随角度减小,LED亮度减小
  33.           analogWrite(LED,light);  //写入亮度值
  34.      }
  35. }
复制代码
把舵机固定在盒子的连接处,灯塞在盒子里面,传感器当然是要露在外面的,需要检测环境光。安装完成后,把盒子置于暗处,看下盒子会不会自动打开。

此帖由pengrui于2015-01-14 10:59:35最后编辑

RE: Edison教程系列+官方样例集合

pengrui
我是MM
普通会员

最后登陆时间:2015-10-30 14:51:20

97# 发表于 2014-10-28 21:02:08
颜珍的原帖
很不错的经验贴。赞

Edison教程系列08 伊甸园守护者
作者:Angelo 来自 DFRobot
http://www.dfrobot.com.cn/commun ... thread&tid=3340

想不想给家里伊甸园中的花花草草一个舒适的环境?想知道什么时候它们口渴了?通过LM35温度传感器和土壤湿度传感器就能够知道,再加上LCD按键扩展板,就可以很方便得看到实时的数据。等你之后玩Arduino够溜的时候,还可以往控制器上加网络模板,这样数据不仅能实时显示,还能放到网上,或者通过微博发布出去,是不是很心动了呢?那就先做个最简单的,本地实时显示数据~

所需材料

  •   1×  LM35线性温度传感器
  • 801.jpg 

  •   1×  土壤湿度传感器
  • 802.jpg 

  •   1×  LCD按键扩展板
  • 803.jpg 

  •   1×   英特尔® Edison for Arduino开发板
  • 804.jpg 
                              
硬件连接

805.jpg 
LCD按键扩展板  →  插在EdisonArduino Kit扩展板上
LM35线性温度传感器  → 模拟口1  (右下角左侧第一个接口, 模拟口0被按键占用)
土壤湿度传感器  → 模拟口2
输入代码
  1. //伊甸园守护者
  2. #include <LiquidCrystal.h>

  3. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);        // 初始化LCD的引脚号

  4. int TemperaturePin=A1;      //设置LM35线性温度传感器的引脚
  5. int HumidityPin=A2;

  6. void setup() {
  7.   lcd.begin(16, 2);  // 设置LCD为2行,每行16个字符
  8. }

  9. void loop() {
  10.   int temperatureValue;     //用于存储温度的模拟量
  11.   int humidityValue;        //由于存储湿度的模拟量
  12.   int temperature;          //用于存储温度数据

  13.   temperatureValue=analogRead(TemperaturePin);    //读取温度的模拟量
  14.   humidityValue=analogRead(HumidityPin);          //读取湿度的模拟量

  15.   temperature=(500 * temperatureValue) /1024;     //通过模拟量计算出实际温度


  16.   //LCD显示当前温度
  17.   lcd.setCursor(0, 0);    //光标移到第一行,第一个字符
  18.   lcd.print("T:");
  19.   lcd.print(temperature);
  20.   lcd.print("C");

  21.   //LCD现实当前湿度
  22.   lcd.setCursor(0, 6);    //光标移动到第一行,第七个字符
  23.   lcd.print("H:");
  24.   lcd.print(humidityValue);

  25.   //显示当前土壤情况
  26.   lcd.setCursor(1, 0);    //光标移动到第二行,第一个字符
  27.   if (humidityValue<300) {
  28.     lcd.print("Soil: Dry");
  29.   }
  30.   else if (humidityValue>=300 && humidityValue<700){
  31.     lcd.print("Soil: Humid");
  32.   }
  33.   else{
  34.     lcd.print("Soil: Water")
  35.   }

  36.   delay(500);
  37. }
  38.    
复制代码
下载完代码后,就可以从LCD屏上显示当前的温湿度,还有土壤的湿度情况。

806.jpg

RE: Edison教程系列+官方样例集合

pengrui
我是MM
普通会员

最后登陆时间:2015-10-30 14:51:20

98# 发表于 2014-10-28 21:23:23
Intel Edison官方样例中文版 简易Web服务器Wifi 
翻译:Kin@DFRobot  来源:Intel
[size=14.44444465637207px]http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=3296

此样例基于“开”、“关”按钮来创建一个网站。当按下“开”,LED即可点亮,当按下“关”,LED即可熄灭。我们使用的是Arduino* IDE 1.5.3中的样例代码。


硬件
  •   Intel® Edison模块
  •   Arduino*扩展板
  •   一个LED
  •   220欧电阻


教程

1.      按下表用跳线来连接硬件。

  
LED
  
Arduino扩展板
220欧电阻
正极
13接口

  
负极
GND接口
连接


2.      连接电源和Arduino扩展板上的USB to USB端口。
3.      打开ArduinoIDE。点击工具 > 板卡,选择Intel®Edison。
4.      点击 工具 > 串口,选择Com #用来连接Intel Edison。
5.      点击文件 > 示例 > Wifi,选择SimpleWebServerWiFi。
6.      用自定义用户名替代 char ssid[] = yourNetwork。
7.      用自定义密码替代char pass[] = secretPassword。
8.      点击“上传”按钮。


注意观察串口监视器上电位计显示的数值。在连接到同一网络的设备上,打开网页浏览器,链接到串口监视器上显示的IP地址。


电路
101.jpg
此帖由pengrui于2015-01-14 11:00:08最后编辑

RE: Edison教程系列+官方样例集合

JERRY11
我是MM
普通会员

最后登陆时间:2015-01-14 10:54:46

99# 发表于 2014-10-28 21:29:46
高中,自学,没有任何基础,只有一腔热血。

RE: Edison教程系列+官方样例集合

daijun72
我是MM
普通会员

最后登陆时间:2015-01-14 10:54:51

100# 发表于 2014-10-28 22:25:37
好……
共145条 10/15 |‹ « 6 7 8 9 10 11 12 13 14 15 »   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]