Arduino

Arduino Weatherstation

Application Android sur Google Play

J’ai décidé de réaliser une station météo avec un microcontrôleur Arduino. Nous voulions mesurer  temperature , la pression et l’humidité. Il devrait être également possible d’obtenir toutes les 5 min , une mise à jour de la valeur sur un serveur externe .

Notre idée de base était à develope une station météorologique qui est facile à utiliser avec des technologies différentes ( Smartphone , Internet, microcontrôleur , … ) . Il devrait également être possible d’ajouter de nouveaux capteurs assez facile et adapter la station à vos propres besoins.

Nous avons donc développé une station météorologique et une application smartphone à utiliser avec la station météo .

exigences
Arduino
Résumé
Les capteurs utilisés
BMP085
la vitesse du vent
direction du vent
pluie
schéma
BMP085
Vent / précipitation

obtenir des données
base de données
captures d’écran
Demande smartphone
Widget vue
Widget vue graphique
Paramètres Widget
sources
Démo
exigences

Un bref aperçu de mes exigences :

température de mesure
pression de mesure
mesurer l’humidité
Intervalle de 5 min pour les valeurs climatiques
envoyer des données au serveur externe
générer des graphiques de valeurs
Arduino

J’utilise un Arduino Uno . L’Arduino Uno est une carte microcontrôleur basée sur l’ Tmega328 .

Arduino Uno

Résumé

microcontrôleur ATmega328
Fonctionnement Tension 5V
Tension d’entrée (recommandé) 7 -12V
Tension d’entrée ( limites ) 6- 20V
Broches d’E / S numériques 14 (dont 6 fournissent PWM )
Analogiques Pins d’entrée 6
DC Courant par I / O Pin 40 mA
Courant pour Pin 3.3V 50 mA
Mémoire flash 32 Ko dont 0,5 Ko utilisés par bootloader
SRAM 2 KB
EEPROM 1 KB
Vitesse d’horloge 16 MHz
Les capteurs utilisés

J’utilise cinq capteurs pour mesurer les valeurs requises.

Pour capteurs de pression , de température et d’humidité et de minimiser code dans le fichier Arduino principal ( weatherstation.ino )

Pour mesurer la vitesse du vent , les précipitations et direction j’utilise le capteur suivant :

Vent / précipitation

Il est disponible à watterott .

BMP085

BMP085

Il s’agit d’une platine très simple pour la haute précision , capteur de pression barométrique de faible puissance BMP085 . Le BMP085 offre une plage de mesure de 300 à 1100 hPa avec une précision absolue inférieure à 0,03 hPa. Il est basé sur la technologie piézo -résistif pour EMC robustesse , haute précision et linéarité ainsi que la stabilité à long terme. Ce capteur supporte une tension d’alimentation comprise entre 1,8 et 3,6 V CC . Il est conçu pour être directement connecté à un micro- contrôleur par l’intermédiaire du bus I2C

obtenir des données sur Arduino

J’attrape les valeurs de la BMP085 par le bus I2C . C’était un travail long et difficile , et je ne veux pas vraiment à expliquer le fichier source entier .

Vous pouvez le télécharger à GitHub .

obtenir des données sur Arduino

Obtenir des données est assez facile..

Pour recevoir juste le signal du capteur , nous pouvons utiliser quelque chose comme:

pinMode ( HIH4030_PIN , INPUT ) ;
hih4030_value = analogRead ( HIH4030_PIN ) ;
Ici, vous obtenez seulement la valeur plaine du capteur. Ce doit être calculé pour obtenir le taux d’humidité réel. Tout ce que nous devons pour ce calcul peut être trouvée dans la feuille de données.

D’abord l’entrée analogique doit être calculé à la bonne tension selon l’Arduino page .

la vitesse du vent

Le capteur de vitesse du vent ( anémomètre ) est muni d’ un interrupteur reed (NO = normalement ouvert) . A chaque tour , le contact se ferme . A recolution (impulsion) correspond à une vitesse de vent de 2,4 km / h.

obtenir des données sur Arduino

Pour obtenir des données est assez facile. Le capteur de vitesse du vent peut être traitée avec des signaux d’ entrée numérique de l’ Arduino.

Pour recevoir juste le signal du capteur , nous pouvons utiliser quelque chose comme:

pinMode ( WIND_SPEED_PIN , INPUT ) ;
digitalWrite ( WIND_SPEED_PIN , HIGH) ;
….
windSpeedValue = digitalRead ( WIND_SPEED_PIN ) ;
direction du vent

L’unité pour l’affichage du capteur de direction du vent est la plus compliquée du vent et de l’unité de pluie. Voici le schéma :

obtenir des données sur Arduino

Pour obtenir des valeurs de capteur du capteur de direction du vent , nous pouvons utiliser des signaux d’entrée analogiques sur l’Arduino .

Pour recevoir un signal, faire quelque chose comme :

sensorValue = analogRead ( WIND_DIRECTION_PIN ) ;
Après avoir reçu une valeur , il faut cartographier l’ampleur entrant ( 0-1024 ) de volts (0-5) . Cela peut être fait avec une fonction appelée carte :

sensorVolt = map ( sensorValue , 1, 1024, 1 , 5000 ) ;
pluie

attachInterrupt ( interruption, fonction , mode)
Pour recevoir des interruptions , nous pouvons faire quelque chose comme:

attachInterrupt (0, countRain , CHANGE) ;

vide countRain () {
rainCounter = rainCounter + + ;
}
Pour calculer la quantité de pluie tombe en panne, nous utilisons ce formulaire:

pluie = (( rainCounter * 0,28) + 0,5 ; / / 1 impulsion = 0.2794 mm
schéma

BMP085

Verkabelung

Description succincte pour BMP085 :

bleu : SCL -> EA5
jaune : SDA -> AI4
Vent / précipitation

Verkabelung

obtenir des données

my $ Daten = «  »;

if ($ ENV {‘ REQUEST_METHOD ‘} ‘ du POST’ eq) {
$ Daten = $ ENV {‘ QUERY_STRING ‘} ;
my @ ValueField = split ( / & / , Daten $ ) ;
foreach my $ Champ (@ ValueField ) {
(mon $ name, my $ valeur ) = split ( / = / , $ champ ) ;
if ($ name eq « P ») {# pression
$ pression = $ valeur / 100,0 ; # faire pression en hPa et non en Pa
Imprimer Connexion « + + valeur de pression obtenu à partir Arduino : $ value \ n »;
} elsif ( $ name eq  » T » ) {# Température
$ température = $ valeur ;
Imprimer Connexion « + + valeur de température obtenu à partir Arduino : $ value \ n »;
} elsif ( $ name eq  » H » ) {# Humidité
$ humidité = $ valeur ;
Imprimer Connexion « + + valeur obtenu d’humidité de Arduino : $ value \ n »;
}
}
}
else {
lire ( STDIN , $ Daten , $ ENV {‘ CONTENT_LENGTH ‘} ) ;
}
base de données

Pour stocker les valeurs météorologiques , j’utilise RRDtool de Tobi Oetiker . Dans cet outil , les données sont stockées dans une mémoire tampon circulaire . Afin de minimiser la partie configuration de rrdtool , j’utilise rrdSimple ( utiliser RRD :: Simple () ;). Il est assez facile à utiliser, car les configurations principales sont déjà faites. Vous verrez plus tard , combien il est facile à utiliser.

base de données ouverte

$ rrdSimple = RRD :: Simple -> new ( file = > $ dbSimple ) ;
if (! -f $ dbSimple ) {
$ rrdSimple -> create (
température => « jauge  » ,
pression => « jauge  » ,
humidité => « jauge  »
) ;
}
mettre à jour les valeurs

$ rrdSimple -> update (
température => $ température ,
pression => $ pression ,
humidité => $ humidité
) ;
dessiner des graphiques

% RTN = $ rrdSimple -> graphique (
destination = > « $ HOME / temp » ,
title = >  » Wetterstation »,
width = > « 500 » ,
hauteur = > « 200 » ,
vertical_label =>  » Temperatur / Druck / Humidité »,
entrelacé = > «  »
) ;
captures d’écran

Ici vous pouvez voir les graphiques tirés par l’outil RRD :

Annuel RRD- annuel

Mensuel RRD- mensuel

Hebdomadaire RRD- hebdomadaire

Daily RRD- quotidienne

Demande smartphone

Widget vue

RRD- quotidienne

Widget vue graphique

RRD- quotidienne

Paramètres Widget

RRD- quotidienne

sources

MISE À JOUR
Les sources de gérer la vitesse du vent , direction du vent et de la pluie sont à venir. Je dois juste nettoyer mes sources .

Toutes les sources à utiliser avec le weatherstation Arduino sont disponibles sur GitHub .

En outre, les sources du widget Android sont disponibles sur GitHub .

Si vous voulez faire tourner un  » serveur externe  » vous pouvez obtenir le paquet debian contenant tous les réglages nécessaires .

obtenir le paquet debian

MISE À JOUR
Les paramètres à gérer la vitesse du vent , direction du vent et de la pluie sont à venir. Je dois juste nettoyer mes sources .

Tout d’abord vous devez ajouter de la piscine à votre liste de sources d’abord:

sudo echo  » deb http://pool.maxoberberger.net/ compression principale  » >> / etc / apt / sources.list
Vous devez également la clé de la piscine :

wget -O – http://pool.maxoberberger.net/max @ maxoberberger.net.gpg.key | sudo apt- key add –
Vous êtes maintenant prêt à obtenir le paquet de configuration:

apt- get update
apt- get install Arduino configuration
Démo

Une démonstration en direct peut être vu à mon weatherpage

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *