2014-5-29 17:42:11 [显示全部楼层]
101427浏览
查看: 101427|回复: 56

[入门教程] Arduino教程08 温度报警器「DFR0100 」

[复制链接]
【本篇课程内容于 2024年10月25日更新】


项目 - 温度报警器

在项目【报警器】中,我们认识了一个发声元件——蜂鸣器,也做了一个简单的小报警器。是不是还不过瘾呢?这次我们要做一个更贴近生活的应用——温度报警器。当温度到达我们设定的限定值时,报警器就会响。我们可以用于厨房温度检测报警等各种需要检测温度的场合。这个项目中,除了要用到蜂鸣器,还需要一个LM35温度传感器。
我们这里是第一次接触传感器,传感器是什么?简单的从字面上的理解就是,一种能感知周围环境,并把感知到的信号转换为电信号的感应元件。感应元件再把电信号传递给控制器。就好比人的各个感官,感知周围环境后,再将信息传递给大脑是一样的道理。

元件清单

Arduino教程08 温度报警器「DFR0100 」图1

硬件连接


这个项目中的蜂鸣器和项目【报警器】的接法相同。在接LM35温度传感器时,注意三个引脚的位置,有LM35字样的一面面向自己,从左至右依次接5V、Analog 0和GND,如下图所示。

Arduino教程08 温度报警器「DFR0100 」图2

图 1 温度报警器连线图


代码示例
样例代码:
  1. //项目 – 温度报警器
  2. float sinVal;            
  3. int toneVal;
  4. unsigned long tepTimer ;   
  5. void setup(){
  6.     pinMode(8, OUTPUT);        // 蜂鸣器引脚设置
  7.     Serial.begin(9600);        //设置波特率为9600 bps
  8. }
  9. void loop(){
  10.     int val;               // 用于存储LM35读到的值
  11.     double data;          //用于存储已转换的温度值
  12.     val=analogRead(0);   //LM35连到模拟口,并从模拟口读值
  13.     data = (double) val * (5/10.24); // 得到电压值,通过公式换成温度
  14.      
  15.     if(data>27){        //  如果温度大于27,蜂鸣器响   
  16.           for(int x=0; x<180; x++){
  17.             //将sin函数角度转化为弧度
  18.             sinVal = (sin(x*(3.1412/180)));
  19.             //用sin函数值产生声音的频率
  20.             toneVal = 2000+(int(sinVal*1000));
  21.             //给引脚8一个
  22.             tone(8, toneVal);
  23.             delay(2);
  24.      }   
  25.     } else {    // 如果温度小于27,关闭蜂鸣器
  26.            noTone(8);          //关闭蜂鸣器
  27.     }
  28.      
  29.     if(millis() - tepTimer > 500){   // 每500ms,串口输出一次温度值
  30.              tepTimer = millis();
  31.              Serial.print("temperature: ");     // 串口输出“温度”
  32.              Serial.print(data);               // 串口输出温度值
  33.              Serial.println("C");              // 串口输出温度单位
  34.        }
  35. }
复制代码


成功下载完程序后,打开Arduino IDE的串口监视器。

Arduino教程08 温度报警器「DFR0100 」图3

设置串口监视器的波特率为9600。

Arduino教程08 温度报警器「DFR0100 」图4

可以直接从串口中读取温度值,并尝试升高周围环境温度,或者用手直接接触LM35使其升温,串口可以很直观的看到温度有明显的变化。

Arduino教程08 温度报警器「DFR0100 」图5

蜂鸣器工作的条件是,一旦检测到环境温度大于27度,蜂鸣器鸣响,环境温度小于27度,则关闭蜂鸣器。

代码回顾

这段代码与我们项目【报警器】的大部分内容是相同的,代码中的大部分语法在前几项目中已经说过了,现在看起来是不是有点头绪了呢?
程序开始设置了三个变量:

  1. float sinVal;            
  2. int toneVal;
  3. unsigned long tepTimer ;
复制代码


第一二个变量就不说了,项目【报警器】中代码回顾中已作解释,第三个变量tepTimer,是一个无符号的长整型(unsigned long)用于存放机器时间,便于定时在串口输出温度值,由于机器运行时间较长,所以选用一个长整型,又由于时间不为负,则选用无符号长整型,对于变量类型不明确的,可以再回看下项目【交通信号灯】相关解释。
setup()函数的第一句,我们想必已经很熟了,设置蜂鸣器为输出模式,有人可能会问为什么LM35不用设置呢?LM35传输的是个模拟量,模拟量不需要设置引脚模式。pinMode()只用于数字引脚。

串口可用的函数也有好多,可用查看语法手册。我们这里就先介绍几个常用的:

  1. Serial.begin(9600);
复制代码


这个函数用于初始化串口波特率,也就是数据传输的速率,是使用串口必不可少的函数。直接输入相应设定的数值就可以了,如果不是一些特定的无线模块对波特率有特殊要求的话,波特率设置只需和串口监视器保持一致即可。我们这里就只是用于串口监视器。
再到loop()函数内部,开始部分又声明了两个变量val和data,注释中已对这两个变量进行说明了,这两个变量与前面声明的两个变量不同的是,这两个是局部变量,只在loop()函数内部起作用。关于全局变量和局部变量的区别,可以参看一下项目【SOS 求救信号器】中说明。

  1. val=analogRead(0);
复制代码


这里用到了一个新函数:

  1. analogRead(pin);
复制代码


这个函数用于从模拟引脚读值,pin是指连接的模拟引脚。Arduino的模拟引脚连接到一个10位A/D转换,输入0~5V的电压对应读到0~1023的数值,每个读到的数值对应的都是一个电压值。
我们这里读到的是温度的电压值,是以0~1023的方式输出。而我们LM35温度传感器每10mV对应1摄氏度。

  1. data = (double) val * (5/1024)*100;
复制代码


从传感器中读到的电压值,它的范围在0~1023,将该值分成1024份,再把结果乘以5,映射到0~5V,因为每度10mV,需要再乘以100得到一个double型温度值,最后赋给data变量。

Arduino的通信伙伴——串口
串口是Arduino与外界进行通信的一个简单的方法。每个Arduino都至少有一个串口,UNO的串口分别与数字引脚0(RX)和数字引脚1(TX)相连。所以如果要用到串口通信的,数字0和1不能用于输入输出功能。
Arduino下载程序也是通过串口来完成的。所以,当下载程序的时候,USB将占用了数字引脚0(RX)和数字引脚1(TX)。此时,在下载程序的过程中,RX和TX引脚不能接任何东西,否则会产生冲突。可以下载完之后,再接上。
在以后的使用过程中,需要注意,特别是一些无线通信模块,通常会用到TX、RX。所以下载程序时,需将模块先取下。避免造成程序下载不进去的情况。


后面进入一个if语句,对温度值进行判断。这里的if语句与之前讲的有所不同。if…else用于对两种情况进行判断的时候。

if…else语句格式:


if(表达式){         
         语句一;     
}   
    } else {   
           语句二;         
}


表达式结果为真时,执行语句一,放弃语句二的执行,接着跳过if语句,执行if语句的下一条语句;如果表达式结果为假时,执行语句二,放弃语句一的执行,接着跳过if语句,执行if语句的下一条语句。无论如何,对于一次条件的判断,语句1和语句2只能有一个被执行,不能同时被执行。
回到我们的代码, if中的语句就省略不说了,不明白的可回看项目【报警器】:

  1. if(data>27){         
  2.       for(int x=0; x<180; x++){
  3.         ......
  4.      }   
  5.     } else {   
  6.         ......
  7.     }
复制代码

进入if判断,对data也就是温度值进行判断,如果大于27,进入if前半段,蜂鸣器鸣响。否则,进入else后的语句,关闭蜂鸣器。
除了不断检测温度进行报警,我们还需要代码在串口实时显示温度。这里又用到millis()函数(项目三中有说明),利用固定的机器时间,每隔500ms定时向串口发出数据。
那串口收到数据后,如何在串口监视器上显示呢?就要用到下面的两句语句:
  1. Serial.print(val);
  2. Serial.println(val);
复制代码


print()的解释是,以我们可读的ASCII形式从串口输出。
这条命令有多种形式:
(1)数字则是以位形式输出(例1)
(2)浮点型数据输出时只保留小数点后两位(例2)
(3)字符和字符串则原样输出,字符需要加单引号(例3),字符串需要加双引号(例4)。

例如:
(1)Serial.print(78);输出“78”。
(2)Serial.print(1.23456);输出“1.23”。
(3)Serial.print(N);输出“N”。
(4)Serial.print(“Hello World.”);输出“Hello world.”。

不仅有我们上面这种形式输出,还可以以进制形式输出,可以参看语法手册。
println()与print()区别就是,println()比print()多了回车换行,其他完全相同。串口监视器输出还有一条语句比较常见的是Serial.write(),它不是以ASCII形式输出,而是以字节形式输出,感兴趣的可以查看语法手册。

代码中,可能有一处会不太明白:

  1. Serial.print(data);
复制代码


有人会问,data不是字符串吗?怎么输出是数字呢?不要忘了,这是我们前面定义的变量,它其实就是代表数字,输出当然就是数字啦!

硬件回顾

LM35

LM35是一种常见的温度传感器,使用简便,不需要额外的校准处理就可以达到± 0.25℃的准确率。我们看一下LM35引脚示意图,Vs接入电源,Vout是电压输出,GND接地。其引脚分布如下图所示:

Arduino教程08 温度报警器「DFR0100 」图6

图 2 LM35引脚示意图


计算公式:
Vout = 10mV/ ℃ * T℃(温度范围在+2℃~40℃)这个公式哪里来的呢?如果我们换做其他的温度传感器该怎么换算呢?这里提供一个网址,专门用来查芯片的使用说明书,也叫做datasheet。Datasheet会提供出厂芯片所有的性能参数,以及一些简单典型电路的搭建也会告诉你。以后碰到其他的传感器,不同的芯片就能通过这个方法来得到计算公式。
ALLDATASHEET:
http://www.alldatasheet.com/
我们试一下搜索LM35,下图公式就是截取自LM35的datasheet中。图中显示的就是LM35的计算公式。

Arduino教程08 温度报警器「DFR0100 」图7

图 3 LM35 计算公式



课后练习

温度报警器可以用于监控对环境温度有要求的一些东西,比如植物。将我们上面的温度报警器再结合LED灯。在不同的温度范围设置不同颜色灯,并伴随不同频率的声音。
比如:温度小于10 或者大于35,亮红灯,蜂鸣器发出比较急促的声音。
温度在25~35之间,亮黄灯,蜂鸣器伴随相对缓和的声音。
温度在10~25之间,亮绿灯,关闭蜂鸣器。

发挥你的想象,看看还能玩出什么好玩的东西?

下载附件示例代码.rar

龍龖龘  学徒

发表于 2014-9-1 19:49:39

本帖最后由 粒子 于 2022-1-5 16:43 编辑

小弟刚弄arduino,复制贴主的代码加多一个三基色LED灯进去,结果代码报错
  1. #define LED_R 2
  2. #define LED_G 3
  3. #define LED_B 4
  4. enum{Color_R,Color_G,Color_RG} //枚举颜色:红,绿,黄
  5. float sinVal;            
  6. int toneVal;
  7. unsigned long tepTimer ;
  8. void setup(){
  9.       pinMode(8, OUTPUT);        // 蜂鸣器引脚设置
  10.       pinMode(LED_R,OUTPUT);
  11.       pinMode(LED_G,OUTPUT);
  12.       pinMode(LED_B,OUTPUT);
  13.       Serial.begin(9600);        //设置波特率为9600 bps
  14. }
  15. void loop(){
  16.       int val;            //用于存储LM35读到的值
  17.       double data;        //用于存储已转换的温度值
  18.       unsigned char data_color; //用于存储亮灯颜色
  19.       val=analogRead(0);   //LM35连到模拟口,并从模拟口读值
  20.       data = val * 0.48876;  // 得到电压值,通过公式换成温度
  21.      
  22.       if(data>35 || data<5){        //  如果温度大于35或者小于5,蜂鸣器响   
  23.             for(int x=0; x<180; x++){
  24.                         //将sin函数角度转化为弧度
  25.                         sinVal = (sin(x*(3.1412/180)));
  26.                        //用sin函数值产生声音的频率
  27.                        toneVal = 2000+(int(sinVal*1000));
  28.                       //给引脚8一个
  29.                        tone(8, toneVal);
  30.                        delay(2);
  31.              }  
  32.              data_color =  Color_R; //颜色为红
  33.       } else {          // 如果温度小于35且大于5,关闭蜂鸣器
  34.              if(data>=15 && data<=25) data_color =  Color_G; //颜色为绿
  35.              if(data>=5 && data<15) data_color = Color_RG; //颜色为黄
  36.              if(data>25 && data<=35) data_color = Color_RG; //颜色为黄
  37.                        noTone(8);       //关闭蜂鸣器
  38.       }
  39.      switch(data_color)
  40.      {
  41.            case Color_R:                //红色
  42.                 digitalWrite(LED_R,LOW);
  43.                 digitalWrite(LED_G,HIGH);
  44.                 digitalWrite(LED_B,HIGH);
  45.                 break;
  46.            case Color_G:                 //绿色
  47.                 digitalWrite(LED_R,HIGH);
  48.                 digitalWrite(LED_G,LOW);
  49.                 digitalWrite(LED_B,HIGH);
  50.                 break;
  51.            case Color_RG:                //黄色
  52.                 digitalWrite(LED_R,LOW);
  53.                 digitalWrite(LED_G,LOW);
  54.                 digitalWrite(LED_B,HIGH);
  55.                 break;
  56.            default:
  57.                 break;
  58.      }
  59.      delay(1000);  //停留1秒
  60.      digitalWrite(LED_R,LOW);
  61.      digitalWrite(LED_G,LOW);
  62.      digitalWrite(LED_B,LOW);            //灭灯
  63.       if(millis() - tepTimer > 500){     // 每500ms,串口输出一次温度值
  64.                tepTimer = millis();
  65.                Serial.print("temperature: ");     // 串口输出“温度”
  66.                Serial.print(data);         // 串口输出温度值
  67.                Serial.println("℃");         // 串口输出温度单位
  68.        }
  69. }
复制代码
求解
回复

使用道具 举报

在水里窒息的鱼  学徒

发表于 2023-1-1 16:28:49

课后作业中,还碰到一个没法解释的现象,详情各位前辈指点。
具体现象:绿灯和红灯亮起时,串口监视器的数据刷新基本是500ms一次,但黄灯亮起时,串口监视器的刷新速率变为>1000ms一次。(目测)
不明白其中的原理。代码如下:
  1. //项目七 课后作业_温度报警+LED指示
  2. float sinVal;
  3. int toneVal;
  4. unsigned long tepTimer;
  5. int bee=8;
  6. int pinGreen=10;
  7. int pinYellow=11;
  8. int pinRed=12;
  9. void setup()
  10. {
  11.   pinMode(bee,OUTPUT);
  12.   pinMode(pinGreen,OUTPUT);
  13.   pinMode(pinYellow,OUTPUT);
  14.   pinMode(pinRed,OUTPUT);
  15.   Serial.begin(9600);               //设置波特率为9600 bps
  16. }
  17. void loop()
  18. {
  19.   int val;                         //存LM35读到的数值
  20.   double data;                     //存已转换的温度值
  21.   val=analogRead(0);               //LM35连到模拟口,并从模拟口读值
  22.   data=(double)val*(5/10.24) ;      //得到电压值,通过公式换成温度
  23.   if(data>23 or data<10)
  24.   {
  25.     digitalWrite(pinRed,HIGH);
  26.     digitalWrite(pinYellow,LOW);
  27.     digitalWrite(pinGreen,LOW);
  28.     beep(2);
  29.   }
  30.   
  31.   if(data<=23 && data>=22)
  32.   {
  33.     digitalWrite(pinYellow,HIGH);
  34.     digitalWrite(pinRed,LOW);
  35.     digitalWrite(pinGreen,LOW);
  36.     beep(10);
  37.   }
  38.   if(data<22)
  39.   {
  40.     noTone(8);       //关闭蜂鸣器
  41.     digitalWrite(pinGreen,HIGH);
  42.     digitalWrite(pinRed,LOW);
  43.     digitalWrite(pinYellow,LOW);
  44.   }
  45.   
  46.   if(millis()-tepTimer>500)
  47.   {
  48.     tepTimer=millis();
  49.     Serial.print("temperature:");
  50.     Serial.print(data);
  51.     Serial.println("C");
  52.   }
  53. }
  54. void beep(int delayTime)
  55.   {
  56.     for(int x=0; x<180; x++)
  57.     {
  58.     //将sin函数角度转化为弧度
  59.     sinVal = (sin(x*(3.1412/180)));
  60.     //用sin函数值产生声音的频率
  61.     toneVal = 2000+(int(sinVal*1000));
  62.     //给引脚8一个
  63.     tone(8, toneVal);
  64.     delay(delayTime);
  65.     }
  66.   }
复制代码
回复

使用道具 举报

半水  见习技师

发表于 2015-2-3 20:31:19

Jane 发表于 2015-2-3 10:15
串口选对了吗?你看下这个教程  https://arduino.cc/en/Guide/MacOSX

完整的错误信息如下:
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Mac OS X), Board: "Arduino Uno"
Binary sketch size: 6,712 bytes (of a 32,256 byte maximum)
avrdude: stk500_recv(): programmer is not responding

我看了一下教程,串口应该选择的是正确的。
我买的是Beginner Kit for Arduino的套件,IDE用的是1.0.6版本,Board选择的是UNO,串口选择的是/dev/tty.usbmodern1412

这个驱动也装了,不行
https://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_14.dmg

回复

使用道具 举报

snakeqx  学徒

发表于 2014-6-26 20:44:20

本帖最后由 snakeqx 于 2014-6-26 20:46 编辑

谢谢分享。但是我发现一个问题,一旦报警开始,温度的采样率就变了。;P
于是我稍微修改了一下程序,边报警边采样。代码如下:
  1. float sinVal;
  2. int toneVal;
  3. unsigned long tepTimer=0;
  4. void setup()
  5. {
  6.     pinMode (8, OUTPUT);
  7.     Serial.begin(9600);
  8. }
  9. void loop()
  10. {
  11.     int val;
  12.     double data;
  13.     for(int x=0;x<180;x++)
  14.     {
  15.         val=analogRead(0);
  16.         data=(double)val*(0.488);// =5/10.24 reduce calculation stress
  17.         sinVal=(sin(x*0.01744)); // =3.14/180 reduce calculation stress
  18.         toneVal=2000+(int(sinVal*1000));
  19.         if (data>30) tone(8, toneVal);
  20.         else noTone(8);
  21.        delay(20);
  22.     }  
  23.     if(millis()-tepTimer>500)
  24.     {
  25.         tepTimer=millis();
  26.         Serial.print("temperature:");
  27.         Serial.print(data);
  28.         Serial.println("C");
  29.     }
  30. }
复制代码



然后发现,报警的时候老实有破音,于是我想,可能是CPU在算sin()的时候占用了大量资源,于是我吧公式用excel推导出来放在一个数组里。
于是有了以下代码
  1. unsigned int toneVal[180]={
  2.   2017, 2034,   2052,   2069,         2087,         2104,         2121,         2139,         2156,         2173,         2190,         2207,         2224,         2241,         2258,         2275,         2292,         2308,         2325,         2341,         2358,         2374,         2390,         2406,         2422,         2438,         2453,         
  3.   2469, 2484,         2499,         2514,         2529,         2544,         2558,         2573,         2587,         2601,         2615,         2629,         2642,         2655,         2668,         2681,         2694,         2706,         2719,         2731,         2742,         2754,         2765,         2776,         2787,         2798,         2808,         2818, 2828, 2838,         2847,         2856,         2865,         2874,         2882,         2890,         2898,         2906,         2913,         2920,         2926,         2933,         2939,         2945,         2950,         2956,         2961,         2965,         2970,         2974,         2978,         2981,         2984,         2987,         2990,         2992, 2994, 2996,         2997,         2998,         2999,         2999,         2999,         2999,         2999,         2998,         2997,         2996,         2994,         2992,         2990,         2987,         2984,         2981,         2978,         2974,         2970,         2966,         2961,         2956,         2951,         2945,         2940,         2933, 2927, 2920,         2913,         2906,         2899,         2891,         2883,         2875,         2866,         2857,         2848,         2839,         2829,         2819,         2809,         2799,         2788,         2777,         2766,         2755,         2743,         2732,         2720,         2707,         2695,         2682,         2670,         2656, 2643, 2630,         2616,         2602,         2588,         2574,         2560,         2545,         2531,         2516,         2501,         2485,         2470,         2455,         2439,         2423,         2407,         2392,         2375,         2359,         2343,         2326,         2310,         2293,         2277,         2260,         2243,         2226, 2209, 2192,         2175,         2157,         2140,         2123,         2106,         2088,         2071,         2053,         2036,         2019,         2001};                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  4. unsigned long tepTimer=0;
  5. void setup()
  6. {
  7.     pinMode (8, OUTPUT);
  8.     Serial.begin(9600);
  9. }
  10. void loop()
  11. {
  12.     int val;
  13.     double data;
  14.     for(int x=0;x<180;x++)
  15.     {
  16.         val=analogRead(0);
  17.         data=(double)val*(0.488);// =5/10.24 reduce calculation stress
  18.         if (data>30) tone(8, toneVal[x]);
  19.         else noTone(8);
  20.         delay(5);
  21.     }  
  22.     if(millis()-tepTimer>500)
  23.     {
  24.         tepTimer=millis();
  25.         Serial.print("temperature:");
  26.         Serial.print(data);
  27.         Serial.println("C");
  28.     }
  29. }
复制代码

可是还是有破音,请问一下高手,到底是哪里速度慢了?现在已经没有什么计算了,只有一次读值*0.488
:'(:'(:'(


回复

使用道具 举报

snakeqx  学徒

发表于 2014-7-21 20:52:46

晕了,终于弄明白了。小弟实在愚笨。
在温度到报警温度的正负5度时,传感器检测到的温度有一段纠结期。理论上温度上涨是这样的
25 26 27 28
但实际上是
25 26 25 27 26 25 25 27......
所以有断断续续的。
当温度大于32时,声音破音明显好转,大于40无破音。
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-7-21 22:52:08

snakeqx 发表于 2014-6-26 20:44
谢谢分享。但是我发现一个问题,一旦报警开始,温度的采样率就变了。
于是我稍微修改了一下程序,边报警 ...

哇,你把所有的值都算出来了呀
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-7-21 22:53:25

snakeqx 发表于 2014-7-21 20:52
晕了,终于弄明白了。小弟实在愚笨。
在温度到报警温度的正负5度时,传感器检测到的温度有一段纠结期。理论 ...

你检测出来的温度波动这么大的呀
回复

使用道具 举报

龍龖龘  学徒

发表于 2014-9-1 21:01:00

龍龖龘 发表于 2014-9-1 19:49
小弟刚弄arduino,复制贴主的代码加多一个三基色LED灯进去,结果代码报错
求解 ...

原来少加了个“;”,已经解决了
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-9-2 10:00:31

龍龖龘 发表于 2014-9-1 21:01
原来少加了个“;”,已经解决了

:handshake
回复

使用道具 举报

seacolor  学徒

发表于 2014-10-18 20:36:59

你好,本人刚学这个ARDUINO 里面的语句 有点不明白,temtimer 开头只是定义了数剧类型而已,怎么就可以直接用来计算了呢?if(millis() - tepTimer > 500){     // 每500ms,串口输出一次温度值
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-10-20 13:27:16

seacolor 发表于 2014-10-18 20:36
你好,本人刚学这个ARDUINO 里面的语句 有点不明白,temtimer 开头只是定义了数剧类型而已,怎么就可以直 ...

初始值为0,是个数值,所以可以用来计算的
回复

使用道具 举报

cobra_one  初级技师 来自手机

发表于 2014-11-15 08:48:18

请教楼主一个问题,硬件电路我跟你连接方式相同,我想把采集到的数据通过串口发送给电脑,但接上LM35串口就不存在了,这是为什么呢?
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-11-17 10:05:51

cobra_one 发表于 2014-11-15 08:48
请教楼主一个问题,硬件电路我跟你连接方式相同,我想把采集到的数据通过串口发送给电脑,但接上LM35串口就 ...

LM35没有连接错误吧?单独测温度可是正常工作吗?或者方便的话,拍张照片看看
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-11-20 17:05:54

做完温度报警器,想再做个火焰报警器的,可以看看火焰报警器教程链接,不过教程写的是Edsion写的,用UNO原理是一样的。

https://mc.dfrobot.com.cn/thread-3280-1-1.html
回复

使用道具 举报

Joyce  高级技师

发表于 2014-11-30 21:18:02

这个城市环境信息采集器做的挺好的。。 https://www.geek-workshop.com/thread-297-1-1.html
回复

使用道具 举报

半水  见习技师

发表于 2015-2-2 21:34:35

Upload程序的时候报错了,错误信息是avrdude: stk500_recv()
百度了一下说是什么串口选错了,我的是Mac的电脑。

求指点~
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2015-2-3 10:15:55

半水 发表于 2015-2-2 21:34
Upload程序的时候报错了,错误信息是avrdude: stk500_recv()
百度了一下说是什么串口选错了,我的是Mac的电 ...

串口选对了吗?你看下这个教程  https://arduino.cc/en/Guide/MacOSX
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2015-2-4 10:18:06

半水 发表于 2015-2-3 20:31
完整的错误信息如下:
  This report would have more information with
  "Show verbose output during c ...

你下载个Blink的代码试试呢?串口应该是选对了呀 ,下面这个FTDI的驱动是不需要装的
回复

使用道具 举报

sfyugg@163.com  初级技师

发表于 2015-3-14 19:13:37

本帖最后由 sfyugg@163.com 于 2015-3-14 19:14 编辑

为什么我串口监视出现了这种情况:
temperature: 347.17C
temperature: 347.17C
temperature: 346.68C
temperature: 346.19C
temperature: 344.73C

用手一摸,很烫很烫
回复

使用道具 举报

sfyugg@163.com  初级技师

发表于 2015-3-14 19:40:35

sfyugg@163.com 发表于 2015-3-14 19:13
为什么我串口监视出现了这种情况:
temperature: 347.17C
temperature: 347.17C

原来是自己接反了,重新接回来,居然还好用,dfrobot的东西质量不错
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2015-3-16 14:44:14

sfyugg@163.com 发表于 2015-3-14 19:40
原来是自己接反了,重新接回来,居然还好用,dfrobot的东西质量不错

:victory:
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail