2016-10-10 16:05:03 [显示全部楼层]
5579浏览
查看: 5579|回复: 3

[资讯] [Gravity]使用DFRduino 套件搭建健康成长CP项目

[复制链接]
前言
原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。
本文假定读者具有使用Arduino的经验,并且了解C等编程语言。
本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文:
http://www.omoikane.cn/2016/09/24/dfrobot-project/
项目名称
健康成长CP
项目所需硬件
  • DFRduino —— 从机
  • Intel Edison 开发板 —— 主机
  • 拓展板——接插 Gravity 接口传感器
  • Seeed Base Board X 2 —— 一块用于I2C通讯,一块用于连接其他
  • 各种传感器

项目设计
预计项目分为三个部分:
  • 输入:土湿,室温,室湿,亮度;运动量
  • 处理:Intel Edison 作为主机,负责处理数据,网页前端,高性能,与手机交互;DFRduino 作为从机,两者通过I2C 协议通讯(SPI、UART)
  • 输出:1260 LCD、舵机、红绿灯、网页前端、手机客户端
使用arduino、node.js等编程语言,以及shell脚本编程。Arduino及其配套Kit又被称为电子积木,类似于乐高,将需要的模块组合到一起,就能极快地实现自己的小点子。样各个模块的代码理解修改组合就可以实现一个复杂的项目。
背景知识Blynk 物联网服务
相信很多人都用了,非常简单方便,支持自建第三方服务器。Virtual Pin是核心功能。
Moves 运动监测软件
最重要的是提供API接口。
官网:
https://moves-app.com/ ;
API使用文档:
https://dev.moves-app.com/
I2C协议
除了I2C接口之外还有UART、SPI接口可以使用,这里为了方便使用了I2C接口。Arduino 里封装好了I2C通讯库,直接调用即可。库参考地址:
https://www.arduino.cc/en/Reference/Wire
这里使用I2C协议,可以接口复用,也就是既用来让Edison与DFRduino通信,又用来 1602 LCD显示。
项目详述示意图以及实物图
输入:土湿——DFROBOT 的土壤湿度传感器
[SKU:SEN0193——电容式土壤湿度传感器]。使用前务必按照wiki进行初始化。代码如下:
[mw_shl_code=applescript,true]void setup() {
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop() {
int moisture;
moisture = analogRead(1); //connect sensor to Analog 1
Serial.print(val); //print the value to serial
delay(100);
}[/mw_shl_code]
室温、室湿——DHT22
需要从Arduino IDE中安装DHT传感器库项目——加载库——管理库。代码如下:
[mw_shl_code=applescript,true]// Example testing sketch for various DHT humidity/temperature sensors
[/td][/tr]
[tr][td]// Written by ladyada, public domain。Modified by sjqlwy.[/td][/tr]
[tr][td][/td][/tr]
[tr][td]#include "DHT.h"[/td][/tr]
[tr][td][/td][/tr]
[tr][td]#define DHTPIN 2 // 将DHT22传感器插到2号引脚[/td][/tr]
[tr][td][/td][/tr]
[tr][td]#define DHTTYPE DHT22 // 使用 DHT 22 (AM2302)[/td][/tr]
[tr][td][/td][/tr]
[tr][td]// 初始化DHT传感器.[/td][/tr]
[tr][td]DHT dht(DHTPIN, DHTTYPE);[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void setup() {[/td][/tr]
[tr][td]Serial.begin(9600);[/td][/tr]
[tr][td]Serial.println("DHTxx test!");[/td][/tr]
[tr][td]dht.begin();[/td][/tr]
[tr][td]}[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void loop() {[/td][/tr]
[tr][td]// Wait a few seconds between measurements.[/td][/tr]
[tr][td]delay(2000);[/td][/tr]
[tr][td][/td][/tr]
[tr][td]// Reading temperature or humidity takes about 250 milliseconds![/td][/tr]
[tr][td]// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)[/td][/tr]
[tr][td]float h = dht.readHumidity();[/td][/tr]
[tr][td]// Read temperature as Celsius (the default)[/td][/tr]
[tr][td]float t = dht.readTemperature();[/td][/tr]
[tr][td][/td][/tr]
[tr][td]// Check if any reads failed and exit early (to try again).[/td][/tr]
[tr][td]if (isnan(h)[/td][td][/td][td]isnan(t)[/td][td][/td][td]isnan(f)) {[/td][/tr]
[tr][td]Serial.println("Failed to read from DHT sensor!");[/td][/tr]
[tr][td]return;[/td][/tr]
[tr][td]}[/td][/tr]
[tr][td][/td][/tr]
[tr][td]Serial.print("Humidity: ");[/td][/tr]
[tr][td]Serial.print(h);[/td][/tr]
[tr][td]Serial.print(" %\t");[/td][/tr]
[tr][td]Serial.print("Temperature: ");[/td][/tr]
[tr][td]Serial.print(t);[/td][/tr]
[tr][td]Serial.print(" *C ");[/td][/tr]
[tr][td]}[/mw_shl_code][/td][/tr]
[tr][td]注意
DHT系列单线模转数温湿度传感器无法在Intel Edison以及Galileo上使用,原因是啥啥线频率不够。所以像SeeedStudio Grove Kit For Intel Galileo|Edison 套件里面不提供该系列传感器,要想在Intel物联网设备上使用可以将DHT传感器引出两根线,具体可以参考Intel开发者社区,写得很详尽,我为啥没附链接因为我也找不到了。。。
亮度
产品链接
[SKU:DFR0026模拟环境光线传感器]。 代码如下:[mw_shl_code=applescript,true]void setup()
{
  Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop()
{
      int val;
      val=analogRead(0);   //connect grayscale sensor to Analog 0
      Serial.println(val,DEC);//print the value to serial        
      delay(100);
}[/mw_shl_code]
运动量交互
我们这里使用Moves的API传到Edison上。
处理部分Intel Edison
因为DHT22这种传感器使用一根线,Edison、Galileo的频率不够无法正常接收信号,这也是为什么Seeed 出的Grove套件不包含这种传感器的原因。为此,我们让DFRduino收集传感器数据,然后通过I2C协议与Edison交互。另外由于要用的Wifi、蓝牙Edision自带,无形之中方便了很多。
Blynk初始化代码
包含使用Blynk的基本功能,需要安装Blynk库,这里使用Edison的无线网卡连接网络,开启串口调试功能。
[mw_shl_code=applescript,true]#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space[/td][/tr]
[tr][td]#include <WiFi.h>[/td][/tr]
[tr][td]#include <BlynkSimpleIntelEdisonWiFi.h>[/td][/tr]
[tr][td][/td][/tr]
[tr][td]// You should get Auth Token in the Blynk App.[/td][/tr]
[tr][td]// Go to the Project Settings (nut icon).[/td][/tr]
[tr][td]char auth[] = "Blynk网站Token";[/td][/tr]
[tr][td][/td][/tr]
[tr][td]// Your WiFi credentials.[/td][/tr]
[tr][td]// Set password to "" for open networks.[/td][/tr]
[tr][td]char ssid[] = "无线网名称";[/td][/tr]
[tr][td]char pass[] = "无线网密码";[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void setup()[/td][/tr]
[tr][td]{[/td][/tr]
[tr][td]  Serial.begin(9600);[/td][/tr]
[tr][td]  Blynk.begin(auth, ssid, pass);[/td][/tr]
[tr][td]  // Or specify server using one of those commands:[/td][/tr]
[tr][td]  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);[/td][/tr]
[tr][td]  //Blynk.begin(auth, ssid, pass, server_ip, port);[/td][/tr]
[tr][td]}[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void loop()[/td][/tr]
[tr][td]{[/td][/tr]
[tr][td]  Blynk.run();[/td][/tr]
[tr][td]}[/mw_shl_code][/td][/tr]
[tr][td][/table]I2C通讯(主机)[mw_shl_code=applescript,true]#include <Wire.h>
//host
void setup()
{
    Wire.begin(); // 加入 i2c 总线,作为主机
    Serial.begin(9600);
}

void loop()
{
    Wire.requestFrom(4,1);
    while(Wire.available()>0)
    {
        int x = Wire.read();
        Serial.println(x);
    }
    delay(1000);
}[/mw_shl_code]
[table=98%,initial]
DFRduinoI2C通讯(从机)[/td][/tr]
[tr][td][mw_shl_code=applescript,true]#include <Wire.h>[/td][/tr]
[tr][td]//client[/td][/tr]
[tr][td]const int pinLight = A0;[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void setup()[/td][/tr]
[tr][td]{[/td][/tr]
[tr][td]    Wire.begin(4);[/td][/tr]
[tr][td]    Wire.onRequest(requestEvent);[/td][/tr]
[tr][td]}[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void loop()[/td][/tr]
[tr][td]{[/td][/tr]
[tr][td]    delay(100);[/td][/tr]
[tr][td]}[/td][/tr]
[tr][td][/td][/tr]
[tr][td]void requestEvent()[/td][/tr]
[tr][td]{[/td][/tr]
[tr][td]    int lightValue = analogRead(pinLight);[/td][/tr]
[tr][td]    Wire.write(lightValue);[/td][/tr]
[tr][td]}[/mw_shl_code][/td][/tr]
[tr][td]输出Demo —— 读取DFRduino上亮度传感器的值显示在手机上的Blynk客户端上1602 LCD —— 接在Edison上,通过system功能显示更多信息仪表盘 —— 使用舵机实现仪表盘功能,显示当前温湿度、土壤湿度是否适宜(一键切换)发光二极管 —— 通过LED灯实现和上面类似的功能网页前端(node.js on Intel Edison) —— Edison上本身运行着一个完整的Linux系统,通过Intel XDK IoT Edition这个IDE,使用node.js可以非常方便地开发网页访问前端,进行交互控制
功能展望
  • 添加NFC、BLE 交换运动量数据功能
  • 与智能体重秤交互
  • 同步每日饮水数据
  • 提醒环境温度穿衣戴口罩(Intel Edison利用API查询天气信息并进行反馈)
  • 查询快递情况(对于经常买东西又不想整天刷新很有用。。。)



hnyzcj  版主

发表于 2016-10-10 16:27:57

ooooooo
回复

使用道具 举报

hnyzcj  版主

发表于 2016-10-10 16:28:12

名字起的很不错
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-10-10 16:59:31

谢谢分享
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail