Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

eDOT - op Arduino gebaseerde precisieklok en weerstation

Componenten en benodigdheden

Microchip-technologie ATMEGA 328P-PU
× 1
MAXIM MAX7219
× 6
BOSCH BME280 - GY-BMEP breakout-bord
× 1
Adafruit Luckylight 8x8 dot matrix LED-display - M1603095
× 6
DS3231
RTC KLOK
× 1
Arduino Nano R3
× 1
Arduino UNO
× 1
eDOTcore
× 1

Benodigde gereedschappen en machines

Flashforge Dreamer

Apps en online services

Arduino IDE

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

  1. Weerstation gebaseerd op Raspberry Pi
  2. Raspberry Pi 2 weerstation
  3. Weerstation V 2.0
  4. Arduino pov vision-klok
  5. Hoofdklok
  6. Arduino Temp. Monitor en realtimeklok met 3.2-weergave
  7. $10 draagbaar Arduino-weerstation (AWS)
  8. Arduino en OLED-gebaseerde mobiele automaten
  9. ThingSpeak Arduino-weerstation
  10. Aanwezigheidssysteem op basis van Arduino en Google Spreadsheet
  11. Een valdetectiesysteem op basis van Arduino, Windows en Azure