Com tots sabeu, el proper 12 d’agost d’aquest any hi haurà un eclipsi de Sol que serà total a bona part d’Espanya, i fins i tot a Lleida. Amb aquest motiu es poden fer moltes activitats relacionades amb els eclipsis, prèvies i aquell mateix dia. Per exemple, aquest passat dissabte 21 de març, coincidint amb l’equinocci de primavera, Anicet Cosialls i Anna Jiménez van realitzar un taller sobre La Terra Paral·lela i l’ús del gnòmon en ple carrer Major al davant de l’IEI a Lleida.


El mateix dia de l’eclipsi és difícil que realitzeu activitats amb l’alumnat ja que esteu tots de vacances, que és el que sí que vam poder fer a l’eclipsi parcial de Sol (63,4 %) de 2015 a Lleida, ja que era dia d’estudi i va començar a les 9:30 i va acabar a les 11:27, hora local, encara que a estones va estar mig ennuvolat.

Malgrat això, vam poder gravar les imatges del Sol que recollíem amb el telescopi de l’institut, i dades ambientals amb els sensors de temperatura i de llum de l’equip Multilog que les podeu veure en el gràfic de sota de l’aplicatiu Multilab.

Projectes pel proper eclipsi
Gaia4Sustainabily, un projecte de la Universitat de Corunya (UdC), l’Institut d’Estudis Espacials de Catalunya (IEEC), l’Institut d’Estudis Espacials de Catalunya (IEEC), l’Institut de Ciències del Cosmos (ICCUB), el Planetari de Pamplona i del Parc Astronòmic del Montsec (PAM), va sorgir per proporcionar un marc per a l’avaluació de la brillantor natural del cel nocturn i per a l’avaluació precisa del nivell de contaminació lumínica de forma homogènia.
Per aconseguir-ho proposen dispositius de baix cost (maquinari i programari lliure) que s’integren a internet i permeten calcular l’excés de lluentor del cel respecte a la lluentor natural del cel, proporcionant una mesura realista de la contaminació lumínica d’una manera més comprensible i utilitzable pel públic en general que els valors habituals utilitzats per la comunitat científica.
Al dispositiu en qüestió li diuen FreeDSM (Free Dark Sky Meter), i ho han dissenyat sota la filosofia “Fes-ho tu mateix” (Do It Yourself o DIY), de manera que suposadament qualsevol ciutadà, centre educatiu o associació astronòmica pugui construir-lo amb un cost de materials baix que oscil·la entre els 20 i 30 euros.
Aquest sistema pensat per obtenir i transmetre dades relacionades amb la contaminació lumínica nocturna es pot reciclar, i així ho proposen en el projecte de ciència ciutadana Mesurament de la variació de la llum ambiental durant l’eclipsi (ECLIPSEDMS) perquè s’utilitzi als propers eclipsis solars per recollir dades de llum i de les condicions meteorològiques (temperatura i humitat).
D’una manera molt més modesta, però pot ser molt més senzilla, a no ser que podeu assistir a la seva formació i que us regalin el material per a construir el seu dispositiu FreeDSM, jo us proposo muntar un dispositiu semblant amb sensors i una placa ESP32, i l’explico a continuació.
El maquinari
El sensor de temperatura, humitat i pressió BME280
El sensor de temperatura, humitat i pressió BMP280 ja el vam utilitzar per a mesurar la pressió i per muntar una estació meteorològica ja que, a més de la pressió atmosfèrica, mesura la temperatura i la humitat. És un sensor que proporciona dades molt bones, barat (3 €) i de dimensions reduïdes, el que permet introduir-lo amb facilitat pel coll d’una botella, d’un matràs o d’un globus, per exemple.
Característiques. El sensor BME280 es pot utilitzar tant amb el protocol de comunicació I2C i amb l’SPI.

- Voltatge: 1,8 a 5 Vcc; 3,3 Vcc
- Temperatura: -40 a + 85 °C (resolució 0,01 °C, precisió +-1 °C)
- Humitat: 0-100% (resolució 0.008%, precisió +-3%)
- Pressió: 300-1100 hPa (resolució 0,18 Pa, precisió +-1 Pa)
- Direcció I2C: SDO baix 0x76, SDO alt 0x77
Disposa de sis connexions de sortida, de les que utilitzarem les quatre primeres:

- VCC/VIN: 5 Volt d’entrada
- GND: Connexió a terra
- SCL/SCK: Rellotge Sèrie
- SDA/SDI: Sortida de dades pel port sèrie
- CSB: Entrada de dades del port sèrie
- SDO: Selecció direcció I2C (si no es connecta, per defecte la direcció de l’I2C és 0x77. Si es connecta SDO a GND llavors la direcció canvia a 0x76)
Aquest sensor, com molts d’altres, arriba amb els connectors sense soldar. Els companys de tecnologia sempre disposen d’un soldador que ens podran deixar. Per soldar els connectors el més fàcil és punxar-los en una placa de proves (protoboard) i col·locar la plaqueta del sensor damunt, com l’expliquen els tècnics d’Adafruit.
Els sensors de llum BH1750 i TSL2591
El mòdul BH1750 és un sensor de llum digital del que ja vam parlar, que ens lliura valors en Lux (lumen/m²) que és una unitat de mesura estàndard per al nivell d’il·luminació (il·luminació). Té alta precisió i un rang entre 1 – 65535 lx.
Funciona entre 2,6 V i 5,5 V, i les mesures s’obtenen a través de la interfície I²C de manera que els pins es connecten

- VIN: Connexió de l’alimentació de 3,3 o 5 V
- GND: Connexió a terra (0 V)
- SCL: a SCL (A5 en Arduino UNO, 22 en esp32)
- SDA: a SDA (A4 en Arduino UNO, 21 en esp32)
- ADDR: es deixa lliure
El TSL2591 és un sensor de llum digital de molt alta sensibilitat que pot mesurar la intensitat de la llum ambiental. És un sensor que combina dos fotodíodes en un sol circuit integrat CMOS amb diferents respostes espectrals per proporcionar mesures precises i fiables en una àmplia gamma de condicions d’il·luminació.

El sensor pot detectar nivells de llum de 188 µlux a 88.000 lux (pot enfocar-se directament al Sol sense que es saturi), proporcionant mesures precises en una àmplia gamma de condicions d’il·luminació. Utilitza, com el anterior, una interfície I2C per comunicar-se fàcilment amb les plaques Arduino o ESP32.
El mòdul TSL2591 normalment té els següent pins, tal com es veu la placa de la foto:
- VIN: Connexió d’alimentació (3,3 o 5 Vcc)
- GND: Aquest pin està connectat a terra.
- 3VO: Aquesta és la sortida de 3,3 V del regulador de voltatge integrat del mòdul, pot subministrar fins a 100 mA.
- INT: Aquest pin és un pin d’interrupció opcional, que es pot utilitzar per indicar al microcontrolador quan els nivells de llum superen un cert llindar.
- SCL: a SCL (A5 en Arduino UNO, 22 en esp32)
- SDA: a SDA (A4 en Arduino UNO, 21 en esp32
Comparativa dels dos sensors de llum
Si es posen tots dos sensors sota el mateix llum el BH1750 dona una lectura un 20% – 30% més alta, i no és que un estigui “trencat”, sinó que veuen el Món de formes lleugerament diferents. En el camp dels sensors de llum (luxòmetres), mesurar la “lluminositat” és enganyós perquè el que intentem mesurar és la il·luminància, que és la quantitat de flux lluminós (lúmens) que incideix sobre una superfície per unitat d’àrea, mesurada en lux (lx = lum/m2). A diferència de la luminància (brillantor percebuda), la il·luminància mesura la llum rebuda a la superfície, no la reflectida. Aquí teniu les raons principals d’aquesta discrepància:
Resposta espectral (L’ull del sensor). El BH1750 està dissenyat per imitar la resposta de l’ull humà (corba fotòpica), però el seu filtre no és perfecte. El TSL2591, per altra banda, és molt més sofisticat: té dos díodes interns, un que mesura la llum visible + infraroja (IR) i un altre que mesura només IR.
En tenir la dada de l’IR per separat, el TSL2591 pot “restar” el soroll de la calor/infraroig per calcular els lux de forma més precisa, quedant-se només amb el que realment veuria un humà.. El BH1750 sol ser més sensible a la llum vermella i infraroja propera, cosa que infla la xifra si la font de llum té molt d’IR (com el Sol o una bombeta incandescent).
Rang Dinàmic i Guany. El TSL2591 és un sensor de “rang ultra alt” (pot mesurar des de la foscor total fins a la llum solar directa, fins a 88,000 lux). El BH1750 és més limitat (fins a 65,535 lux). El TSL2591 ajusta el guany i el temps d’integració de forma molt fina. El BH1750 té un calibratge de fàbrica més genèric que pot variar segons el lot.
El codi que he preparar permet utilitzar els dos alhora o qualsevol dels dos per separat. Tenen un preu baix i semblant (uns 3 €). Vosaltres mateixos.
L’adaptador per la targeta microSD
L’adaptador de la targeta microSD té un regulador de voltatge, el que vol dir que s’ha d’alimentar el pin Vcc amb 5V (el pin VIN o 5V del vostre ESP32). El regulador s’encarregarà de baixar-lo als 3,3 V que necessita la targeta SD.

Connexions de l’adaptador de la targeta SD al ESP32 (Pins)
- GND: a GND. Terra (ground)
- VCC: VIN/5V. Alimentació (l’adaptador la regula a 3.3V)
- MISO: GPIO 19. Master In Slave Out
- MOSI: GPIO 23. Master Out Slave In
- SCK: GPIO 18. Rellotge (Clock)
- CS: GPIO 5. Chip Select (es defineix al codi)
Les targetes microcontroladores
Ja he parlat diverses vegades de les targetes ESP32. Totes integren els diversos chips d’Espressif i, malgrat les seves diferències, totes van bé per aquest projecte. Jo, per això, normalment utilitzo la Wemos D1 R32 (o similars), amb usb micro o C, ja que té uns pins en els que és molt fàcil connectar el cables dupont. També és possible utilitzar un ESP32 “normal” i punxar-lo en una placa d’expansió (shield) de manera que queda com un D1 R32.

És possible que en connectar l’esp32 a l’ordinador el reconegui directament el sistema operatiu, però també és possible que no perquè totes les plaques que tenen un esp32 no tenen el mateix controlador usb. En aquest últim cas heu de anar a l’administrador de dispositius i mirar en els ports COM als que el sistema no ha trobat els controladors (drivers) el nom que apareix i instal·lar el controlador corresponent (CP210x USB to UART bridge o USB SERIAL CH340)
Menció a part és la targeta Arduino Nano 33 BLE Sense rev2, de la que també us he parlat, que integra en ella mateixa diversos sensors entre els quals estan els que utilitzem en aquesta entrada: llum, temperatura, humitat i pressió, i que per tant amb només aquesta plaqueta ja tindríem prou, perquè també pot comunicar-se per WiFi i Bluetooth. Ocuparia menys puesto però sortiria una mica més cara (45 €)

El muntatge
Am una mica de paciència heu de anar connectant cadascú dels sensors al la placa ESP32 segons les indicacions que he ficat a dalt al parlar de cada sensor. Per anar bé hauríeu d’utilitzar una placa de proves, com es veu a la foto de sota.


El codi dels projectes
He elaborat dos projectes, un per l’ESP32 i un altre per l’Arduino Nano 33 BLE Sense rev2. Aquí els explico una mica i d’on descarregar-los, i al final he ficat dos annexos amb la literalitat dels dos sketch.
Seguiment amb l’ESP32
He preparat l’sketch_eclipse_41.ino per a carregar a la placa ESP32. L’sketch està pensat per mesurar la pressió atmosfèrica (Pa), la temperatura (ºC) i la humitat (%) amb el sensor BMP280 i la lluminositat (lux) amb els sensors de llum BH1750 o TSL2591 (un, un altre o tots dos) cada 5 segons.
Es poden visualitzar els valors en un monitor sèrie a l’ordinador amb el propi IDE d’Arduino o en un altre com RealTerm. Les dades també es poden visualitzar al telèfon mòbil o la tauleta per connexió USB-OTG i l’aplicació Serial USB Terminal en el cas d’Android.
Per connectar un arduino o un ESP32 a un ordinador pel port USB només cal un cable USB, però si es volen connectar les targetes a un telèfon mòbil o una tauleta es necessita un cable especial OTG, que son relativament barats, però que s’han de tenir.
Am el mateix sketch també podeu veure i guardar les dades que es vagin obtenint de l’eclipsi en l’aplicació Phyphox (Android i iPhone) mitjançant BlueTooth. En aquest cas és necessari que carregueu el codi eclipse41.phyphox directament a l’aplicació Phyphox a través del QR de sota. L’he hagut de fer així per separat, i no encabint tot a l’sketch a carregar a la targeta ESP32, perquè me donava molts problemes de desconnexió del bluetooth.

Com podeu veure al codi a instal·lar a l’ESP32 s’utilitzen moltes llibreries. La majoria estan ja incloses per defecte a l’IDE d’Arduino: BLEServer.h, BLEUtils.h, BLE2902.h, Wire.h, SPI.h i SD.h. Les llibreries dels sensors que no estan incloses i que cal instal·lar són:
- Grove – Barometer Sensor BME280 de Seeed Studio
- BH1750 de Christopher Laws
- Adafruit TSL2591 Library d’Adafruit
Seguiment amb l’Arduino Nano 33 BLE Sense rev2
També he preparat un sketch (sketch_eclipse_33blesense.ino) que mesura la pressió atmosfèrica, la temperatura, i la humitat cada 5 segons per Arduino Nano 33 BLE Sense V2, que té els següents sensors integrats, però que s’han d’instal·lar les seves llibreries a l’IDE d’Arduino:
HTS221: temperatura i humitat en la Versió 1 (V1)
HS300x: temperatura i humitat en la Versió 2 (V2)
LPS22HB: pressió
APDS9960: lluminositat (ALS)
També s’ha d’instal·lar la llibreria para phyphoxBLE de RWTH Aachen University. Per defecte, en el codi està activada la llibreria HS300x. Per la Versió 1 de l’Arduino Nano 33 BLE Sense s’ha de canviar en el codi la llibreria de temperatura i humitat HS300x per la HTS221 (desmarcar una i marcar l’altra).
Com en el cas de l’ESP32, es poden visualitzar els valors en un monitor sèrie (IDE d’Arduino, RealTerm, Serial USB Terminal, etc.) i també al telèfon mòbil amb Phyphox a través de BlueTooth. En aquest últim cas, a diferència del que he preparat per a les targetes ESP32, aquí no cal instal·lar res per separat a l’aplicació sinó que es carrega l’experiment directament en Phyphox a l’afegir-lo per Bluetooth.
Recollida de dades
El dies anteriors aproximadament a la mateixa hora prevista per l’eclipsi hauríeu de provar el muntatge durant una bona estona per a comprovar que tot funciona bé. Quan al format de la SD, assegureu-vos que la targeta estigui formatada a FAT32 (no funcionarà si és exFAT o NTFS).
Dades per Port sèrie
Les dades que es recullen pel port sèrie de l’ordinador o del telèfon mòbil apareixen en el següent ordre: Temps (s) ; temperatura (ºC) ; humitat (%) ; pressió (Pa) ; il·luminació sensor BH (lux) ; il·luminació sensor TSL (lux), com es veu en les fotografes de sota.

En la foto s’aprecia com la targeta Wemos està connectada al telèfon mitjançant un cable USB (el blau) empalmat a un altre cable USB-OTG (el negre).

La separació entre variables l’he ficada amb ; (punt i coma, i no en coma) per a que després sigui fàcil substituir el punt decimal que porten els valors dels sensors (notació anglosaxona) per la coma europea quan s’importa el fitxer amb les dades a un full de càlcul per estudiar-les i graficar-les i que l’aplicatiu les interpreti com a números.
Dades per Phyphox
Quan comenci l’eclipsi connecteu la targeta a Phyphox i comenceu a gravar. A més del valors que aporten els diferents sensors podeu veure les seves gràfiques en relació al temps, com es mostra en les captures de pantalla de sota.



Escriure a la SD consumeix pics d’energia i si llavors el voltatge cau, el Bluetooth es pot desconnectar i podeu perdre dades en Phyphox (no en la SD). Assegureu-vos d’alimentar l’ESP32 amb una font estable (Powerbank que funcioni o port USB directe).
Annex 1. Sketch per ESP32
/*Sketch pensado para hacer el seguimiento de un eclipse solar.
Mide la presión atmosférica, la temperatura, y la humedad con el sensor BMP280
y la luminosidad en lux con los sensores de luz BH1750 o TSL2591 (uno, otro o los dos).
Para hacerlo con una placa con microprocesador esp32, que dispone de Bluetooth.
Se pueden visualizar los valores en un monitor sèrie en el ordenador
como es el propio del IDE de arduino o en otro como RealTerm, https://sourceforge.net/projects/realterm/
Los datos también se pueden visualizar en el teléfono móvil o la tableta
bien por connexión por USB-OTG y la aplicación Serial USB Terminal en el caso de Android
o con la aplicación Phyphox (https://phyphox.org/) a través de BT (BlueTooth) en Android y iPhone.
Las librerias de los sensores que se han de instalar son:
Grove - Barometer Sensor BME280 de Seeed Studio
BH1750 de Christopher Laws
Adafruit TSL2591 Library de Adafruit
Wire para I2C ya está incluida de serie en el IDE de Arduino, y también SPI y SD
Conexiones de los sensores: Vcc a 3,3V o 5V, GND a Gnd, SCL a SCL (22), SDA a SDA (21)
Conexiones de la targeta SD: Vcc a 5V, GND a Gnd
Los pines SPI en el ESP32 suelen ser: SCK (18), MISO (19), MOSI (23), CS (5)
*/
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <Wire.h>
#include "Seeed_BME280.h"
#include <BH1750.h>
#include <Adafruit_TSL2591.h>
#include <SPI.h>
#include <SD.h>
#define SERVICE_UUID "c0c0c0c0-c0c0-c0c0-c0c0-c0c0c0c0c0c0"
#define CHAR_UUID_DATOS "c0c0c0c1-c0c0-c0c0-c0c0-c0c0c0c0c0c1"
#define CHAR_UUID_TIEMPO "c0c0c0c2-c0c0-c0c0-c0c0-c0c0c0c0c0c2"
const int chipSelect = 5; // Pin CS típico en ESP32
File dataFile;
BLECharacteristic *pCharDatos;
BLECharacteristic *pCharTiempo;
bool deviceConnected = false;
BME280 bme;
BH1750 bh1750;
Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591);
bool hasBH1750 = false, hasTSL2591 = false;
float pressure, temperature, humidity;
float luxBH = -1;
float luxTSL = -1;
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) { deviceConnected = true; };
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
BLEDevice::startAdvertising();
}
};
void setup() {
Serial.begin(115200);
// Inicialización de Hardware I2C. Pines I2C ESP32: SDA=21, SCL=22
Wire.begin(21, 22);
bme.init();
hasBH1750 = bh1750.begin(BH1750::CONTINUOUS_HIGH_RES_MODE);
hasTSL2591 = tsl.begin();
// Inicializar Tarjeta SD
Serial.print("Iniciando SD...");
if (!SD.begin(chipSelect)) {
Serial.println("Fallo en la SD o no presente.");
} else {
Serial.println("SD lista.");
// Crear encabezado del archivo si es nuevo
File file = SD.open("/eclipse.csv", FILE_APPEND);
if (file) {
file.println("Tiempo(ms),Temp(C),Hum(%),Pres(Pa),BH1750(lx),TSL2591(lx)");
file.close();
}
}
BLEDevice::init("Eclipse_ESP32_Pro");
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID);
// Canal 1: Sensores (20 bytes)
pCharDatos = pService->createCharacteristic(CHAR_UUID_DATOS, BLECharacteristic::PROPERTY_NOTIFY);
pCharDatos->addDescriptor(new BLE2902());
// Canal 2: Tiempo (4 bytes)
pCharTiempo = pService->createCharacteristic(CHAR_UUID_TIEMPO, BLECharacteristic::PROPERTY_NOTIFY);
pCharTiempo->addDescriptor(new BLE2902());
pService->start();
BLEDevice::getAdvertising()->addServiceUUID(SERVICE_UUID);
BLEDevice::getAdvertising()->start();
}
void loop() {
if (deviceConnected) {
float sensores[5];
sensores[0] = bme.getTemperature();
sensores[1] = bme.getHumidity();
sensores[2] = bme.getPressure();
sensores[3] = hasBH1750 ? bh1750.readLightLevel() : 0.0;
if (hasTSL2591) {
uint32_t lum = tsl.getFullLuminosity();
sensores[4] = tsl.calculateLux(lum & 0xFFFF, lum >> 16);
} else {
sensores[4] = 0.0;
}
float tiempo = millis() / 1000.0;
pCharDatos->setValue((uint8_t*)sensores, 20);
pCharDatos->notify();
pCharTiempo->setValue((uint8_t*)&tiempo, 4);
pCharTiempo->notify();
}
pressure = bme.getPressure();
temperature = bme.getTemperature();
humidity = bme.getHumidity();
unsigned long segundos = millis() / 1000;
if (hasBH1750) {
luxBH = bh1750.readLightLevel();
} else {
luxBH = 0;
}
if (hasTSL2591) {
uint32_t lum = tsl.getFullLuminosity();
uint16_t ir = lum >> 16;
uint16_t full = lum & 0xFFFF;
luxTSL = tsl.calculateLux(full, ir);
} else {
luxTSL = 0;
}
// Si se quieren guardar los valores en Realterm o Serial USB Terminal para tratarlos después
Serial.print(" ; "); Serial.print(segundos);
Serial.print(" ; "); Serial.print(temperature);
Serial.print(" ; "); Serial.print(humidity);
Serial.print(" ; "); Serial.print(pressure);
Serial.print(" ; "); Serial.print(luxBH);
Serial.print(" ; "); Serial.println(luxTSL);
// Guardado en SD
File dataFile = SD.open("/eclipse.csv", FILE_APPEND);
if (dataFile) {
dataFile.print(segundos); dataFile.print(";");
dataFile.print(temperature); dataFile.print(";");
dataFile.print(humidity); dataFile.print(";");
dataFile.print(pressure); dataFile.print(";");
dataFile.print(luxBH); dataFile.print(";");
dataFile.println(luxTSL);
dataFile.close();
//Serial.println("Datos guardados en SD.");
}
delay(5000);
}
Annex 2. Sketch per Arduino Nano 33 BLE Sense rev2
/* Sketch pensado para hacer el seguimiento de un eclipse solar.
Mide la presión atmosférica, la temperatura, y la humedad.
Para Arduino Nano 33 BLE Sense V2, que tiene los sensores integrados.
Sensores integrados:
- HTS221: temperatura y humedad para la V1
- HS300x: temperatura y humedad para la V2
- LPS22HB: presión
- APDS9960: luminosidad (ALS)
En el código está activada la librería HS300x.
Para la V1 se ha de cambiar en el código la librería
de temperatura y humedad HS300x por la HTS221)
Se han de instalar todas las librerías (que son de Arduino) en el IDE de Arduino
También se ha de instalar la libreria para Phyphox:
phyphoxBLE de RWTH Aachen University
Se pueden visualizar los valores en un monitor sèrie en el ordenador
como es el propio del IDE de arduino o en otro como RealTerm, https://sourceforge.net/projects/realterm/
Los datos también se pueden visualizar en el teléfono móvil o la tableta
con la aplicación Phyphox (https://phyphox.org/) a través de BT (BlueTooth).
*/
#include <Arduino.h>
//#include <Arduino_HTS221.h> // Para Arduino Nano 33 BLE Sense V1
#include <Arduino_HS300x.h> // Para Arduino Nano 33 BLE Sense V2
#include <Arduino_LPS22HB.h>
#include <Arduino_APDS9960.h>
#include <phyphoxBle.h>
float temperature, humidity, pressure, lux;
void setup() {
Serial.begin(115200);
// Sensores integrados
//if (!HTS.begin()) Serial.println("Error HTS221"); // Para Arduino Nano 33 BLE Sense V1
if (!HS300x.begin()) Serial.println("Error HS300x"); // Para Arduino Nano 33 BLE Sense V2
if (!BARO.begin()) Serial.println("Error LPS22HB");
if (!APDS.begin()) Serial.println("Error APDS9960");
// Activar solo el sensor de luz del APDS9960
APDS.setGestureSensitivity(0);
// BLE Phyphox
PhyphoxBLE::start("Eclipse_Nano33");
PhyphoxBleExperiment exp;
exp.setTitle("Seguimiento Eclipse Solar");
exp.setCategory("Arduino Nano 33 BLE Sense");
exp.setDescription("Medición de luminosidad, temperatura, humedad y presión.");
// -------------------------
// VISTA PRINCIPAL
// -------------------------
PhyphoxBleExperiment::View viewMain;
viewMain.setLabel("Valores");
PhyphoxBleExperiment::Value vTemp; vTemp.setLabel("Temperatura C"); vTemp.setUnit("C"); vTemp.setChannel(1);
PhyphoxBleExperiment::Value vHum; vHum.setLabel("Humedad %"); vHum.setUnit("%"); vHum.setChannel(2);
PhyphoxBleExperiment::Value vPres; vPres.setLabel("Presión hPa"); vPres.setUnit("hPa"); vPres.setChannel(3);
PhyphoxBleExperiment::Value vLux; vLux.setLabel("Luminosidad"); vLux.setUnit("lx"); vLux.setChannel(4);
viewMain.addElement(vTemp);
viewMain.addElement(vHum);
viewMain.addElement(vPres);
viewMain.addElement(vLux);
// -------------------------
// VISTA: LUZ + TEMPERATURA
// -------------------------
PhyphoxBleExperiment::View viewEclipse;
viewEclipse.setLabel("Luminosidad y Temperatura");
PhyphoxBleExperiment::Graph gLux;
gLux.setLabel("Luz");
gLux.setUnitX("s");
gLux.setUnitY("lx");
gLux.setLabelX("Tiempo");
gLux.setLabelY("Luminosidad");
gLux.setChannel(0, 4);
PhyphoxBleExperiment::Graph gTemp;
gTemp.setLabel("Temperatura");
gTemp.setUnitX("s");
gTemp.setUnitY("C");
gTemp.setLabelX("Tiempo");
gTemp.setLabelY("Temperatura");
gTemp.setChannel(0, 1);
viewEclipse.addElement(gLux);
viewEclipse.addElement(gTemp);
// -------------------------
// VISTA: HUMEDAD + PRESIÓN
// -------------------------
PhyphoxBleExperiment::View viewHumPres;
viewHumPres.setLabel("Humedad y Presión");
PhyphoxBleExperiment::Graph gHum;
gHum.setLabel("Humedad");
gHum.setUnitX("s");
gHum.setUnitY("%");
gHum.setLabelX("Tiempo");
gHum.setLabelY("Humedad");
gHum.setChannel(0, 2);
PhyphoxBleExperiment::Graph gPres;
gPres.setLabel("Presión");
gPres.setUnitX("s");
gPres.setUnitY("hPa");
gPres.setLabelX("Tiempo");
gPres.setLabelY("Presión");
gPres.setChannel(0, 3);
viewHumPres.addElement(gHum);
viewHumPres.addElement(gPres);
// Añadir vistas
exp.addView(viewMain);
exp.addView(viewEclipse);
exp.addView(viewHumPres);
PhyphoxBLE::addExperiment(exp);
}
void loop() {
//temperature = HTS.readTemperature(); // Para Arduino Nano 33 BLE Sense V1
//humidity = HTS.readHumidity(); // Para Arduino Nano 33 BLE Sense V1
float temperature = HS300x.readTemperature(); // Para Arduino Nano 33 BLE Sense V2
float humidity = HS300x.readHumidity(); // Para Arduino Nano 33 BLE Sense V2
pressure = BARO.readPressure(); // hPa
int r, g, b;
if (APDS.colorAvailable()) {
APDS.readColor(r, g, b);
lux = (0.2126*r + 0.7152*g + 0.0722*b); // Aproximación a luminosidad
}
Serial.print(" ; "); Serial.print(temperature);
Serial.print(" ; "); Serial.print(humidity);
Serial.print(" ; "); Serial.print(pressure);
Serial.print(" ; "); Serial.println(lux);
PhyphoxBLE::write(temperature, humidity, pressure, lux);
delay(5000);
}
