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

使用 Arduino Nano 的迷你气象站

组件和用品

Arduino Nano R3
× 1
DHT 11 模块
× 1
BMP-280 压力传感器
× 1
1.44 英寸 ST7735 液晶显示器
× 1
3D 打印外壳
× 1
USB A to mini USB B 线
× 1

必要的工具和机器

烙铁(通用)
3D 打印机(通用)
焊锡丝
双面胶带

应用和在线服务

Arduino IDE
Autodesk Fusion 360

关于这个项目

简介

实时捕获物理数据总是令人着迷。在这个项目中,您不仅能够捕捉天气预测的三个基本物理参数,即。温度、湿度和大气压力,而且还能在液晶屏上显示实时数据。

说明及工作原理

该项目中使用的两个传感器是 BMP-280 和 DHT-11。前者感应温度和大气压力,而后者感应相对湿度。 DHT-11 可以通过使用 BME-280(它也可以测量湿度)而不是 BMP-280 来完成,但如果考虑到成本,那么使用这里使用的传感器组合对于 DIY 来说更经济项目。还应该注意的是,虽然 DHT-11 能够感测温度和湿度,但它仅用于湿度感测,因为它的温度感测分辨率为 +/-2°,而 BMP-280 的温度感测分辨率为 +/-.5°。该项目的核心是 Arduino NANO 开发板。在这里,NANO 板也因其实惠的价格而被选择而不是大众首选的 UNO。 1.44” ST7735系列TFT​​液晶屏用作我们项目的显示器。此处避免使用更大的屏幕,以免 Arduino NANO 过载。

电路与编程

尽可能方便地提供了电路图和框图的组合,以帮助制造商了解组件的物理配置和连接。还提供了组件引脚输出表,使事情变得更容易。通过图表和表格,您会注意到 Arduino NANO 上 ICSP 接头的 5V 和 GND 引脚已用于为组件供电以及板载电源和接地引脚。这样做是为了消除任何会使系统体积庞大的额外电源。

谈到编程,在第一部分中包含了一系列库,以保持编程简短。除了显而易见的,Wire.h 和 SPI.h 库也值得一提,因为 Wire.h 是允许 Arduino 与 I2C/TWI 设备(如 BMP-280 和 ST7735 LCD 和 SPI.h)通信的库提供与ST7735 LCD 的串行外设接口。在第二部分中,初始化传感器并设置 LCD 的布局、字体颜色等,以根据我们的喜好显示数据。在我们编程的最后部分,获取并显示传感器的输出,每次读数之间有一个方便的延迟,以保持稳定。

构建和测试

在原型中,组件保持模块化并使用跳线而不是焊接进行连接。这不仅使故障排除和维修变得容易,而且使组装过程变得轻松。设备外壳经过定制 3D 打印,非常适合组件。外壳设有适当的通风装置,以便将传感器暴露于被测量并散发系统产生的热量,否则这些热量会干扰传感元件。该设备通过相同类型的 AUSB 到用于对 Arduino 进行编程的 B 型迷你 USB 供电。该原型已经在室内进行了几个小时的拉伸测试,使用 PC USB 端口和 5V 智能手机充电器作为电源。考虑到生产成本和开发时间,与在线气象数据相比,结果相当准确。

结论

总之,可以说这个项目非常经济,至少可以说是有用的,最重要的是,有一个小巧轻便的气象站可以放在口袋里,很有趣。

要购买电子零件,请从 UTSOURCE 订购

参考书目

· Google.com

· Arduino.cc

·Mytectutor.com


代码

  • 代码
代码C/C++
这是项目的相关草图,评论声明将解释工作原理
#include  //include Serial Peripheral Interface library#include  //include Two Wire Interface library#include  // 包含 Adafruit 图形库#include  // 包含 Adafruit ST7735 TFT 库#include  // 包含 Adafruit BMP280 传感器库#include "DHT.h" //include DHTXX 传感器library#define DHTPIN 2 //DHT11 数据引脚连接到 arduino 引脚 D2#define DHTTYPE DHT11 //指定使用的 DHT 传感器的类型#define TFT_RST 8 // TFT RST 引脚连接到 arduino 引脚 D8#define TFT_CS 10 // TFT CS pin连接arduino pin D9#define TFT_DC 9 // TFT DC pin连接arduino pin D10//初始化ST7735 SERIES TFT libraryAdafruit_ST7735 tft =Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); //定义设备I2C地址:0x76或0x77(0x77是库默认地址)#define BMP280_I2C_ADDRESS 0x76 Adafruit_BMP280 bmp280; // 初始化 Adafruit BMP280 库DHT dht(DHTPIN, DHTTYPE); // 初始化 DHT 传感器 void setup(void){ dht.begin(); // 同步 DHT 传感器 tft.initR(INITR_144GREENTAB); // 初始化一个ST7735S芯片,黑色tab tft.fillScreen(ST77XX_BLACK); // 设置黑色背景 tft.drawFastHLine(0, 15 , tft.width(), ST77XX_CYAN);// 在 (0, 15) 位置绘制水平分隔线 tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // 将文本颜色设置为白色和黑色背景 tft.setTextSize(1); // 将文本大小设置为 1 //tft.setCursor(4, 0); // 将光标移动到位置 (4, 0) 像素 //tft.print("ARDUINO + ST7735 TFT"); tft.setCursor(25, 5); // 将光标移动到位置 (25, 5) 像素 tft.print("WEATHER BUDDY"); // 初始化 BMP280 传感器 if( bmp280.begin(BMP280_I2C_ADDRESS) ==0 ) { // 连接错误或设备地址错误! tft.setTextColor(ST77XX_RED, ST77XX_CYAN); // 将文本颜色设置为红色和黑色背景 tft.setTextSize(2); // 将文本大小设置为 2 tft.setCursor(5, 76); // 将光标移动到位置 (5, 76) 像素 tft.print("Connection"); tft.setCursor(35, 100); // 将光标移动到位置 (35, 100) 像素 tft.print("Error");同时(1); // 留在这里 } tft.drawFastHLine(0, 55, tft.width(), ST77XX_CYAN); // 在位置 (0, 55)pixel 绘制水平分隔线 tft.drawFastHLine(0, 95, tft.width(), ST77XX_CYAN); // 在位置 (0, 195)pixel 绘制水平分隔线 tft.setTextColor(ST77XX_RED, ST77XX_BLACK); // 将文本颜色设置为红色和黑色背景 tft.setCursor(30, 20); // 将光标移动到位置 (30, 20) 像素 tft.print("TEMPERATURE "); // 设置第一部分的标题 tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // 将文本颜色设置为青色和黑色背景 tft.setCursor(40, 60); // 将光标移动到位置 (40, 60) 像素 tft.print("HUMIDITY "); // 设置第二部分的标题 tft.setTextColor(ST77XX_GREEN, ST7735_BLACK); // 将文本颜色设置为绿色和黑色背景 tft.setCursor(40, 100); // 将光标移动到位置 (40, 100) 像素 tft.print("PRESSURE "); // 设置第三部分的标题 tft.setTextSize(2); // 将文本大小设置为 2 } // main loopvoid loop() { char _buffer[8]; // 从 BMP280 传感器读取温度、湿度和压力 float temp =bmp280.readTemperature(); // 以°C 为单位获取温度 float hum =dht.readHumidity(); // 以 rH% 为单位获取湿度 float pres =bmp280.readPressure(); // 以 hPa 为单位获取压力 // 打印温度(以°C 为单位) if(temp <0) // 如果温度 <0 sprintf( _buffer, "-%02u.%02u", (int)abs(temp), (int )(abs(temp) * 100) % 100 ); else // 如果温度>=0 sprintf( _buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );// 设置近似值 tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK ); // 将文本颜色设置为黄色和黑色背景 tft.setCursor(11, 34); // 将光标移动到位置 (11,34) 像素 tft.print(_buffer); // 从 BMP-280 传感器打印温度 tft.drawCircle(89, 34, 2, ST77XX_YELLOW); // 打印度数符号 ( ° )(如果使用 * 可以省略) tft.setCursor(95, 34); // 将光标移动到位置 (95,34) 像素 tft.print("C"); // 打印摄氏符号 // 2:打印湿度 (%) sprintf( _buffer, "%02u ", (int)(hum)); // 设置近似值 tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK); // 将文本颜色设置为洋红色和黑色背景 tft.setCursor(45, 74); // 将光标移动到位置 (45,74) 像素 tft.print(_buffer); // 从 DHT-11 传感器打印湿度 tft.setCursor(75, 74); // 将光标移动到位置 (75,74) 像素 tft.print("%"); // 打印百分比符号 // 3:打印压力(以 hPa 为单位) sprintf( _buffer, "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100) ); // 设置近似值 tft.setTextColor(ST77XX_ORANGE, ST77XX_BLACK); // 将文本颜色设置为橙色和黑色背景 tft.setCursor(3, 112); // 将光标移动到位置 (3,112)pixel tft.print(_buffer); // 从 BMP-280 打印大气压力 tft.setCursor(91, 112); // 将光标移动到位置 (91,112)pixel tft.print("hPa"); // 打印大气压力单位为百帕延迟(1000); // 等待 1 秒再获取下一个传感器读数 }

定制零件和外壳

这是我使用的 3D 打印部件的 STL 文件

示意图

您只需要遵循所示的接线即可。

制造工艺

  1. Raspberry Pi 2 气象站
  2. Raspberry Pi 气象站
  3. 使用树莓派远程监测天气
  4. Weather Station V 2.0
  5. 使用 Arduino Nano RP 2040 的 DIY Photoshop 编辑控制台
  6. 7 段阵列时钟
  7. $10 便携式 Arduino 气象站 (AWS)
  8. eDOT - 基于 Arduino 的精密时钟和气象站
  9. 使用 Arduino 和 RDA8057M 的 FM 收音机
  10. ThingSpeak Arduino 气象站
  11. 当地气象站
  12. Arduino 控制的 USB 触控板