查看: 19482|回复: 20

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

[复制链接]
  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-12-23 09:51:35 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 小菜儿 于 2014-12-23 09:59 编辑

    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
    •   1×   IO 传感器扩展板 V7.1

    e05.jpg

    •   1×   英特尔® Edison for Arduino开发板(预售)


    e06.jpg

    硬件连接
    • 数字大按钮 → 数字2
    • 数字食人鱼红色LED发光模块 → 数字13

    e03.jpg

    输入代码
    打开样例代码Button,可见:

    const int buttonPin =2;     // 定义按键引脚
    const int ledPin=  13;      //定义LED引脚

    int buttonState =0;         //用来存储按键状态值

    void setup() {
      pinMode(ledPin, OUTPUT);    //初始化LED引脚为输出状态  
      pinMode(buttonPin, INPUT);  //初始化按键引脚为输入状态   
    }

    void loop(){
      buttonState = digitalRead(buttonPin); //读取按键引脚的状态值

      // 检测按键是否按下,如果是的话,按键状态值为HIGH
      if (buttonState == HIGH) {     
        digitalWrite(ledPin, HIGH);  // 打开LED
      }
      else {
        digitalWrite(ledPin, LOW);   // 关闭LED
      }
    }
       
        下载完代码,按下按钮,灯点亮。松开按键,灯熄灭。

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

    很明显,大按钮是输入设备,LED是输出设备。和前面感应灯类似,也是一个数字输入控制一个数字输出。只是形式与代码有所不同。


    e04.jpg


    代码回顾
    说下Arduino代码必须具备的两个组成部分:

    void setup() {
      // 写入setup代码,只运行一次:
    }
    void loop() {
      // 写入main代码,重复运行:  
    }
    Arduino代码必须包含setup()和loop()这两个函数。setup英文中是“设置”的意思。所以setup()函数是用于一些初始化设置的,只在代码一开始时,运行一次。loop是“循环”的意思,只要Arduino不掉电,loop就会不停的重复运行。
    由硬件分析可以看出,按键是输入设备,LED是输出设备。
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);

    函数格式如下:
    pinMode(pin,mode)   
    这个函数是用来设置Arduino数字引脚的模式的,只用于数字引脚定义是输入(INPUT)还是输出(OUTPUT)。pin指数字引脚号,mode指引脚模式(OUTPUT/INPUT)。
    通过digitalWrite()读取按键的状态:
    int reading = digitalRead(buttonPin);

    函数格式如下:
    digitalRead(pin)
    这个函数是用来读取数字引脚状态,HIGH还是LOW。一旦按下,读到HIGH,松开,读到LOW。(HIGH代表1,LOW代表0)

    数字传感器只会读到两个值(HIGH和LOW)。这里要用到新的一个语句——if语句。

    if语句格式如下:
    (1)if(表达式){
    语句;
    }
    (2)if(表达式){
    语句;
    }else{
    语句;
    }
    表达式是指我们的判断条件,通常为一些关系式或逻辑式,也可是直接表示某一数值。如果if表达式条件为真,则执行if中的语句。表达式条件为假,则跳出if语句。格式(1)多用于一种判断中,格式(2)多用于两种判断的情况。
    if (buttonState == HIGH) {      
    ... //如果为高,LED亮
    }
    else {                              
       ... //否则,LED灭
    }

        If语句中,还有句设置LED状态。
        digitalWrite(ledPin,HIGH);

    函数格式如下:
    digitalWrite(pin,value)
    这个函数的意义是:引脚pin在pinMode()的中被设置为OUTPUT模式时,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 09:57:15 | 显示全部楼层
    本帖最后由 小菜儿 于 2014-12-23 10:00 编辑

    Edison教程系列02 火焰报警器
    作者:Angelo 来自 DFRobot
    http://www.dfrobot.com.cn/commun ... viewthread&tid=3280

    在厨房安装一个火焰报警器应该是非常管用的,如果不小心忘关煤气的话,只要有一点点的火苗,就能触发火焰报警器,探测距离可达20cm。别看一个小小的报警器,讲不定就能避免一场不必要的意外发生,何乐而不为呢?

    所需材料

    硬件连接
         数字蜂鸣器模块 → 数字口8
         火焰传感器 模拟口 0
    205.jpg


    输入代码   
    1. float sinVal;            
    2. int toneVal;  
    3. void setup(){
    4.    pinMode(8, OUTPUT);        // 蜂鸣器引脚设置
    5.    Serial.begin(9600);        //设置波特率为9600 bps
    6. }
    7. void loop(){
    8.   int sensorValue = analogRead(0);//火焰传感器连到模拟口,并从模拟口读值
    9. Serial.println(sensorValue);
    10. delay(1);
    11.    if(sensorValue < 1023){ //  如果数据小于1023,说明有火源,蜂鸣器响   
    12.           for(int x=0; x<180; x++){
    13.             //将sin函数角度转化为弧度
    14.             sinVal = (sin(x*(3.1412/180)));
    15.             //用sin函数值产生声音的频率
    16.             toneVal = 2000+(int(sinVal*1000));
    17.             //给引脚8一个
    18.             tone(8, toneVal);
    19.             delay(2);
    20.     }   
    21.    } else {    // 如果数据大于等于1023,没有火源,关闭蜂鸣器
    22.            noTone(8);          //关闭蜂鸣器
    23.    }
    24. }
    复制代码
    可以试下那个打火机慢慢靠近火焰传感器,看看蜂鸣器会不会报警。

    硬件分析(模拟输入—数字输出)
         火焰传感器是输入设备,用来检测火苗,蜂鸣器显然是个输出设备,中间通过控制器来建立连接并执行处理。

    207.jpg


    代码回顾

    首先,定义两个变量:

    float sinVal;
    int toneVal;

    浮点型变量sinVal用来存储正弦值,正弦波呈现一个波浪形的变化,变化比较均匀,所以我们选用正弦波的变化来作为我们声音频率的变换,toneVal从sinVal变量中获得数值,并把它转换为所需要的频率。

    火焰传感器是输入设备,所以需要读取对应模拟口0的值。与读取数字口函数digitalRead(pin)类似,所以模拟口读取函数是:
    analogRead(pin)
    这个函数用于从模拟引脚读值,pin是指连接的模拟引脚。Arduino的模拟引脚连接到一个了10位A/D转换,输入0~5V的电压对应读到0~1023的数值,每个读到的数值对应的都是一个电压值。比如512 = 2.5V。

    这里用的是sin()函数,一个数学函数,可以算出一个角度的正弦值,这个函数采用弧度单位。因为我们不想让函数值出现负数,所以设置for循环在0~179之间,也就是0~180度之间。
    for(int x=0; x<180; x++){}

    函数sin()用的弧度单位,不是角度单位。要通过公式3.1412/180)将角度转为弧度:
    sinVal = (sin(x*(3.1412/180)));
    之后,将这个值转变成相应的报警声音的频率:
    toneVal = 2000+(int(sinVal*1000));

    这里有个知识点——浮点型值转换为整型。
    sinVal是个浮点型变量,也就是含小数点的值,而我们不希望频率出现小数点的,所以需要有一个浮点值转换为整型值得过程,也就是下面这句语句就完成了这件事:
    int(sinVal*1000)

    把sinVal乘以1000,转换为整型后再加上2000赋值给变量toneVal,现在toneVal就是一个适合声音频率了。
    之后,我们用tone()函数把生成的这个频率给我们的蜂鸣器。
    tone(8, toneVal);

    下面我们来介绍一下tone相关的三个函数
    (1)tone(pin,frequency)
    Pin都是指连接到蜂鸣器的数字引脚,frequency是以Hz为单位的频率值。

    (2)tone(pin,frequency,duration)
    第二个函数,有个duration参数,它是以毫秒为单位,表示声音长度的参数。像第一个函数,如果没有指定duration,声音将一直持续直到输出一个不同频率的声音产生。

    (3)noTone(pin)
    noTone(pin)函数,结束该指定引脚上产生的声音。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-12-23 10:02:06 | 显示全部楼层
    Edison还是贵了一些,虽然性能不错。如果用Arduino的方式玩,有点像杀鸡用牛刀。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 10:05:20 | 显示全部楼层
    Edison教程系列03 灯光调节器
    作者:Angelo 来自 DFRobot
    http://www.dfrobot.com.cn/commun ... thread&tid=3288

    所谓灯光调节器,就是可以自由控制灯的亮度,我们这里通过一个模拟角度传感器来LED灯的亮度。随着旋转角度的变化,LED亮度也发生相应改变。角度越大,LED灯也就越亮,相反,角度越小,LED灯也就越暗。这里只是用了小小的LED来做演示效果,如果想运用到我们的生活之中的话,也是同样的原理。那就先做个小型的灯光调节器吧!
    模拟角度传感器还能用到很多地方,比如我们后面会接触的舵机,可以通过这个传感器来控制转动角度,又或者以后有机会接触直流电机的小伙伴,可以尝试下用角度传感器来控制转速等等,用处很多!


    所需元件
    •         1×  数字食人鱼红色LED发光模块
    • e01.jpg
    •         1×  模拟角度传感器
    • 302.jpg

    •         1×   IO 传感器扩展板 V7.1
    • e05.jpg

    •          1×   英特尔® Edison for Arduino开发板
    •    e06.jpg



    硬件连接

    模拟角度传感器 → 模拟0
    数字食人鱼红色LED发光模块 数字9

    305.jpg


    输入代码
    1. //灯光调节器
    2. int potPin = 0;                   //电位器连接到模拟0
    3. int ledPin = 9;                  //LED连接到数字9

    4. void setup() {
    5.        pinMode(ledPin, OUTPUT);
    6. }

    7. void loop() {
    8.   int sensorValue = analogRead(potPin);    //读取模拟口0的值      
    9.   //通过map()把0~1023的值转换为0~255
    10. int outputValue = map(sensorValue, 0, 1023, 0, 255);   
    11. analogWrite(ledPin, outputValue);   //给LED写入对应值        
    12.   delay(2);                     
    13. }
    复制代码
    缓慢旋转电位器,仔细观察LED的亮度是否发生变化。


    硬件分析(模拟输入—模拟输出)
    在呼吸灯一节,我们已经学会了如何用数字引脚的PWM口来做模拟输出。这一节将加入互动元素,通过模拟输入来控制模拟输出。

    307.jpg


    代码回顾

    这里主要讲下map函数。
    函数格式如下:
    map(value, fromLow, fromHigh, toLow, toHigh)
    map函数的作用是将一个数从一个范围映射到另外一个范围。也就是说,会将 fromLow 到 fromHigh 之间的值映射到 toLow 在 toHigh 之间的值。


    map函数参数含义:
    value:需要映射的值
    fromLow:当前范围值的下限
    fromHigh:当前范围值的上限
    toLow:目标范围值的下限
    toHigh:目标范围值的上限


    map的神奇之处还在于,两个范围中的“下限”可以比“上限”更大或者更小,因此map()函数可以用来翻转数值的范围,可以这么写:
    y = map(x, 1, 50, 50, 1);


    这个函数同样可以处理负数,请看下面这个例子:
    y = map(x, 1, 50, 50, -100);
       
        回到代码中,
        int outputValue = map(sensorValue, 0, 1023, 0, 255);
        我们是想将模拟口读到的0~1023的值,转换为PWM口的0~255。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 10:08:49 | 显示全部楼层
    Edison教程系列04 触摸台灯
    作者:Angelo 来自 DFRobot
    http://www.dfrobot.com.cn/commun ... thread&tid=3295

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

    所需元件
    401.jpg     402.jpg     403.jpg
    404.jpg 405.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;
          }
        }
      }

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 10:13:12 | 显示全部楼层
    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{
           ...
    }
       
    需要修改预设值的话,可以打开串口监视器,看看你需要的声音强度的值在什么范围,然后做相应调整就可以了。



    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 10:16:10 | 显示全部楼层
    Edison教程系列06 感应灯
    作者:Angelo 来自 DFRobot
    http://www.dfrobot.com.cn/commun ... thread&tid=3320

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


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

    605.jpg


    输入代码
    1. <font size="3">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.    </font>
    复制代码
    下载完成后,可以试着人走开,等待一段时间,看看LED是否会关掉。随后再试着靠近,LED是不是会自动亮起。
    硬件分析(数字输入—数字输出)
    整个装置分为三个部分,输入,控制与输出。人体红外热释电运动传感器为输入设备, Arduino就是控制设备,LED发光模块就是输出设备。
    又由于人体红外热释电运动传感器为数字量的传感器,所以接数字口。LED输出信号也是数字量,同样接数字口。

    606.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-12-23 10:19:32 | 显示全部楼层
    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 <Servo.h>   
    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. }
    复制代码
    把舵机固定在盒子的连接处,灯塞在盒子里面,传感器当然是要露在外面的,需要检测环境光。安装完成后,把盒子置于暗处,看下盒子会不会自动打开。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 10:22:54 | 显示全部楼层
    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

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-12-23 10:25:22 | 显示全部楼层
    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


    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-5-4 23:58 , Processed in 0.216565 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.