回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

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

头像 驴友花雕 2025.07.29 11 0

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

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

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

由于这些活动通常发生在我们无法访问手机网络的地方,因此我考虑安装一个 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 的文件。
 

01.jpg
02 (1).jpg
02 (1).png
02 (2).jpg
02 (2).png
02 (3).jpg
02 (3).png
02 (4).jpg
02 (4).png
02 (5).jpg

项目代码

 

 

代码
/* Codigo adaptado com auxlio da IA CHATGPT*/

//BIBLIOTECA, VARIVEIS e DEFINIES-----------------------------------------------------------------------------

// Incluso de bibliotecas
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <SoftwareSerial.h> //Para os pinos do Esp32 funcionar como porta serial
#include <TinyGPS++.h>
#include <Pushbutton.h> //Configurao dos botes
 
//Bibliotecas e definies GPS
#define GPS_RX 16
#define GPS_TX 17
#define GPS_Serial_Baud 9600
SoftwareSerial gpsSerial(GPS_RX, GPS_TX); //Rx=16 e Tx=17
TinyGPSPlus gps;

//Variveis GPS
int k,kr, //Variveis relgio
		HHGST,MMGST,SSGST,HLST,HLT,HL,HH,MM,DL,Seg,DJ,Ano3; //Variveis da Hora Sideral
char c;
long satelites;
bool recebido = false;
unsigned long hora1,Dia,Mes,Ano,Mes2,Ano2;
float longit,MM1,SS1,mn2,Dia2,GMTh,EsteDia,GMST,Mes3,
      Hora,Minuto,Segundo,s2,
      regis_Z; //Varivel da inclinao

int satelitesant = 0, ano;
int AA;
double t,passo1,passo2,passo3,to,n1,h1,n2,latitude, longitude, altitude, curso, lat, lon;
long chs,a,b;
unsigned long data,horaRE;
byte mes, dia, hora, minuto, segundo, centesimo, horalocal;
float altitudeGPS, lat1, long1, lat2, long2, s;
float mn,hora2,d;
int Cg; //Curso geografico - dado pelo GPS
int Pg; //Posicao geografica - calculado
long lat3,lon3,latAnt=0,lonAnt=0; //Latitude e longitude
int ValorAlinha=0;
bool recCg = false;

//Variveis e definies do Sensor BME 280
#define SEALEVELPRESSURE_HPA (1013.25) //necessrio para a leitura da altitude
Adafruit_BME280 bme;
bool status;  // Cria uma varivel status de iniciao do sensor BME

// Definio da Altura e largura do display OLED 
#define SCREEN_WIDTH 128 // Largura display, em pixels 
#define SCREEN_HEIGHT 64 // Altura display, em pixels
// Declarao pino reset para I2C do display OLED
#define OLED_RESET 	-1 // Ser o mesmo reset da placa
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Criao objeto display

// Variveis Sensor de UV
int UVSensorPin = 2;// Conectado ao pino A0 (GPIO2)
float sensorValue;
int sensorUV;
int nivelUV;

//Biblioteca, variveis e definies dos botes
#define BUTTON_NAV 18     // Boto para navegao
#define BUTTON_SELECT 19  // Boto para seleo

// Variveis do Menu
int menuIndex = 0;
unsigned long ultimaLeitura = 0;
const unsigned long debounceDelay = 200;
static bool ultimaNaveg = HIGH;  //Boto de navegalo recebe  alto
static bool ultimaSelec = HIGH; //Boto de seleo recebe  alto

// Pino analgico que recebe a tenso da bateria (via divisor de tenso, ex: GPIO 34)
#define VBAT_PIN 34
// Tenso mxima e mnima da CR2032
#define VBAT_MAX 3.0
#define VBAT_MIN 2.0

//Declaraes das Funes
void medUv(); //Funo que mede o UV
void GPS(); //Funo GPS
void medTPU(); //Funo Temperatura,Presso e Umidade
void DataHora(); //Funo Data e Hora
void Menu(); //Funo Menu
void gpsLoop(); //Funo de verificao de conexo com GPS


//SETUP-------------------------------------------------------------------------------------------------------
void setup(){
	Serial.begin(115200); //Inicia a cominicao serial
  
  gpsSerial.begin(GPS_Serial_Baud); //Inicia a conexo com gps

  pinMode(BUTTON_NAV, INPUT_PULLUP); //Aloca os botes
  pinMode(BUTTON_SELECT, INPUT_PULLUP);
	
	if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { //Inicia OLED
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }

  status = bme.begin(0x76, &Wire); //Inicia o sensor TPU. Endereo 0x76
	
}
//LOOP------------------------------------------------------------------------------------------------- 
void loop(){
  
  gpsLoop();
  Menu();
 
  switch (menuIndex) {
    case 0:
      medUV();
      break;
    case 1:
      medTPU();
      break;
    case 2:
      DataHora();
      break;
    case 3:
      GPS();
      break;
  }
  	  
}

【Arduino 动手做】ESP32 便携式环境监测设备
项目链接:https://www.hackster.io/ALLAFS/portable-environmental-monitoring-device-a8c35d
项目作者:阿曼多·莱昂纳多

项目代码:
https://www.hackster.io/code_files/670468/download
https://www.hackster.io/code_files/670470/download
https://www.hackster.io/code_files/670471/download
https://www.hackster.io/code_files/670472/download
https://www.hackster.io/code_files/670473/download
https://www.hackster.io/code_files/670474/download
https://www.hackster.io/code_files/670475/download
3D 文件:
https://hacksterio.s3.amazonaws.com/uploads/attachments/1869705/corpo2_QzCMBy12Wm.stl
https://hacksterio.s3.amazonaws.com/uploads/attachments/1869707/tampa_bateria_aaxuQtCaDL.stl
https://hacksterio.s3.amazonaws.com/uploads/attachments/1869708/tampa_N2JyxziQUU.stl
https://hacksterio.s3.amazonaws.com/uploads/attachments/1869704/corpo_rdMT1I8M7H.stl
 

00.jpg

评论

user-avatar
icon 他的勋章
    展开更多