|
本帖最后由 topdog 于 2016-7-22 21:08 编辑
夏天到了,上海的室内气温也很高。宝宝想开空调,但是外婆说要到30摄氏度才可以开。我就基于Microduino给她做了个温度报警器。
当室内温度超过30摄氏度的时候就播放音乐,oled上显示“开空调 ”。
主要的模块:32u4,AM2321,buzzer,oled,hub。mcookie也是这些模块。
原理介绍:
1,测温度 用AM2321把温度测量出来,用的库在wangdong
#include <AM2321.h>
void readByAM2321()
{
AM2321 am2321;
am2321.read();
float temp = am2321.temperature/10.0;
float humidity = am2321.humidity/10.0;
Serial.println(temp);
Serial.println(humidity);
}
串口输出是为了方便调试,可以注释掉。
2,oled显示用的u8glib库已经更新到1.19.1,IDE可以下载安装新版本
打开IDE,选择sketch-->include library -->manage libraries 输入u8glib,选择最新版本安装。
代码如下:
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
void loop() {
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 20, "temp");
u8g.setPrintPos(70, 20);
u8g.print(temp);
u8g.print(" ");
u8g.print("c");
u8g.drawStr( 0, 42, "Humidity");
u8g.setPrintPos(70,42);
u8g.print(humidity);
u8g.print(" ");
u8g.print("%");
if(temp>30)
{
u8g.drawStr( 0,63, "Open air conditioning");
}
else
if(temp<30);
{
u8g.drawStr( 0,63, "");
}
} while( u8g.nextPage() );
}
字体选择u8g_font_unifont,第一行显示温度,第二行显示湿度,第三行显示Open air conditioning,温度超过30度就显示,不超过不显示。
3,buzzer编曲
直接把雪绒花的简谱转换成频率和时间,在程序里就是song和noteDurations两个数组。
温度超过30度就会播放音乐,清凉的雪绒花旋律响起。当空调打开,环境温度低于30度时buzzer停止 noTone。
if(temp>30)
{
song_play();
}
else
if(temp<30);
{
noTone(buzzer_pin);
}
delay(500);
视频·:http://weibo.com/p/2304446435dbbef0294c480407560e1349acfc
代码分享github
|
|