内容介绍
基于Wio Terminal的数据采集控制系统
一、功能概述
本系统以Seeed公司的Wio Terminal为控制器,通过Grove接口采集温湿度传感器、光照传感器的数据,并显示到Wio Terminal的显示屏上。系统还外接了一个蜂鸣器,当光照不足时,会进行报警,并在屏幕上显示报警状态。
二、硬件描述
系统用的的硬件设备如下:
Wio Terminal 1个
Grove Starter Kit For Seeeduino Lotus 1套
Wio Terminal是Seeed公司推出的一款开发平台。
它体积小巧,支持Arduino等多种编程方式,自带了Wi-Fi、蓝牙、IMU、麦克风、 蜂鸣器、microSD 卡、可配置的按钮、光传感 器、五向开关、红外发射器等多个传感器或接口,功能丰富。此外,它还具有一块2.4英寸,分辨率320*240的显示屏,便于和控制器直接进行数据交互,非常方便。
Grove Starter Kit For Seeeduino Lotus,是Seeed公司推出的一款Grove开发套件。
套件包含Seeeduino LotusV1.1开发板,以及9款Grove接口的传感器或模块。
本次主要用到的是光照传感器、温湿度传感器及蜂鸣器。
系统接线图如下图所示
温湿度传感器接到Wio开发板的D0口(13脚),光照传感器连接到Wio开发板的A1口(15脚),蜂鸣器连接到Wio开发板的D2口(16脚)。Seeeduino Lotus仅起到转接作用。
三、软件描述
系统的软件平台使用的Arduino平台,主要是正确的安装设备库及模块的库文件即可。详情可参考seeed官方的wiki网站。
下面是Arduino代码
#include "DHT.h" //DHT 温湿度传感器库
#define DHTTYPE DHT11 // 温湿度传感器型号
#define DHTPIN 0 // 温湿度传感器接到Wio的引脚D0
DHT dht(DHTPIN, DHTTYPE); //初始化温湿度传感器
#include "Grove_LED_Bar.h" //LED相关库
int lightSensorPin=A1;//光照传感器接到Wio的引脚A1
int buzzerPin=D2;//蜂鸣器接到Wio的引脚D2
#include "TFT_eSPI.h"
TFT_eSPI tft;
TFT_eSprite spr=TFT_eSprite(&tft);
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(lightSensorPin,INPUT);
pinMode(buzzerPin,OUTPUT);
tft.begin();
tft.setRotation(3);
spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
}
void loop() {
//温湿度数据采集处理
float temp_hum_val[2] = {0};//温湿度可以readTempAndHumidity一起读取,也可以分别读取readTemperature或readHumidity
if (!dht.readTempAndHumidity(temp_hum_val)) {
Serial.print("Humidity: ");
Serial.print(temp_hum_val[0]);
Serial.println(" %\t");
Serial.print("Temperature: ");
Serial.print(temp_hum_val[1]);
Serial.println(" *C");
} else {
Serial.println("Failed to get temprature and humidity value.");
}
//光照数据采集处理
int light_value = analogRead(lightSensorPin);
light_value = map(light_value, 0, 800, 0, 100);//数据线性化处理
Serial.print("Light value: ");
Serial.print(light_value);
Serial.println(" %");
Serial.println(" ");
//蜂鸣器测试
if (light_value<30)
{
digitalWrite(buzzerPin,HIGH);
delay(200);
digitalWrite(buzzerPin,LOW);
}
else
{
digitalWrite(buzzerPin,LOW);
}
//显示界面
//绘制标题栏
spr.fillSprite(TFT_WHITE);
spr.fillRect(0,0,320,50,TFT_BLUE);
spr.setTextColor(TFT_WHITE);
spr.setTextSize(3);
spr.drawString("Sensor Data",50,15);
//绘制线框
spr.drawFastVLine(150,50,190,TFT_BLUE);
spr.drawFastHLine(0,140,320,TFT_BLUE);
//显示温度值
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Temperature",10,65);
spr.setTextSize(3);
spr.drawNumber(temp_hum_val[1],50,95);
spr.drawString("C",90,95);
//显示湿度值
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Humidity",190,65);
spr.setTextSize(3);
spr.drawNumber(temp_hum_val[0],200,95);
spr.drawString("%",240,95);
//显示光照值
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Light",50,160);
spr.setTextSize(3);
spr.drawNumber(light_value,50,190);
spr.drawString("%",90,190);
//光照不足时,蜂鸣器报警
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Buzzer",200,160);
spr.setTextSize(3);
if (light_value<30)
{spr.drawString("ON",210,190);
}
else
{spr.drawString("OFF",210,190);
}
spr.pushSprite(0,0);
delay(1000);
}
四、心得体会
时间很快,历时一年的Funpack活动已经接近尾声。
本人此刻的心情比较复杂,既感觉如释重负,又有点依依不舍。
在这一年多的时间里,本人收获了很多知识,遇到了不少困难,也体会到了兴趣和项目带来的快乐。
当然,还是因为工作的关系,每块开发板都没有深入研究,留下不少遗憾。
最后,感谢硬禾学堂的平台、感谢得捷电子提供丰富多样的产品!
感谢乐于交流的网友、乐于分享的创客们!
希望今后大家能继续交流,共同进步!