该项目将帮助喜欢户外活动和接触大自然的人们,帮助他们保持健康。
随着健康问题的日益增加,尤其是皮肤问题,户外活动越来越需要持续监测。
为了帮助从事此类休闲活动的人,我设计了一种便携式设备,可以监测紫外线、环境温度、湿度和大气压力,让用户了解他们愉快活动周围的条件,并使用必要的皮肤保护和保湿产品。
由于这些活动通常发生在我们无法访问手机网络的地方,因此我考虑安装一个 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 的文件。










项目代码
/* 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

评论