13浏览
查看: 13|回复: 2

[项目] 【Arduino 动手做】ESP32 便携式环境监测设备

[复制链接]
该项目将帮助喜欢户外活动和接触大自然的人们,帮助他们保持健康。

随着健康问题的日益增加,尤其是皮肤问题,户外活动越来越需要持续监测。

为了帮助从事此类休闲活动的人,我设计了一种便携式设备,可以监测紫外线、环境温度、湿度和大气压力,让用户了解他们愉快活动周围的条件,并使用必要的皮肤保护和保湿产品。

由于这些活动通常发生在我们无法访问手机网络的地方,因此我考虑安装一个 GPS,它可以显示日期、时间、纬度、经度和高度。

这使得该设备对登山者、徒步旅行者、跑步者、徒步旅行者和其他人很有用。

该设备尚未组装,但所有台架测试均已成功完成。

便携式环境监测装置电路图
UV 模块连接到 ESP32 的 Rx 和 Tx 引脚。
BMe280 传感器和 OLED 显示屏连接到 SDA 端口的引脚 IO21 和 SCL 端口的 IO22 引脚。
紫外线传感器连接到引脚 IO02。按钮
连接到引脚 IO18 和 IO19 以及 GND。
电池的正输出连接到一个 10K 电阻器,而该电阻器又连接到 ESP34 的 VIN 和 IO32 引脚。
电池充电器直接连接到电池。

如前所述,使用了 Arduino IDE。软件结构
除了设置和循环功能外,还分为六个功能:medUV(测量紫外线强度);GPS(用于日期、时间和地理位置信息);medTPU(测量温度、湿度和大气压力);DataHora (表示当地时间以及月份和星期中的日期);菜单(用于在功能之间导航);和 gpsLoop(检查 GPS 信号)。loop() 函数
调用 gpsLoop() 函数来检查 GPS 信号,调用 Menu() 函数来启用导航,并调用开关来访问这些功能。
主屏幕始终是 medUV() 函数。
我已经附上了上传到 ESP32 的文件。

【Arduino 动手做】ESP32 便携式环境监测设备图2

【Arduino 动手做】ESP32 便携式环境监测设备图1

【Arduino 动手做】ESP32 便携式环境监测设备图3
【Arduino 动手做】ESP32 便携式环境监测设备图4

【Arduino 动手做】ESP32 便携式环境监测设备图5

【Arduino 动手做】ESP32 便携式环境监测设备图6

【Arduino 动手做】ESP32 便携式环境监测设备图8

【Arduino 动手做】ESP32 便携式环境监测设备图7

【Arduino 动手做】ESP32 便携式环境监测设备图9

【Arduino 动手做】ESP32 便携式环境监测设备图10

驴友花雕  中级技神
 楼主|

发表于 昨天 19:15

【Arduino 动手做】ESP32 便携式环境监测设备

项目代码

  1. /* Codigo adaptado com auxlio da IA CHATGPT*/
  2. //BIBLIOTECA, VARIVEIS e DEFINIES-----------------------------------------------------------------------------
  3. // Incluso de bibliotecas
  4. #include <SPI.h>
  5. #include <Wire.h>
  6. #include <Adafruit_GFX.h>
  7. #include <Adafruit_SSD1306.h>
  8. #include <Adafruit_Sensor.h>
  9. #include <Adafruit_BME280.h>
  10. #include <SoftwareSerial.h> //Para os pinos do Esp32 funcionar como porta serial
  11. #include <TinyGPS++.h>
  12. #include <Pushbutton.h> //Configurao dos botes
  13. //Bibliotecas e definies GPS
  14. #define GPS_RX 16
  15. #define GPS_TX 17
  16. #define GPS_Serial_Baud 9600
  17. SoftwareSerial gpsSerial(GPS_RX, GPS_TX); //Rx=16 e Tx=17
  18. TinyGPSPlus gps;
  19. //Variveis GPS
  20. int k,kr, //Variveis relgio
  21.                 HHGST,MMGST,SSGST,HLST,HLT,HL,HH,MM,DL,Seg,DJ,Ano3; //Variveis da Hora Sideral
  22. char c;
  23. long satelites;
  24. bool recebido = false;
  25. unsigned long hora1,Dia,Mes,Ano,Mes2,Ano2;
  26. float longit,MM1,SS1,mn2,Dia2,GMTh,EsteDia,GMST,Mes3,
  27.       Hora,Minuto,Segundo,s2,
  28.       regis_Z; //Varivel da inclinao
  29. int satelitesant = 0, ano;
  30. int AA;
  31. double t,passo1,passo2,passo3,to,n1,h1,n2,latitude, longitude, altitude, curso, lat, lon;
  32. long chs,a,b;
  33. unsigned long data,horaRE;
  34. byte mes, dia, hora, minuto, segundo, centesimo, horalocal;
  35. float altitudeGPS, lat1, long1, lat2, long2, s;
  36. float mn,hora2,d;
  37. int Cg; //Curso geografico - dado pelo GPS
  38. int Pg; //Posicao geografica - calculado
  39. long lat3,lon3,latAnt=0,lonAnt=0; //Latitude e longitude
  40. int ValorAlinha=0;
  41. bool recCg = false;
  42. //Variveis e definies do Sensor BME 280
  43. #define SEALEVELPRESSURE_HPA (1013.25) //necessrio para a leitura da altitude
  44. Adafruit_BME280 bme;
  45. bool status;  // Cria uma varivel status de iniciao do sensor BME
  46. // Definio da Altura e largura do display OLED
  47. #define SCREEN_WIDTH 128 // Largura display, em pixels
  48. #define SCREEN_HEIGHT 64 // Altura display, em pixels
  49. // Declarao pino reset para I2C do display OLED
  50. #define OLED_RESET         -1 // Ser o mesmo reset da placa
  51. #define SCREEN_ADDRESS 0x3C
  52. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Criao objeto display
  53. // Variveis Sensor de UV
  54. int UVSensorPin = 2;// Conectado ao pino A0 (GPIO2)
  55. float sensorValue;
  56. int sensorUV;
  57. int nivelUV;
  58. //Biblioteca, variveis e definies dos botes
  59. #define BUTTON_NAV 18     // Boto para navegao
  60. #define BUTTON_SELECT 19  // Boto para seleo
  61. // Variveis do Menu
  62. int menuIndex = 0;
  63. unsigned long ultimaLeitura = 0;
  64. const unsigned long debounceDelay = 200;
  65. static bool ultimaNaveg = HIGH;  //Boto de navegalo recebe  alto
  66. static bool ultimaSelec = HIGH; //Boto de seleo recebe  alto
  67. // Pino analgico que recebe a tenso da bateria (via divisor de tenso, ex: GPIO 34)
  68. #define VBAT_PIN 34
  69. // Tenso mxima e mnima da CR2032
  70. #define VBAT_MAX 3.0
  71. #define VBAT_MIN 2.0
  72. //Declaraes das Funes
  73. void medUv(); //Funo que mede o UV
  74. void GPS(); //Funo GPS
  75. void medTPU(); //Funo Temperatura,Presso e Umidade
  76. void DataHora(); //Funo Data e Hora
  77. void Menu(); //Funo Menu
  78. void gpsLoop(); //Funo de verificao de conexo com GPS
  79. //SETUP-------------------------------------------------------------------------------------------------------
  80. void setup(){
  81.         Serial.begin(115200); //Inicia a cominicao serial
  82.   
  83.   gpsSerial.begin(GPS_Serial_Baud); //Inicia a conexo com gps
  84.   pinMode(BUTTON_NAV, INPUT_PULLUP); //Aloca os botes
  85.   pinMode(BUTTON_SELECT, INPUT_PULLUP);
  86.        
  87.         if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { //Inicia OLED
  88.     Serial.println(F("SSD1306 allocation failed"));
  89.     for(;;);
  90.   }
  91.   status = bme.begin(0x76, &Wire); //Inicia o sensor TPU. Endereo 0x76
  92.        
  93. }
  94. //LOOP-------------------------------------------------------------------------------------------------
  95. void loop(){
  96.   
  97.   gpsLoop();
  98.   Menu();
  99.   switch (menuIndex) {
  100.     case 0:
  101.       medUV();
  102.       break;
  103.     case 1:
  104.       medTPU();
  105.       break;
  106.     case 2:
  107.       DataHora();
  108.       break;
  109.     case 3:
  110.       GPS();
  111.       break;
  112.   }
  113.             
  114. }
复制代码


回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail