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

Construire une Station Météo Intelligente avec Arduino UNO et Intégration AWS

Composants et fournitures

Composant Description Quantité
Arduino UNO Microcontrôleur principal 1
Câble USB-A vers Micro-USB Programmation/alimentation 1
Plaque d'essai (breadboard) générique Montage 1
Fils de liaison (jumper wires) génériques Connexions 1
Plexiglas 4 mm Boîtier découpé au laser 1
Résistance 221 Ω Rétroéclairage LCD 1
Adafruit LCD Standard 16x2 Blanc sur Bleu Affichage (interface I2C) 1
Module RTC DS1307 (I²C) Horloge temps réel 1
Photorésistance (LDR) Mesure luminosité 1
Capteur DHT11 Température & Humidité (4 broches) Température et humidité air 1
Capteur de température LM35 Température de précision 1
Récepteur IR générique Télécommande infrarouge 1
Capteur de niveau d'eau Niveau eau/neige 1
Kit RFID Sunfounder Starter (Non utilisé dans le code final) 1

Outils nécessaires

À propos du projet

AWS (Arduino Weather Station) fournit des données environnementales précises en continu. Basée sur un microcontrôleur Arduino, elle intègre une suite complète de capteurs pour l'analyse de l'environnement.

Objectif

Détecter une série de données via les capteurs et les présenter à l'utilisateur via un écran LCD. La compacité permet de loger le tout dans un petit boîtier découpé au laser.

Capteurs utilisés

Images des différents capteurs montés sur la plaque d'essai.

Capteur de niveau d'eau et de neige

Indique le niveau d'eau dans un réservoir, évite les débordements, permet de connaître le niveau à tout moment.

Capteur DHT11 Humidité et Température

Capteur numérique calibré, sortie signal numérique, haute fiabilité, excellente stabilité long terme, réponse rapide, anti-interférences, faible coût.

Photorésistance (LDR)

Résistance dépendante de la lumière. Résistance très élevée dans l'obscurité, chute drastique sous l'éclairage (quelques ohms selon l'intensité). Utilisée pour mesurer l'intensité lumineuse ou présence/absence de lumière.

Affichage LCD I2C 1602

Bus série I2C haute performance (deux lignes bidirectionnelles SDA/SCL avec résistances de tirage). Potentiomètre bleu pour régler le rétroéclairage. Tensions typiques +5V ou +3.3V.

Module RTC DS1302

Basé sur DS1302 : horloge/calendrier temps réel + 31 octets RAM statique. Format heure hh/mm/ss, date yyyy/mm/dd.

Capteur de température LM35

Capteur de précision. L'ADC convertit : valeur ADC = échantillon × 1024 / tension de référence (5V). Soit approximation numérique = tension d'entrée × 205.

Récepteur infrarouge et télécommande

Fonctionnent en paire. Les boutons de la télécommande sont assignés :

La station AWS

Étape 1 : Construction du boîtier

Conception des faces avec emboîtements et passages de câbles sous AutoCAD, découpe laser du plexiglas 4 mm, assemblage à la colle forte.

Étape 2 : Schéma et connexions matérielles

Schéma réalisé avec Fritzing. Connexions simples.

Étape 3 : Programmation Arduino

Code développé sur Arduino IDE avec toutes les bibliothèques nécessaires.

Étape 4 : Fonctionnement

La station AWS relève des données environnementales et les rend accessibles via la télécommande IR. L'écran LCD propose 5 écrans interchangeables :

  1. Écran d'accueil : « Arduino Weather Station » avec effet de fondu au démarrage et après chaque consultation.
  2. Date/Heure : Accessible par bouton 0, retour à l'accueil après 10 s.
  3. Température/Humidité : Bouton 1, données LM35 et DHT11, retour après 10 s.
  4. Obscurité : Bouton 2, pourcentage d'obscurité via LDR, retour après 10 s.
  5. Niveau de fluide : Bouton 3, hauteur en mm, retour après 10 s.

Le bouton « Cycle » enchaîne les 4 écrans de données avec 4 s d'intervalle chacun (un seul tour).

Précautions

Code

// Bibliothèques
#include <IRremote.h>
#include <stdio.h>
#include <string.h>
#include <DS1302.h>
#include <dht.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#define lmPin A1
LiquidCrystal_I2C lcd(0x27, 16, 2);
dht DHT;
const int DHT11_PIN = 4;
const int waterSensor = 0;
int waterValue = 0, mmwaterValue = 0;
int sensorPin = A3;
int luce = 0, pluce = 0;
float tem = 0;
long lmVal = 0;
const int irReceiverPin = 3;
IRrecv irrecv(irReceiverPin);
decode_results results;
uint8_t RST_PIN = 5, SDA_PIN = 6, SCL_PIN = 7;
char buf[50], day[10];
DS1302 rtc(RST_PIN, SDA_PIN, SCL_PIN);

void print_time() {
  Time t = rtc.time();
  memset(day, 0, sizeof(day));
  switch (t.day) {
    case 1: strcpy(day, "Sun"); break;
    case 2: strcpy(day, "Mon"); break;
    case 3: strcpy(day, "Tue"); break;
    case 4: strcpy(day, "Wed"); break;
    case 5: strcpy(day, "Thu"); break;
    case 6: strcpy(day, "Fri"); break;
    case 7: strcpy(day, "Sat"); break;
  }
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  Serial.println(buf);
  lcd.setCursor(2, 0);
  lcd.print(t.yr); lcd.print("-"); lcd.print(t.mon/10); lcd.print(t.mon%10);
  lcd.print("-"); lcd.print(t.date/10); lcd.print(t.date%10); lcd.print(" "); lcd.print(day);
  lcd.setCursor(4, 1);
  lcd.print(t.hr); lcd.print(":"); lcd.print(t.min/10); lcd.print(t.min%10);
  lcd.print(":"); lcd.print(t.sec/10); lcd.print(t.sec%10);
}

void setup() {
  Serial.begin(9600);
  rtc.write_protect(false); rtc.halt(false);
  irrecv.enableIRIn();
  lcd.init(); lcd.backlight();
  pinMode(sensorPin, INPUT);
  Time t(2017, 12, 9, 11, 20, 00, 7);
  rtc.time(t);
}

void loop() {
  // Animation "Arduino Weather Station" lettre par lettre
  lcd.setCursor(0,0); lcd.print("A"); delay(50);
  lcd.setCursor(1,0); lcd.print("r"); delay(50);
  lcd.setCursor(2,0); lcd.print("d"); delay(50);
  lcd.setCursor(3,0); lcd.print("u"); delay(50);
  lcd.setCursor(4,0); lcd.print("i"); delay(50);
  lcd.setCursor(5,0); lcd.print("n"); delay(50);
  lcd.setCursor(6,0); lcd.print("o"); delay(50);
  lcd.setCursor(8,0); lcd.print("W"); delay(50);
  lcd.setCursor(9,0); lcd.print("e"); delay(50);
  lcd.setCursor(10,0); lcd.print("a"); delay(50);
  lcd.setCursor(11,0); lcd.print("t"); delay(50);
  lcd.setCursor(12,0); lcd.print("h"); delay(50);
  lcd.setCursor(13,0); lcd.print("e"); delay(50);
  lcd.setCursor(14,0); lcd.print("r"); delay(50);
  lcd.setCursor(4,1); lcd.print("S"); delay(50);
  lcd.setCursor(5,1); lcd.print("t"); delay(50);
  lcd.setCursor(6,1); lcd.print("a"); delay(50);
  lcd.setCursor(7,1); lcd.print("t"); delay(50);
  lcd.setCursor(8,1); lcd.print("i"); delay(50);
  lcd.setCursor(9,1); lcd.print("o"); delay(50);
  lcd.setCursor(10,1); lcd.print("n"); delay(50);

  if (irrecv.decode(&results)) {
    if (results.value == 0xFF6897) { // Bouton 0
      lcd.clear(); print_time(); delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF30CF) { // Bouton 1
      lcd.clear();
      int chk = DHT.read11(DHT11_PIN);
      lcd.setCursor(0,0); lcd.print("Tem:");
      lmVal = analogRead(lmPin);
      tem = (lmVal * 0.0048828125 * 100);
      lcd.print(tem); lcd.print(char(223)); lcd.print("C ");
      lcd.setCursor(0,1); lcd.print("Hum:");
      lcd.print(DHT.humidity, 1); lcd.print(" % ");
      delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF18E7) { // Bouton 2
      lcd.clear();
      lcd.setCursor(4,0); lcd.print("Darkness:");
      luce = analogRead(sensorPin);
      pluce = map(luce, 0, 1023, 0, 100);
      lcd.setCursor(6,1); lcd.print(pluce); lcd.print("%");
      delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF7A85) { // Bouton 3
      lcd.clear();
      lcd.setCursor(0,0); lcd.print("Fluid level(mm):");
      waterValue = analogRead(waterSensor);
      mmwaterValue = map(waterValue, 0, 1023, 0, 40);
      lcd.setCursor(6,1); lcd.print(mmwaterValue);
      delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF9867) { // Bouton Cycle
      lcd.clear(); print_time(); delay(4000); lcd.clear(); delay(200);
      int chk = DHT.read11(DHT11_PIN);
      lcd.setCursor(0,0); lcd.print("Tem:");
      lmVal = analogRead(lmPin);
      tem = (lmVal * 0.0048828125 * 100);
      lcd.print(tem); lcd.print(char(223)); lcd.print("C ");
      lcd.setCursor(0,1); lcd.print("Hum:");
      lcd.print(DHT.humidity, 1); lcd.print(" % ");
      delay(4000); lcd.clear(); delay(200);
      lcd.setCursor(4,0); lcd.print("Darkness:");
      luce = analogRead(sensorPin);
      pluce = map(luce, 0, 1023, 0, 100);
      lcd.setCursor(6,1); lcd.print(pluce); lcd.print("%");
      delay(4000); lcd.clear(); delay(200);
      lcd.setCursor(0,0); lcd.print("Fluid level(mm):");
      waterValue = analogRead(waterSensor);
      mmwaterValue = map(waterValue, 0, 1023, 0, 40);
      lcd.setCursor(6,1); lcd.print(mmwaterValue);
      delay(4000); lcd.clear(); delay(200); irrecv.resume();
    }
  }
}

Conclusion

Station météo Arduino avec horloge temps réel, capteurs environnementaux, affichage LCD piloté par télécommande IR. Boîtier plexiglas découpé laser.

Pièces personnalisées et boîtiers

Fichier CAO : box_a5et5f4U9F.dwg

Schémas

Fichier Fritzing : aws_DMDwb4iUZp.fzz

Processus de fabrication

  1. Station météo avancée v2.0 : Surveillance en temps réel de température, pression, humidité et altitude
  2. Détecteur de langue TinyML avec Edge Impulse sur Arduino Nano 33 BLE Sense
  3. Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
  4. Station de Mixage Automatique 6-Shooter Pilotée par Arduino – Construisez Votre Propre Robot Barman
  5. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  6. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  7. Construire une lampe de bureau réactive à l'audio avec Arduino Nano
  8. Enregistreur de données Arduino haute performance pour ballon météo
  9. Station Météo Arduino Portable à 10$ – Nano, DHT22, BMP180 et LCD