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

Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT

Composants et fournitures

Composant Quantité
Arduino UNO 1
Espressif ESP8266 ESP-01 1
Shield prototype Arduino (ou plaque d'essai ordinaire) 1
Capteur température DHT22 1
Seeed Grove - Capteur de lumière 1
Seeed Grove - Capteur UV 1
Seeed Grove - Capteur barométrique 1
Seeed Grove - Capteur de poussières 1
Résistance 1 kΩ 2
Résistance 10 kΩ 1
Résistance 4,75 kΩ 1
Fils de connexion (standard) 1 lot

Applications et services en ligne

À propos de ce projet

Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT

Voici la première génération de ma mini-station météo à base d'Arduino avec connexion Wi-Fi, capable de publier des données publiquement en ligne via la plateforme ThingSpeak.

La station collecte les données météo et environnementales suivantes via différents capteurs :

L'objectif : une station météo petite et simple, en matériel open source.

C'est parti, amusez-vous !

Composants électroniques

Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT
Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT

Pas d'outils spécifiques nécessaires pour l'assemblage. Tous les composants se trouvent en ligne sur votre site e-commerce préféré.

Le circuit est alimenté par le port USB (ordinateur ou chargeur téléphone), mais vous pouvez ajouter une alimentation DC externe ou une batterie sur la prise d'alimentation de l'Arduino.

Un boîtier pour la station météo est hors sujet de ce projet.

Connexion des composants

Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT
Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT

Connectez tous les composants selon le schéma. Vous aurez besoin de fils de connexion pour relier chaque capteur à la plaque d'essai. Vous pouvez utiliser un protoshield (circuit plus compact), une plaque d'essai ordinaire, ou concevoir votre propre shield Arduino.

Branchez le câble USB sur l'Arduino Uno et passez à l'étape suivante.

Code

Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT

En supposant que vous ayez déjà installé le dernier Arduino IDE, téléchargez et installez les bibliothèques suivantes :

Pour les instructions d'ajout de bibliothèques, consultez le guide Arduino.

Téléchargez le code Arduino (weatherBox.ino) dans la section code. Remplacez XXXXX par le SSID de votre routeur WiFi, YYYYY par le mot de passe, et ZZZZZ par la clé d'écriture API de votre canal ThingSpeak (voir étape suivante).

Connectez l'Arduino à l'ordinateur via USB et téléversez le code.

Configuration ThingSpeak

Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT
Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT
Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT
Mini station météo Arduino UNO – Hub capteurs DIY avec ESP8266 IoT

Nommez et décrivez votre station météo. Attribuez les canaux suivants et sauvegardez :

Copiez la clé d'écriture API. Elle est utilisée dans l'étape précédente dans le code Arduino. Une fois la station allumée, les valeurs des capteurs seront envoyées périodiquement au canal. Vous pouvez configurer des visualisations publiques/privées pour chaque variable.

Exemple de canal public : https://thingspeak.com/channels/35540

Utilisation de l'application Android

Vous pourrez visualiser les données de la station météo dans n'importe quel navigateur. Mais vous pouvez aussi les consulter sur votre smartphone Android quand vous voulez.

Amusez-vous bien !

Code

weatherBox.ino (Arduino)

#include <stdlib.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>

#define SSID "XXXXX" // Remplacez par votre SSID routeur
#define PASS "YYYYY" // Remplacez par votre mot de passe routeur
#define IP "184.106.153.149" // IP thingspeak.com
#define DHT22_PIN 2

String GET = "GET /update?key=ZZZZZ&field1="; // Remplacez ZZZZZ par votre clé d'écriture ThingSpeak

SoftwareSerial monitor(10, 11); // Communication série avec module ESP8266 (RX, TX)
dht DHT;
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);

// Variables
int luminancePin = A0;
int uvPin = A1;
int dustPin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long delay_time = 60000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

void setup() {
  Serial.begin(9600);
  monitor.begin(9600);
  Serial.println("Initialisation...");

  pinMode(dustPin, INPUT);

  Serial.println("Détection capteur pression BMP085...");
  if (!bmp.begin()) {
    Serial.println("Capteur BMP085 non détecté. Vérifiez connexions ou adresse I2C !");
    while (1);
  }
  Serial.println("BMP085 détecté !");

  // Communication module WiFi
  monitor.flush();
  monitor.println("AT");
  delay(2000);
  if (monitor.find("OK")) {
    Serial.println("Communication module ESP8266 : OK");
  } else {
    Serial.println("ERREUR module ESP8266");
  }

  // Connexion WiFi
  connectWiFi();
  Serial.print("Échantillonnage (");
  Serial.print(sampletime_ms / 1000);
  Serial.println("s)...");

  starttime = millis();
}

void loop() {
  // Mesure particules de poussière
  duration = pulseIn(dustPin, LOW);
  lowpulseoccupancy += duration;

  // Cycle 30 secondes
  if ((millis() - starttime) >= sampletime_ms) {
    ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // pourcentage (0-100%)
    concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // depuis datasheet
    lowpulseoccupancy = 0;

    // Lecture autres capteurs
    char buffer[10];
    float luminance = analogRead(luminancePin);
    float uv = analogRead(uvPin);
    uv = uv * 0.0049; // conversion volts
    uv = uv * 307;    // conversion mW/m²
    uv = uv / 200;    // calcul indice UV

    // Température et humidité
    int chk = DHT.read22(DHT22_PIN);
    float humidity = DHT.humidity;
    float temperature = DHT.temperature;

    // Pression et température BMP085
    sensors_event_t event;
    bmp.getEvent(&event);
    float pressure = 0;
    float temperature1 = 0;
    if (event.pressure) {
      pressure = event.pressure;
      bmp.getTemperature(&temperature1);
    }

    // Conversion valeurs en chaînes
    String luminanceStr = dtostrf(luminance, 4, 1, buffer); luminanceStr.replace(" ", "");
    String uvStr = dtostrf(uv, 4, 1, buffer); uvStr.replace(" ", "");
    String humidityStr = dtostrf(humidity, 4, 1, buffer); humidityStr.replace(" ", "");
    String temperatureStr = dtostrf(temperature, 4, 1, buffer); temperatureStr.replace(" ", "");
    String dustStr = dtostrf(concentration, 4, 1, buffer); dustStr.replace(" ", "");
    String pressureStr = dtostrf(pressure, 4, 1, buffer); pressureStr.replace(" ", "");
    String temperature1Str = dtostrf(temperature1, 4, 1, buffer); temperature1Str.replace(" ", "");

    // Envoi données ThingSpeak
    updateSensors(luminanceStr, humidityStr, temperatureStr, uvStr, dustStr, pressureStr, temperature1Str);

    // Attente cycle suivant
    Serial.print("Attente ");
    Serial.print(delay_time / 1000);
    Serial.println("s pour prochain échantillonnage");
    Serial.println();
    delay(delay_time);

    // Nouveau cycle
    Serial.println();
    Serial.print("Échantillonnage (");
    Serial.print(sampletime_ms / 1000);
    Serial.println("s)...");
    starttime = millis();
  }
}

void updateSensors(String luminanceStr, String humidityStr, String temperatureStr, String uvStr, String dustStr, String pressureStr, String temperature1Str) {
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  monitor.println(cmd);
  delay(2000);

  cmd = GET;
  cmd += luminanceStr;
  cmd += "&field2=";
  cmd += humidityStr;
  cmd += "&field3=";
  cmd += temperatureStr;
  cmd += "&field4=";
  cmd += uvStr;
  cmd += "&field5=";
  cmd += dustStr;
  cmd += "&field6=";
  cmd += pressureStr;
  cmd += "&field7=";
  cmd += temperature1Str;
  cmd += "\r\n";

  delay(1000);
  int strsize = cmd.length();
  monitor.println("AT+CIPSEND=" + String(strsize));
  delay(2000);
  monitor.print(cmd);

  if (monitor.find("OK")) {
    Serial.println("Transmission réussie");
  } else {
    Serial.println("Échec transmission !");
  }
}

void sendDebug(String cmd) {
  Serial.print("SEND: ");
  Serial.println(cmd);
  monitor.println(cmd);
}

boolean connectWiFi() {
  Serial.println("Connexion WiFi...");
  String cmd = "AT+CWMODE=1";
  monitor.println(cmd);
  delay(2000);
  monitor.flush();

  cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";
  monitor.println(cmd);
  delay(5000);

  if (monitor.find("OK")) {
    Serial.println("Connexion réussie !");
    return true;
  } else {
    Serial.println("Échec connexion !");
    return false;
  }
  Serial.println();
}

Ressources GitHub

Processus de fabrication

  1. Construire une station météo Raspberry Pi qui envoie les données météo quotidiennes par email
  2. Robot de détection humaine basé sur Arduino Uno : Intégration capteurs étape par étape
  3. Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
  4. Construisez un Stadiomètre Numérique : Suivez la Croissance avec Arduino et Capteur Laser
  5. Serveur Web Arduino Uno WiFi : Commander une LED via Navigateur
  6. Calculatrice basique Arduino UNO - Projet facile pour débutants
  7. Tour de Capteurs avec Arduino Cloud : Température, Mouvement et Gaz
  8. Construire un affichage à persistance rétinienne portable avec Arduino UNO et ATtiny85
  9. Station météo Arduino Nano : Kit capteurs & affichage OLED