Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

eDOT : Horloge Arduino précise et station météo avec télécommande IR intégrée

Composants et fournitures

Composant Quantité
Microchip ATMEGA 328P-PU 1
MAXIM MAX7219 6
BOSCH BME280 (carte breakout GY-BMEP) 1
Afficheur LED matrice 8x8 Adafruit Luckylight M1603095 6
DS3231 (horloge temps réel RTC) 1
Arduino Nano R3 1
Arduino UNO 1
eDOTcore (carte de contrôle personnalisée) 1

Outils et machines nécessaires

Applications et services en ligne

À propos de ce projet

eDOT

eDOT est une horloge de précision et une station météo basées sur Arduino, avec récepteur IR intégré et réglage automatique de la luminosité.

Téléchargez les pièces 3D sur Thingiverse.

eDOT : Horloge Arduino précise et station météo avec télécommande IR intégrée
eDOT : Horloge Arduino précise et station météo avec télécommande IR intégrée

Voir aussi ma chaîne YouTube pour d'autres projets : youtube.com/channel/UCbIomyFKzBiLHqEb2xv9GHQ

Nomenclature (B.O.M.)

Carte PCB eDOTcore

J'ai enfin reçu les premiers prototypes de la carte de contrôle pour eDOT.

Aller à la page du projet eDOTcore

eDOT : Horloge Arduino précise et station météo avec télécommande IR intégrée

Code

eDOT : Station météo polyvalente et horloge de précision Arduino
// eDOT: Versatile precision weather station and clock
// HISTORIQUE
// 11/12/2105 Ajout coefficients d'étalonnage
// 09/06/2016 Luminosité automatique
// 09/06/2016 Ordonnanceur de tâches
// 07/08/2016 Écran de démarrage eDOT

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <Average.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "RTClib.h"
#include <EasyScheduler.h>

Adafruit_BME280 bme; // I2C
RTC_DS3231 rtc;

int pinCS = 10; // CS sur cette broche, DIN sur MOSI, CLK sur SCK (cf SPI)
int numberOfHorizontalDisplays = 7;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

#define TEMPERATURE 0
#define HUMIDITY 1
#define PRESSURE 2
#define TIME 3
#define DAY 4
#define DATE 5

float temp, tempavg; char tempf[8];
float hum, humavg; char humf[8];
float press, pressavg; char pressf[8];
int screen = 0;
long previousLEDMillis = 0;
long LEDInterval = 5000;
int screenMax = 5;
bool screenChanged = true;
float lightsens, screenBrt = 0, lightsensavg;

Average<float> avetemp(60);
Average<float> avehum(60);
Average<float> avepress(60);
Average<float> avelightsens(40);

// Coefficients d'étalonnage
float temp_o = -1.70, temp_s = 1.0, temp_lin;
float hum_o = 2.45, hum_s = 1.0, hum_lin;
float press_o = 0.0, press_s = 1.0, press_lin;
float brt_o = -4, brt_s = 1.35;

Schedular Task1;
Schedular Task2;

void setup() {
  Task1.start(); Task2.start();
  Wire.begin();
  bme.begin(0x76);
  matrix.setIntensity(screenBrt); // 0-15
  // Orientation des 8 afficheurs (0 à 7)
  for (int i = 0; i < 8; i++) matrix.setRotation(i, 1);
  rtc.begin();
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Décommenter pour régler l'heure

  // Écran de démarrage eDOT
  matrix.fillScreen(0); matrix.write();
  matrix.setCursor(12,0); matrix.print("eDOT");
  for(screenBrt = 0; screenBrt <= 15; screenBrt++) {
    delay(25); matrix.setIntensity(screenBrt); matrix.write();
  }
  delay(250);
  for(screenBrt = 15; screenBrt >= 0; screenBrt--) {
    delay(50); matrix.setIntensity(screenBrt); matrix.write();
  }
  delay(500);
  matrix.fillScreen(0); matrix.write();
  delay(1000);
}

void loop() {
  Task1.check(acq1, 500);
  Task2.check(acq2, 20);
}

void acq1() {
  // ACQUISITION ET MOYENNAGE
  temp = bme.readTemperature(); avetemp.push(temp); tempavg = avetemp.mean();
  hum = bme.readHumidity(); avehum.push(hum); humavg = avehum.mean();
  press = bme.readPressure(); avepress.push(press); pressavg = avepress.mean();
  DateTime now = rtc.now();
  outSec = now.second(); outMin = now.minute(); outHour = now.hour();
  outday = now.day(); outmonth = now.month(); outyear = now.year() - 2000;
  dow = now.dayOfTheWeek();
}

void acq2() {
  lightsens = analogRead(A3);
  avelightsens.push(lightsens);
  lightsensavg = avelightsens.mean();
  screenBrt = constrain(((lightsensavg / 1023.0 * 15) * brt_s + brt_o), 0, 15);
  matrix.setIntensity(screenBrt);

  // LINÉARISATION DES DONNÉES
  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();
  if (currentLEDMillis - previousLEDMillis > LEDInterval) {
    previousLEDMillis = currentLEDMillis;
    screen++;
    if (screen > screenMax) screen = 0;
    screenChanged = true;
  }

  // if (screenChanged) { screenChanged = false; ... }
  switch(screen) {
    case TEMPERATURE:
      dtostrf(temp_lin, 4, 2, tempf);
      matrix.setCursor(6,0); matrix.setTextSize(1); matrix.setTextColor(255);
      matrix.print(tempf); matrix.drawRect(37,0,2,2,255); matrix.setCursor(40,0); matrix.print("C");
      matrix.write(); matrix.fillScreen(0);
      break;
    case HUMIDITY:
      dtostrf(hum_lin, 4, 2, humf);
      matrix.setCursor(6,0); matrix.setTextSize(1); matrix.setTextColor(255);
      matrix.print(humf); matrix.setCursor(37,0); matrix.print("%");
      matrix.write(); matrix.fillScreen(0);
      break;
    case PRESSURE:
      dtostrf(press_lin, 6, 0, pressf);
      matrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255);
      matrix.print(pressf); matrix.setCursor(37,0); matrix.print("Pa");
      matrix.write(); matrix.fillScreen(0);
      break;
    case TIME:
      matrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255);
      if (outHour < 10) matrix.print("0");
      matrix.print(outHour); matrix.print(":");
      if (outMin < 10) matrix.print("0");
      matrix.print(outMin); matrix.print(":");
      if (outSec < 10) matrix.print("0");
      matrix.print(outSec);
      matrix.write(); matrix.fillScreen(0);
      break;
    case DATE:
      matrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255);
      if (outday < 10) matrix.print("0");
      matrix.print(outday); matrix.print("/");
      if (outmonth < 10) matrix.print("0");
      matrix.print(outmonth); matrix.print("/");
      matrix.print(outyear);
      matrix.write(); matrix.fillScreen(0);
      break;
    case DAY:
      matrix.setCursor(15,0); matrix.setTextSize(1); matrix.setTextColor(255);
      matrix.print(daysOfTheWeek[dow]);
      matrix.write(); matrix.fillScreen(0);
      break;
  }
}

Processus de fabrication

  1. Station météo solaire DIY avec Raspberry Pi
  2. Construction d'une station météo extérieure avec Raspberry Pi 2 et ADS‑WS1
  3. Station météo avancée v2.0 : Surveillance en temps réel de température, pression, humidité et altitude
  4. Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
  5. Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
  6. Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
  7. Station Météo Arduino Portable à 10$ – Nano, DHT22, BMP180 et LCD
  8. Automates Cellulaires Temps Réel sur Arduino avec Écran OLED 128x64
  9. Station météo IoT temps réel – Arduino, ESP8266, DHT11 & ThingSpeak