eDOT - op Arduino gebaseerde precisieklok en weerstation
Componenten en benodigdheden
| × | 1 | ||||
| × | 6 | ||||
| × | 1 | ||||
| × | 6 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Benodigde gereedschappen en machines
|
Apps en online services
|
Over dit project
eDOT
is een op Arduino gebaseerd precisieklok- en weerstation met ingebouwde IR-ontvanger op afstand en automatische helderheidsaanpassing.
Het apparaat is zo ontworpen dat het eenvoudig kan worden uitgebreid met extra hardware zoals een wifi-module of andere.
Dankzij het zes 8x8 dot matrix LED-display kan het worden gebruikt om allerlei soorten informatie weer te geven die afkomstig zijn van de interne sensor, aangepaste scrollberichten of draadloos van internet (RSS, enz.)
Het heeft een zeer laag stroomverbruik, een eenvoudig en elegant ontwerp dat een glazen voorkant en 3D-geprinte onderdelen voor het lichaam combineert.
Het project is momenteel in ontwikkeling en ik zal worden bijgewerkt.
Download 3D-onderdelen op Thingiverse
En zie ook mijn Youtube kanaal voor meer projecten:
https://www.youtube.com/channel/UCbIomyFKzBiLHqEb2xv9GHQ
BOM
- N.1 x 3D-geprinte linkerhelft
- N.1 x 3D-geprinte rechterhelft
- N.1 x 3D geprint linker omslag
- N.1 x 3D geprint rechter omslag
- N.2 x 3D-geprinte voet
- N.12 x 3D-geprinte weergave-ondersteuning
- N.1 x Gepolijst glas 240x75x5 (mm)
- N.1 x Oranje filter
- N.6 x Adafruit 8x8 dot matrix display type Luckylight M1603095 (wit)
- N.6 x MAX7219 controllerkaart
- N.1 x USB-breakoutboard
- N.1 x BME280 breakout-bord
- N.1 x DS3231-chip
- N.1 x IR-ontvanger type IRM-56384
- N.1 x fotoresistor type LDR-07
- N.1 x ATMEGA328PU (aangepast Arduino-bord)
- N.6 x OMRON 12 mm tactiele knop
eDOTcore-printplaat
Eindelijk heb ik de allereerste prototypes van de besturingskaart voor eDOT.
GA NAAR eDOTcore-projectpagina
Code
- eDOT:Veelzijdig nauwkeurig weerstation en klok
eDOT:Veelzijdig precisieweerstation en klokArduino
// eDOT:Veelzijdig nauwkeurig weerstation en klok//HISTORY// 11/12/2105 Toegevoegde meetkalibratiecoëfficiënten// 09/06/2016 Automatische helderheid van het scherm toegevoegd// 09/06/2016 Taakplanner toegevoegd// 07/08/2016 eDOT splashscreen toegevoegd#include#include #include #include #include #include #include #include "RTClib.h"#include Adafruit_BME280 bme; // I2CRTC_DS3231 rtc;int pinCS =10; // Bevestig CS aan deze pin, DIN aan MOSI en CLK aan SCK (zie http://arduino.cc/en/Reference/SPI) int numberOfHorizontalDisplays =7;int numberOfVerticalDisplays =1;Max72xxPanel matrix =Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);#definieer TEMPERATUUR 0#definieer VOCHTIGHEID 1#definieer DRUK 2#definieer TIJD 3#definieer DAG 4#definieer DATUM 5float temp;float tempavg;char tempf[8];float hum;float humavg;char humf[8]; float press;float pressavg;char pressf[8];int screen =0; // initieel scherm lang previousLEDMillis =0; // voor LED-display update lang LEDInterval =5000; // vertraging tussen schermen int screenMax =5; // maximum aantal screenbool screenChanged =true; // schermstatusfloat lightsens;float screenBrt =0;float lightsensavg;Average avetemp(60); //Gemiddelde voor temperatuur (80 monsters)Gemiddelde avehum(60); //Gemiddeld voor vochtigheid (80 monsters)Gemiddeld avepress(60); //Gemiddelde voor druk (80 monsters)Gemiddelde avelightsens(40); //Gemiddelde voor druk (80 monsters)//Kalibratiecoëfficiëntenfloat 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;//Helderheidssensor correctionfloat brt_o =-4;float brt_s =1.35;Schedular Task1;Schedular Task2;void setup() { Task1.start(); Taak2.start(); Draad.begin(); // Start I2C bme.begin (0x76); matrix.setIntensity(screenBrt); // Gebruik een waarde tussen 0 en 15 voor helderheid// Pas aan naar eigen behoefte// matrix.setPosition(0, 0, 0); // De eerste weergave is op <0, 0>// matrix.setPosition (1, 1, 0); // Het tweede scherm is op <1, 0> matrix.setRotation (0, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (1, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (2, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (3, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (4, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (5, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (6, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (7, 1); // Pas de weergaveoriëntatie aan/* matrix.setRotation (8, 1); // Pas de weergaveoriëntatie aan matrix.setRotation (9, 1); // Pas de weergaveoriëntatie aan */ rtc.begin();// matrix.setRotation (3, 2); // Hetzelfde geldt voor de laatste weergave// 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.schrijven(); matrix.setCursor(12,0); matrix.print("eDOT"); for(screenBrt =0; screenBrt <=15; screenBrt++){delay(25); matrix.setIntensity(screenBrt); // Gebruik een waarde tussen 0 en 15 voor helderheid matrix.write(); }vertraging(250); for(screenBrt =15; screenBrt>=0; screenBrt--){delay(50); matrix.setIntensity(screenBrt); // Gebruik een waarde tussen 0 en 15 voor helderheid matrix.write(); }vertraging(500); matrix.fillScreen(0); matrix.write();delay(1000);}void loop() {Taak1.check(acq1500); Task2.check(acq2,20);} void acq1(){// DATA ACQUISITIE EN GEMIDDELDE temp =bme.readTemperature(); avetemp.push(temp); tempavg =avetemp.mean(); brom =bme.readHumidity(); avehum.push(hum); humavg =avehum.mean(); druk =bme.readPressure(); avepress.push(druk); pressavg =avepress.mean(); DateTime nu =rtc.now(); outSec =nu.seconde(); outMin =nu.minuut(); outHour =nu.uur(); outday =nu.dag(); outmonth =nu.maand(); buitenjaar =nu.jaar() - 2000; dow =nu.dagvandeweek(); } void acq2(){ lightsens =analogRead(A3); avelightsens.push(lightsens); lightsensavg =avelightsens.mean(); screenBrt =constrain(((lightsensavg/1023 * 15) * brt_s + brt_o), 0, 15); matrix.setIntensity(screenBrt); // DATA LINEARISATIE temp_lin =tempavg * temp_s + temp_o; hum_lin =humavg * hum_s + hum_o; press_lin =pressavg * press_s + press_o; unsigned long currentLEDMillis =millis(); //Serial.println(screenBrt); if (currentLEDMillis - previousLEDMillis> LEDInterval) // sla de laatste keer dat u de weergave hebt gewijzigd op { previousLEDMillis =currentLEDMillis; scherm++; if (scherm> schermMax) scherm =0; // reset naar het beginscherm zodra de cyclus is voltooid screenChanged =true; }// if (screenChanged) // update meting bij schermverandering// {// screenChanged =false; // reset voor volgende iteratieswitch (scherm) {case TEMPERATURE:dtostrf (temp_lin, 4, 2, tempf); // formaat tot vijf cijfers met twee decimalen matrix.setCursor (6,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(tempf); // print huidige temperatuur matrix.drawRect(37,0,2,2,255); // teken cijfersymbool matrix.setCursor(40,0); matrix.print("C"); matrix.schrijven(); // schrijf huidige gegevens om matrix.fillScreen(0) weer te geven; // clear displaybreak; case VOCHTIGHEID:dtostrf (hum_lin, 4, 2, humf); // formaat tot vijf cijfers met twee decimalen matrix.setCursor (6,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(humf); // print huidige temperatuur matrix.setCursor (37,0); matrix.print("%"); matrix.schrijven(); // schrijf huidige gegevens om matrix.fillScreen(0) weer te geven; // clear displaybreak;case DRUK:dtostrf(press_lin,6, 0, pressf); // formaat tot vijf cijfers met twee decimalen matrix.setCursor (0,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(pressf); // print huidige temperatuur matrix.setCursor (37,0); matrix.print("Pa"); matrix.schrijven(); // schrijf huidige gegevens om matrix.fillScreen(0) weer te geven; // clear displaybreak;case TIME:// dtostrf(press_lin,6, 0, pressf); // formaat tot vijf cijfers met twee decimalen matrix.setCursor (0,0); matrix.setTextSize(1); matrix.setTextColor(255); if (outHour <10){ matrix.print("0"); } matrix.print(outHour,0); // print huidige uren matrix.print(":"); if (outMin <10){ matrix.print("0"); } matrix.print(outMin,0); // print huidige minuten matrix.print(":"); if (outSec <10){ matrix.print("0"); } matrix.print(outSec,0); // print huidige seconden matrix.write(); // schrijf huidige gegevens om matrix.fillScreen(0) weer te geven; // clear displaybreak;case DATE:// dtostrf(press_lin,6, 0, pressf); // formaat tot vijf cijfers met twee decimalen matrix.setCursor (0,0); matrix.setTextSize(1); matrix.setTextColor(255); if (outday <10){ matrix.print("0"); } matrix.print(outday,0); // print huidige uren matrix.print("/"); if (buitenmaand <10){ matrix.print("0"); } matrix.print(outmonth,0); // print huidige minuten matrix.print("/"); matrix.print(buitenjaar,0); // print huidige seconden matrix.write(); // schrijf huidige gegevens om matrix.fillScreen(0) weer te geven; // clear displaybreak;case DAY:// dtostrf(press_lin,6, 0, pressf); // formaat tot vijf cijfers met twee decimalen matrix.setCursor (15,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(daysOfTheWeek[dow]); matrix.schrijven(); // schrijf huidige gegevens om matrix.fillScreen(0) weer te geven; // duidelijke displaybreak; } }
Productieproces
- Weerstation gebaseerd op Raspberry Pi
- Raspberry Pi 2 weerstation
- Weerstation V 2.0
- Arduino pov vision-klok
- Hoofdklok
- Arduino Temp. Monitor en realtimeklok met 3.2-weergave
- $10 draagbaar Arduino-weerstation (AWS)
- Arduino en OLED-gebaseerde mobiele automaten
- ThingSpeak Arduino-weerstation
- Aanwezigheidssysteem op basis van Arduino en Google Spreadsheet
- Een valdetectiesysteem op basis van Arduino, Windows en Azure