eDOT - Reloj de precisión y estación meteorológica basados en Arduino
Componentes y suministros
| × | 1 | ||||
| × | 6 | ||||
| × | 1 | ||||
| × | 6 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
eDOT
es un reloj de precisión basado en Arduino y una estación meteorológica con receptor remoto IR incorporado y ajuste automático de brillo.
El dispositivo ha sido diseñado para expandirse fácilmente con hardware adicional como módulo WIFI u otro.
Gracias a su pantalla LED de matriz de puntos de seis 8x8, se puede usar para mostrar muchos tipos de información proveniente del sensor interno, mensajes de desplazamiento personalizados o inalámbricos de Internet (RSS, etc.)
Tiene un consumo de energía muy bajo, un diseño simple y elegante que combina la cara frontal de vidrio y partes impresas en 3D para el cuerpo.
El proyecto se encuentra actualmente en desarrollo y me actualizarán.
Descarga piezas 3D en Thingiverse
Y vea también mi canal de Youtube para más proyectos:
https://www.youtube.com/channel/UCbIomyFKzBiLHqEb2xv9GHQ
B.O.M.
- N.1 x medio cuerpo izquierdo impreso en 3D
- N.1 x medio cuerpo derecho impreso en 3D
- N.1 x cubierta izquierda impresa en 3D
- N.1 x cubierta derecha impresa en 3D
- N.2 x pie impreso en 3D
- N.12 x soporte de pantalla impresa en 3D
- N.1 x Vidrio bruñido 240x75x5 (mm)
- N.1 x filtro naranja
- N.6 x Adafruit 8x8 tipo de pantalla de matriz de puntos Luckylight M1603095 (blanco)
- Placa controladora N.6 x MAX7219
- N.1 x placa de conexión USB
- N.1 x placa de conexión BME280
- N.1 x chip DS3231
- N.1 x receptor de infrarrojos tipo IRM-56384
- N.1 x fotorresistor tipo LDR-07
- N.1 x ATMEGA328PU (placa personalizada Arduino)
- Botón táctil N.6 x OMRON de 12 mm
PCB eDOTcore
Finalmente obtuve los primeros prototipos de la placa de control para eDOT.
IR A la página del proyecto eDOTcore
Código
- eDOT:reloj y estación meteorológica de precisión versátil
eDOT:estación meteorológica de precisión versátil y reloj Arduino
// eDOT:reloj y estación meteorológica de precisión versátil // HISTORIA // 12/11/2105 Coeficientes de calibración de medición agregados // 06/09/2016 Brillo de pantalla automático agregado // 06/09/2016 Programador de tareas agregado // 08/07/2016 Se agregó la pantalla de presentación del eDOT # incluye#include #include #include #include #include #include #include "RTClib.h" #include Adafruit_BME280 bme; // I2CRTC_DS3231 rtc; int pinCS =10; // Conecte CS a este pin, DIN a MOSI y CLK a SCK (cf http://arduino.cc/en/Reference/SPI) int numberOfHorizontalDisplays =7; int numberOfVerticalDisplays =1; Max72xxPanel matrix =Max72xxPanel (pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); # definir TEMPERATURA 0 # definir HUMEDAD 1 # definir PRESIÓN 2 # definir HORA 3 # definir DÍA 4 # definir FECHA 5float temp; float tempavg; char tempf [8]; float hum; float humavg; char humf [8]; flotar presionar; flotar pressavg; char presionarf [8]; int screen =0; // pantalla inicial larga anteriorLEDMillis =0; // para la actualización de la pantalla LED LEDInterval =5000; // retraso entre pantallas int screenMax =5; // número máximo de screenbool screenChanged =true; // estado de la pantallafloat lightsens; float screenBrt =0; float lightsensavg; Average avetemp (60); // Promedio de temperatura (80 muestras) Promedio avehum (60); // Promedio de humedad (80 muestras) Promedio avepress (60); // Promedio de presión (80 muestras) Promedio avelightsens (40); // Promedio de presión (80 muestras) // Coeficientes de calibración flotador temp_o =-1.70; float temp_s =1.0; float temp_lin; float hum_o =2.45; float hum_s =1.0; float hum_lin; float press_o =0.0; float press_s =1.0; float press_lin; // Corrección del sensor de brillofloat brt_o =-4; float brt_s =1.35; Schedular Task1; Schedular Task2; void setup () {Task1.start (); Task2.start (); Wire.begin (); // Iniciar I2C bme.begin (0x76); matrix.setIntensity (screenBrt); // Usa un valor entre 0 y 15 para el brillo // Ajústalo a tus propias necesidades // matrix.setPosition (0, 0, 0); // La primera pantalla está en <0, 0> // matrix.setPosition (1, 1, 0); // La segunda pantalla está en <1, 0> matrix.setRotation (0, 1); // Ajustar la orientación de la pantalla matrix.setRotation (1, 1); // Ajustar la orientación de la pantalla matrix.setRotation (2, 1); // Ajustar la orientación de la pantalla matrix.setRotation (3, 1); // Ajustar la orientación de la pantalla matrix.setRotation (4, 1); // Ajustar la orientación de la pantalla matrix.setRotation (5, 1); // Ajustar la orientación de la pantalla matrix.setRotation (6, 1); // Ajustar la orientación de la pantalla matrix.setRotation (7, 1); // Ajustar la orientación de la pantalla / * matrix.setRotation (8, 1); // Ajustar la orientación de la pantalla matrix.setRotation (9, 1); // Ajustar la orientación de la pantalla * / rtc.begin (); // matrix.setRotation (3, 2); // Lo mismo se mantiene para la última pantalla // rtc.adjust (DateTime (F (__ DATE__), F (__ TIME __))); // rtc.adjust (DateTime (2016, 02, 28, 16, 44, 0)); //Serial.begin(9600);//eDOT SPLASHSCREEN matrix.fillScreen (0); matrix.write (); matrix.setCursor (12,0); matrix.print ("eDOT"); para (screenBrt =0; screenBrt <=15; screenBrt ++) {delay (25); matrix.setIntensity (screenBrt); // Usa un valor entre 0 y 15 para el brillo matrix.write (); } retraso (250); para (screenBrt =15; screenBrt> =0; screenBrt -) {retardo (50); matrix.setIntensity (screenBrt); // Usa un valor entre 0 y 15 para el brillo matrix.write (); } retraso (500); matrix.fillScreen (0); matrix.write (); delay (1000);} void loop () {Task1.check (acq1,500); Task2.check (acq2,20);} void acq1 () {// ADQUISICIÓN Y PROMEDIO DE DATOS temp =bme.readTemperature (); avetemp.push (temp); tempavg =avetemp.mean (); hum =bme.readHumidity (); avehum.push (zumbido); humavg =avehum.mean (); presione =bme.readPressure (); avepress.push (presionar); pressavg =avepress.mean (); DateTime ahora =rtc.now (); outSec =ahora.segundo (); outMin =ahora.minuto (); outHour =ahora.hora (); outday =ahora.día (); mes de salida =ahora. mes (); outyear =now.year () - 2000; dow =now.dayOfTheWeek (); } void acq2 () {lightsens =analogRead (A3); avelightsens.push (lightsens); lightsensavg =avelightsens.mean (); screenBrt =restringir (((lightsensavg / 1023 * 15) * brt_s + brt_o), 0, 15); matrix.setIntensity (screenBrt); // LINEALIZACIÓN DE DATOS temp_lin =tempavg * temp_s + temp_o; hum_lin =humavg * hum_s + hum_o; press_lin =pressavg * press_s + press_o; currentLEDMillis largo sin firmar =millis (); //Serial.println(screenBrt); if (currentLEDMillis - previousLEDMillis> LEDInterval) // guarda la última vez que cambiaste la pantalla {previousLEDMillis =currentLEDMillis; pantalla ++; if (pantalla> screenMax) pantalla =0; // restablecer a la pantalla inicial una vez que se completa el ciclo screenChanged =true; } // if (screenChanged) // actualiza la medición al cambiar de pantalla // {// screenChanged =false; // reiniciar para la próxima iteración switch (pantalla) {case TEMPERATURE:dtostrf (temp_lin, 4, 2, tempf); // formato a cinco dígitos con dos decimales matrix.setCursor (6,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (tempf); // imprime la matriz de temperatura actual.drawRect (37,0,2,2,255); // dibuja el símbolo de calificación matrix.setCursor (40,0); matrix.print ("C"); matrix.write (); // escribe los datos actuales para mostrar matrix.fillScreen (0); // borrar displaybreak; case HUMEDAD:dtostrf (hum_lin, 4, 2, humf); // formato a cinco dígitos con dos decimales matrix.setCursor (6,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (humf); // imprime la matriz de temperatura actual.setCursor (37,0); matrix.print ("%"); matrix.write (); // escribe los datos actuales para mostrar matrix.fillScreen (0); // borrar displaybreak; case PRESSURE:dtostrf (press_lin, 6, 0, pressf); // formato a cinco dígitos con dos decimales matrix.setCursor (0,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (pressf); // imprime la matriz de temperatura actual.setCursor (37,0); matrix.print ("Pa"); matrix.write (); // escribe los datos actuales para mostrar matrix.fillScreen (0); // borrar displaybreak; case TIME:// dtostrf (press_lin, 6, 0, pressf); // formato a cinco dígitos con dos decimales matrix.setCursor (0,0); matrix.setTextSize (1); matrix.setTextColor (255); if (outHour <10) {matrix.print ("0"); } matrix.print (outHour, 0); // imprime la matriz de horas actuales.print (":"); if (outMin <10) {matriz.impresión ("0"); } matrix.print (outMin, 0); // imprime la matriz de minutos actual.print (":"); if (outSec <10) {matrix.print ("0"); } matrix.print (outSec, 0); // imprime los segundos actuales matrix.write (); // escribe los datos actuales para mostrar matrix.fillScreen (0); // borrar displaybreak; case DATE:// dtostrf (press_lin, 6, 0, pressf); // formato a cinco dígitos con dos decimales matrix.setCursor (0,0); matrix.setTextSize (1); matrix.setTextColor (255); if (outday <10) {matrix.print ("0"); } matrix.print (outday, 0); // imprime la matriz de horas actuales.print ("/"); if (mes anterior <10) {matriz.impresión ("0"); } matriz.impresión (mes de salida, 0); // imprime los minutos actuales matrix.print ("/"); matrix.print (año exterior, 0); // imprime los segundos actuales matrix.write (); // escribe los datos actuales para mostrar matrix.fillScreen (0); // borrar displaybreak; case DAY:// dtostrf (press_lin, 6, 0, pressf); // formato a cinco dígitos con dos decimales matrix.setCursor (15,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (daysOfTheWeek [dow]); matrix.write (); // escribe los datos actuales para mostrar matrix.fillScreen (0); // borrar displaybreak; }}
Proceso de manufactura
- Estación meteorológica basada en Raspberry Pi
- Estación meteorológica Raspberry Pi 2
- Weather Station V 2.0
- Reloj de visión pov de Arduino
- Reloj maestro
- Arduino Temp. Monitor y reloj en tiempo real con pantalla 3.2
- $ 10 Estación meteorológica portátil Arduino (AWS)
- Autómatas celulares basados en Arduino y OLED
- Estación meteorológica ThingSpeak Arduino
- Sistema de asistencia basado en Arduino y hoja de cálculo de Google
- Un sistema de detección de caídas basado en Arduino, Windows y Azure