亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino UNO 迷你气象站

组件和用品

Arduino UNO
× 1
乐鑫 ESP8266 ESP-01
× 1
Arduino Proto Shield
或普通面包板
× 1
DHT22 温度传感器
× 1
Seeed Grove - 光传感器
× 1
Seeed Grove - 紫外线传感器
× 1
Seeed Grove - 气压计传感器
× 1
Seeed Grove - 灰尘传感器
× 1
电阻 1k ohm
× 2
电阻 10k ohm
× 1
电阻 4.75k ohm
× 1
跳线(通用)
× 1

应用和在线服务

Arduino IDE
ThingSpeak API

关于这个项目

这是我的第一代基于 Arduino 的带有 Wi-Fi 连接的迷你气象站,能够使用 ThingSpeak 平台在线公开发布数据。

气象站使用不同的传感器收集与天气和环境相关的以下数据:

  • 温度
  • 湿度
  • 大气压
  • 光照强度
  • 紫外线指数
  • 粉尘浓度

目标是使用开放式硬件制作一个小巧而简单的气象站。

让我们开始玩吧!

电子元件

您不需要特定工具来组装此项目。所有组件都可以在您最喜欢的电子商务商店在线找到。

该电路由USB口供电(连接电脑或普通手机充电器),但也可以外接直流电源或电池连接到Arduino电源插孔。

气象站电路案例不在本项目范围内。

连接部件

根据原理图连接所有组件。您需要一些跨接线将每个传感器连接到面包板。您可以使用 protoshield(用于更紧凑的电路)、普通面包板,或设计您自己的 Arduino 扩展板。

将 USB 数据线插入 Arduino Uno 板并继续下一步。

代码

假设您已经安装了最新的 Arduino IDE,请下载并安装以下库:

  • DHT22 库
  • Adafruit BMP085 库

有关如何将库添加到 Arduino IDE 的说明,请查看以下 Arduino 指南。

下载 Arduino 代码 (weatherBox.ino ) 包含在代码部分。替换 XXXXX 通过您的 WiFi 路由器 SSID,YYYYY 通过路由器密码和ZZZZZ 通过您的 ThingSpeak 频道写入 API 密钥(请参阅下一步如何获取)。

将 Arduino 板连接到您的计算机 USB 端口并上传代码。

ThingSpeak 配置

  • 创建一个 ThingSpeak 帐户
  • 创建一个新频道

指定气象站的名称和描述。分配以下频道并保存频道:

  • 通道 1 =光
  • 通道 2 =湿度
  • 通道 3 =温度(来自 DHT22)
  • 通道 4 =紫外线指数
  • 通道 5 =粉尘浓度
  • 通道 6 =压力
  • 通道 7 =温度(来自 BMP085)

复制 API 写入密钥。它在 Arduino 代码的上一步中使用。当电台打开时,传感器值将定期上传到频道。您可以配置每个变量的公共和私有可视化。

公共频道示例:https://thingspeak.com/channels/35540

使用安卓应用

您将能够在任何浏览器中可视化气象站数据。但您也可以在基于 Android 的智能手机上查看它,并随时将其可视化。

  • 在您的 Android 设备上从 Google Play 商店下载并安装 ThingsView 应用
  • 在应用中,插入您的频道 ID 号,然后点击添加。您将在 ThingSpeak 频道配置中找到 ID
  • 每个变量的当前值将显示在图表中

玩得开心!

代码

  • weatherBox.ino
weatherBox.inoArduino
#include #include #include #include #include #include #define SSID "XXXXX " //用你的路由器SSID替换XXXX#define PASS "YYYYY" //用你的路由器密码替换YYYYY#define IP "184.106.153.149" // thingspeak.com IP#define DHT22_PIN 2String GET ="GET /update?key=ZZZZZ&field1="; //用你的ThingSpeak频道写keySoftwareSerial monitor(10, 11)替换ZZZZZ; //串行通信到ESP8266模块(RX, TX)dht DHT;Adafruit_BMP085_Unified bmp =Adafruit_BMP085_Unified(10085);//VariablesintluminancePin =A0;int uvPin =A1;intdustPin =8;unsigned long duration;unsigned long starttime; sampletime_ms =30000;unsigned long delay_time =60000;unsigned long lowpulseoccupancy =0;float ratio =0;float浓度 =0;//setupvoid setup(){ //开始串行通信Serial.begin(9600);监视器开始(9600); Serial.println("正在初始化..."); //配置 Arduino 引脚 pinMode(dustPin, INPUT); //初始化压力传感器Serial.println("正在检测BMP085压力传感器..."); if(!bmp.begin()) { Serial.println("未检测到 BMP085 传感器。验证您的连接或 I2C 地址!");同时(1); } Serial.println("检测到BMP085!"); //与wifi模块通信monitor.flush(); monitor.println("AT");延迟(2000); if(monitor.find("OK")){ Serial.println("与ESP8266模块通信:OK"); } else { Serial.println("ESP8266 模块错误"); } //连接wifi路由器connectWiFi(); Serial.print("Sampling("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); //初始化定时器 starttime =millis();}void loop(){ //测量灰尘颗粒持续时间 =pulseIn(dustPin, LOW);低脉冲占用率 =低脉冲占用率 + 持续时间; //30 秒循环 if ((millis() - starttime)>=sampletime_ms) { ratio =lowpulseoccupancy/(sampletime_ms*10.0); // 百分比 (de 0 a 100%) 浓度 =1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // 从数据表 lowpulseoccupancy =0; //读取其他传感器字符缓冲区[10]; //光传感器浮动亮度=模拟读取(亮度Pin); //UV 传感器 float uv =analogRead(uvPin);紫外线 =紫外线 * 0.0049; //将值转换为伏特 uv =uv * 307; //转换为mW/m² uv =uv/200; //计算紫外线指数 //温湿度 int chk =DHT.read22(DHT22_PIN);浮动湿度 =DHT.湿度;浮动温度 =DHT.温度; //压力和温度1sensors_event_t事件; bmp.getEvent(&event);浮动压力 =0;浮动温度1 =0;如果(事件.压力){压力=事件.压力; bmp.getTemperature(&温度1); } //将传感器值转换为字符串 StringluminanceStr =dtostrf(luminance, 4, 1, buffer);亮度Str.replace(" ",""); String uvStr =dtostrf(uv, 4, 1, 缓冲); uvStr.replace(" ","");字符串湿度Str =dtostrf(湿度, 4, 1, 缓冲);湿度Str.replace(" ",""); String temperatureStr =dtostrf(温度, 4, 1, 缓冲);温度Str.replace(" ",""); StringdustStr =dtostrf(浓度, 4, 1, 缓冲);灰尘Str.replace(" ",""); String pressureStr =dtostrf(pressure, 4, 1, buffer); pressureStr.replace(" ","");字符串温度1Str =dtostrf(温度1, 4, 1, 缓冲);温度1Str.replace("",""); //将数据发送到 ThingSpeak updateSensors(luminanceStr, heightStr, temperatureStr, uvStr,dustStr, pressureStr, temperature1Str); //等待下一个采样周期 Serial.print("Wait"); Serial.print(delay_time/1000); Serial.println("s 为下一次采样"); Serial.println();延迟(延迟时间); //初始化新循环Serial.println(); Serial.print("Sampling("); Serial.print(sampletime_ms/1000); Serial.println("s)...");开始时间 =毫秒(); }}//发送数据到ThingSpeakvoid updateSensors(StringluminanceStr, String modifiedStr, String temperatureStr, String uvStr, String DustStr, String pressureStr, String temperature1Str) { String cmd ="AT+CIPSTART=\"TCP\",\""; cmd +=IP; cmd +="\",80"; monitor.println(cmd);延迟(2000); cmd =获取; cmd +=亮度Str; cmd +="&field2="; cmd +=湿度Str; cmd +="&field3="; cmd +=温度Str; cmd +="&field4="; cmd +=uvStr; cmd +="&field5="; cmd +=灰尘Str; cmd +="&field6="; cmd +=pressureStr; cmd +="&field7="; cmd +=温度1Str; cmd +="\r\n";延迟(1000); int strsize =cmd.length(); monitor.println("AT+CIPSEND=" + String(strsize));延迟(2000);监控打印(cmd); if(monitor.find("OK")){ Serial.println("传输成功完成"); }else{ Serial.println("传输失败!"); }}void sendDebug(String cmd){ Serial.print("SEND:"); Serial.println(cmd); monitor.println(cmd);} boolean connectWiFi(){ Serial.println("正在连接无线网络..."); String cmd ="AT+CWMODE=1"; monitor.println(cmd);延迟(2000);监控.flush(); //清除缓冲区 cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; monitor.println(cmd);延迟(5000); if(monitor.find("OK")){ Serial.println("连接成功!");返回真; }else{ Serial.println("连接失败!");返回假; } Serial.println();}
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library
Github
https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-Library

制造工艺

  1. Raspberry Pi 气象站
  2. 使用 Arduino Uno 的人体检测机器人系统
  3. 使用 K30 传感器监测二氧化碳
  4. 你有多高?
  5. WebServerBlink 使用 Arduino Uno WiFi
  6. 简单的 UNO 计算器
  7. Arduino Cloud Sensor Tower
  8. 视觉的坚持
  9. 当地气象站
  10. 监测健康站
  11. 智能手机上的温度监控
  12. Arduino 气象站