“第十八课--Microduino 制作讯线水位报警器模型/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
原理图
Pkj讨论 | 贡献
第4行: 第4行:
 
|
 
|
 
==目的==
 
==目的==
前面讲过LM35采集时每升高10mv电压代表着温度上升1℃,两者成线性关系。因此对电压稳定性要求很高。本实验将通过调用Microduino 内部基准源(3.3V或1.1V电压)结合LM35采集温度。
+
今天做一个最简单的讯线水位报警器模型,如果水位到达警戒水位时,警报灯会闪烁,同时用蜂鸣器报警提示。
 +
==设备==
 
*'''[[Microduino-Core]]'''
 
*'''[[Microduino-Core]]'''
 
*'''[[Microduino-FT232R]]'''
 
*'''[[Microduino-FT232R]]'''
第11行: 第12行:
 
**面包板    一块   
 
**面包板    一块   
 
**USB数据连接线  一根  
 
**USB数据连接线  一根  
**LM35D温度传感器 一个
+
**有源蜂鸣器 一个  
**数字万用表 一个
+
**led灯        一个
 +
**220欧、10k电阻 各一个
 
==原理图==
 
==原理图==
原理图接法与以往一样LM35的VCC接5V,GND接GND,VOUT接A0.
+
'''注意:蜂鸣器用的是有源蜂鸣器,有一定电压就能发声。'''
[[File:lesson18-schematic.jpg|600px|center|thumb]]
+
[[File:第十七课-原理图.jpg|600px|center|thumb]]
===实验一===
+
水是导体(纯净水除外),然后给水一个电压,用模拟口进行检测即可(之所以说是模型,实际环境会稍显复杂不能直接用电拿水当导体用),如果检测到电压说明水已经到了我们标定的水位了。
*用Microduino-Ft232RL供电
+
==程序==
**程序
 
 
<source lang="cpp">
 
<source lang="cpp">
void setup() {
+
void setup()
  Serial.begin(115200);         //使用115200速率进行串口通讯
+
{
  pinMode(A0, INPUT);  
+
  pinMode(A5,INPUT);
 +
  pinMode(12,OUTPUT); 
 +
  pinMode(113,OUTPUT);  
 
}
 
}
void loop() {
 
  int n = analogRead(A0);    //读取A0口的电压值
 
  double vol = n * (5.0 / 1024.0*100);  //使用双精度浮点数存储温度数据,温度数据由电压值换算得到
 
  Serial.println(vol);                  //串口输出温度数据
 
  delay(1000);                      //等待1秒,控制刷新速度
 
}
 
</source>
 
串口监视温度数据:
 
[[File:第十八课-USB供电.jpg|600px|center|thumb]]
 
===实验二===
 
*用Microduino 内部基准源1.1V计算温度值
 
**程序
 
<source lang="cpp">
 
void setup() {
 
  Serial.begin(115200);        //使用115200速率进行串口通讯
 
  analogReference(INTERNAL);  //调用板载1.1V基准源
 
}
 
void loop() {
 
  int n = analogRead(A0);    //读取A0口的电压值
 
  double vol = n * (1.1 / 1024.0*100);    //使用双精度浮点数存储温度数据,温度数据由电压值换算得到
 
  Serial.println(vol);                  //串口输出温度数据
 
  delay(1000);                        //等待1秒,控制刷新速度
 
}
 
</source>
 
串口监视温度数据:
 
[[File:第十八课-1.1V基准电源.jpg|600px|center|thumb]]
 
===实验三===
 
*用Microduino 内部基准源3.3V计算温度值
 
'''注意:使用aref引脚电压作为基准源,需要将3.3V基准源接入Microduino的 aref接口。'''
 
[[File:第十八课-3.3基准原理图.jpg|600px|center|thumb]]
 
  
基准源3.3V作为外部基准源使用详细参考:http://www.geek-workshop.com/thread-5717-1-1.html
+
void loop()
*程序
+
{
<source lang="cpp">
+
   int n=analogRead(A5);
void setup() {
+
  if (n>=1)
   Serial.begin(115200);         //使用115200速率进行串口通讯
+
  {
analogReference(EXTERNAL);  //使用aref引脚电压作为基准源,需要将3.3V基准源接入Microduino的 aref接口
+
    digitalWrite(12, HIGH)
}
+
    digitalWrite(13, HIGH); //用高电平使有源蜂鸣器发声
void loop() {
+
    delay(500);
  int n = analogRead(A0);   //读取A0口的电压值
+
    digitalWrite(12, LOW);  
  double vol = n * (3.3 / 1024.0*100);   //使用双精度浮点数存储温度数据,温度数据由电压值换算得到
+
    digitalWrite(13, LOW);
  Serial.println(vol);                   //串口输出温度数据
+
    delay(500);  
  delay(1000);                           //等待1秒,控制刷新速度
+
  }
 
}
 
}
 
</source>
 
</source>
串口监视温度数据:
+
程序之前的课程都介绍过,其实就是模拟口读取电压,大家可以发挥自己的想象,做些更有趣的东西。
[[File:第十八课-3.3V基准电源.jpg|600px|center|thumb]]
 
 
 
==分析==
 
本次使用三种不同方法,同一温度传感器得到不同数值。
 
*使用USB供电稍微好一点,供电电压为4.99V,偏离5V电压0.2%。
 
*调用内部1.1V和3.3V基准源,经过批量采样,1.1V内部基准源的平均误差范围在1.22%左右,最高达到2.2%。
 
*在5V量程下,Arduino ADC的采样精度是10位也就是1024级,最小分辨率为5/1024=0.0048828125 V=4.8828125 mV
 
*在3.3V内部基准源量程下,Arduino ADC的采样精度是10位,最小分辨率为3.3/1024=0.00322265625 V=3.22265625 mV
 
*在1.1V内部基准源量程下,Arduino ADC的采样精度是10位,最小分辨率为1.1/1024=0.00107421875 V=1.07421875 mV
 
*LM35是每10mV代表1℃,在5V量程下,分辨率接近0.5度;3.3V量程下分辨率接近0.3度;1.1V量程下分辨率接近0.1度。
 
 
==结果==
 
==结果==
通过以上分析换算,这次使用USB供电时,基准源误差相对于其他更小一些,USB供电温度更接近真实温度,但是当供电环境不稳定时,内部基准源就发挥作用了。如果进一步要求更高级精度,那么就需要使用精密外部基准源。基准误差越小,ADC的精度也就越高,根据需求环境选用合适的基准源在各种制作中也是很重要的一个环节。
+
程序下载完毕后,当两导线接触到水时被导通,模拟口读取到电压,可以看到led闪烁及蜂鸣器发出“嘀 嘀。。。”的报警声。
 
 
 
==视频==
 
==视频==
 
|}
 
|}

2014年5月6日 (二) 05:36的版本

Language English

目的

今天做一个最简单的讯线水位报警器模型,如果水位到达警戒水位时,警报灯会闪烁,同时用蜂鸣器报警提示。

设备

  • Microduino-Core
  • Microduino-FT232R
  • 其他硬件设备
    • 面包板跳线 一盒
    • 面包板 一块
    • USB数据连接线 一根
    • 有源蜂鸣器 一个
    • led灯 一个
    • 220欧、10k电阻 各一个

原理图

注意:蜂鸣器用的是有源蜂鸣器,有一定电压就能发声。

水是导体(纯净水除外),然后给水一个电压,用模拟口进行检测即可(之所以说是模型,实际环境会稍显复杂不能直接用电拿水当导体用),如果检测到电压说明水已经到了我们标定的水位了。

程序

void setup()
{
  pinMode(A5,INPUT);
  pinMode(12,OUTPUT);  
  pinMode(113,OUTPUT); 
}

void loop()
{
  int n=analogRead(A5);
  if (n>=1)
  {
    digitalWrite(12, HIGH);  
    digitalWrite(13, HIGH); //用高电平使有源蜂鸣器发声
    delay(500); 
    digitalWrite(12, LOW); 
    digitalWrite(13, LOW);  
    delay(500);    
  }
}

程序之前的课程都介绍过,其实就是模拟口读取电压,大家可以发挥自己的想象,做些更有趣的东西。

结果

程序下载完毕后,当两导线接触到水时被导通,模拟口读取到电压,可以看到led闪烁及蜂鸣器发出“嘀 嘀。。。”的报警声。

视频