Projet IMA3 P1, 2016/2017, TD1
Sommaire
Projet IMA3-SC 2016/2017 : Pot de fleur connecté
Cahier des charges
- Mesure du taux d'humidité de la terre
- Mesure de la température
- Mesure de la luminosité
- Affichage des données (humidité, température et lumière) sur une interface Web
- Régulation automatique de l'arrosage lorsque l'humidité du sol est inférieure à la limite fixée par l'utilisateur
- Affichage d'alertes lorsque les conditions de températures/luminosité ne correspondent plus à ce que l'utilisateur à fixé
- Garder un historique horodaté des alertes et de l'arrosage
- Avertir l'utilisateur lorsque le niveau d'eau est faible
Description du système
Le pot de fleur connecté est un système permettant de faciliter le soin d'une plante.
Il régule automatiquement l’arrosage afin de garder un taux d'humidité propice au développement de la plante et avertit l'utilisateur en cas de réserve d'eau insuffisante.
Il permet également de prévenir l'utilisateur lorsque les conditions de lumière/température ne correspondent plus à ce qu'il avait fixé sur l'interface web.
Le matériel
- 1 hygromètre (certains incluent une sonde de température)
- 1 photorésistance
- 1 sonde de température
- 1 capteur de niveau d'eau
- 1 Rapsberry Pi
- 1 Nanoboard
Séance 1
Partie électronique
FPGA
Cette première séance a été consacrée à la découverte de la Nanoboard. En effet, nous n'avions encore jamais utilisé de FPGA au préalable et le tutoriel fourni nous à permis de comprendre le fonctionnement et l'utilisation de cette Nanoboard.
Ceci nous à permis de réaliser un des éléments nécessaire à notre projet : la génération d'un signal PWM (Pulse Width Modulation) à partir d'un signal carré d'horloge auquel on fait varier le rapport cyclique périodiquement (voir schéma).
Objectif pour la séance suivante : Établir la structure globale qu'aura le FPGA pour réaliser notre programme afin de pourvoir organiser le travail de manière convenable.
Prototype Arduino
On a commencé par faire l'inventaire des différents capteurs et matériels présents dans notre boîte.
- Une pompe accompagnée de son shield permettant le contrôle du moteur par PWM avec un Arduino
- Un capteur d'humidité couplé avec un capteur de température
- Une sonde "chirp" qui émet du son lorsque l'humidité du sol descend en dessous d'un relevé initial "dry point"
- Un phototransistor qui réagit au changement d'intensité lumineuse
- Un microcontrôleur Arduino et une breadboard
Sonde chirp
Cette sonde, bien que fonctionnelle, n'est pas réellement adaptée à notre projet. Il s'agit d'un produit fini et non réellement d'un simple capteur. Nous avons trouvé inutile de perdre du temps à modifier un produit existant sans avoir la certitude d'aboutir à des résultats probants.
Capteur d'humidité / température
Grâce aux librairies fournies par Adafruit, ce capteur est assez simple à prendre en main. Des fonctions comme readTemperature() ou readHumidity() permettent d'accéder à la valeur de ces grandeurs. Seulement, ce capteur est plutôt destiné à un fonctionnement à l'air libre. Or, il va nous falloir la température de l'air mais également l'humidité du sol. De plus, le protocole de communication utilisé (I2C) est bien plus complexe à comprendre qu'une liaison série.
Finalement, nous avons pris la décision de ne travailler qu'avec des capteurs analogiques. En effet, pour le prototype Arduino ce choix n'est pas impactant mais pour la partie FPGA ce choix est préférable. Nous avons demandé une sonde de température (LM35) et nous avons commandé un kit comprenant un détecteur de niveau d'eau ainsi qu'un détecteur d'humidité à planter (lien).
Partie informatique
La distribution d'eau est une fonction essentielle de notre projet. Tout naturellement, on s'est penché en priorité sur le fonctionnement de la pompe. Pour connecter notre pompe, nous nous sommes référé à un schéma du driver TB6612FNG.
Programme du contrôle des moteurs
int STBY = 2; int PWMA = 6; int AIN1 = 4; int AIN2 = 5;
On commence par définir le numéro des pins à utiliser en veillant à prendre un pin compatible PWM pour contrôler la vitesse du moteur
void setup(){ pinMode(STBY, OUTPUT); pinMode(PWMA, OUTPUT); pinMode(AIN1, OUTPUT); pinMode(AIN2, OUTPUT); }
On initialise les pin en mode sortie
void loop(){ move(255); delay(5000); stop(); delay(2000); }
La fonction loop se répète à l'infini. Ici, elle a simplement pour but de faire aspirer la pompe au maximum pendant 5s puis de s’arrêter 2s. C'est durant ce test que nous avons constaté que les valeurs en dessous de 255 ne permettaient pas une vitesse suffisante pour aspirer de l'eau. On fonctionnera donc en tout ou rien.
void move(int speed){ digitalWrite(STBY, HIGH); boolean inPin1 = LOW; boolean inPin2 = HIGH; digitalWrite(AIN1, inPin1); digitalWrite(AIN2, inPin2); analogWrite(PWMA, speed); }
Cette fonction met en marche le moteur et lui applique la consigne de vitesse. Le pin PWN sortira alternativement du 0 et du 5V afin d'obtenir une valeur moyenne correspondant à la consigne émise.
void stop(){ digitalWrite(STBY, LOW); }
Les premiers tests sur la pompe sont concluants. Toutefois, même à une vitesse maximale, le débit est assez faible (goutte à goutte).
En seconde partie de matinée, nous avons commencé à réfléchir à l'interface web et plus précisément à son apparence. Nous avons décidé d'inclure des barres de progression afin de rendre plus graphique l'affichage de la température et de l'humidité. Pour le niveau d'eau, un pictogramme est suffisant pour signaler un manque d'eau ou non dans le réservoir. De même, à coté de la barre figurera sans doute un pictogramme indiquant le respect ou non des conditions de température.
Séance 2
Partie électronique
FPGA
Durant cette seconde séance nous avons réaliser un générateur de signal en dent de scie à partir du signal carré de base en ajoutant un filtre passe bas afin de filtrer la composante alternative et garder seulement la composante continue. (prochainement : Description dimensionnement R & C )
Nous avons ensuite utilisé un AOP en mode comparateur afin d'échantillonné le signal d'un capteur IR.
Le convertisseur CAN est opérationnel !
Objectif séance 3 : Réunion avec l’ensemble des membres du groupe pour un état des lieux notamment sur la conception globale du projet, à savoir, le regroupement de la partie Elec et Info.
Prototype Arduino
En première partie de matinée, on a finalisé les essaies des capteurs, à savoir celui de température (LM35) et celui d'humidité (VMA303). Les deux capteurs étant analogique, il nous à fallu trouver une correspondance entre la valeur numérique (entre 0 et 1023) et la grandeur physique. On sait pour le LM35 que 10mV = 1°C et que 5V = 5000mv ≡ 1023, par conséquent on obtient : . Pour le VMA303, on souhaite un pourcentage d'humidité, on a donc la formule suivante :
Test du capteur de température et d'humidité Réalisation d'un PCB qui nous permettra de détecter le niveau d'eau dans le réservoir Réflexion sur le design de la page web de supervision
Partie informatique
- Test du capteur de température et d'humidité
- Réalisation d'un PCB qui nous permettra de détecter le niveau d'eau dans le réservoir
- Réflexion sur le design de la page web de supervision
Séance 3
Partie électronique
Partie informatique
- Interface web terminée
- Communication série / websockets (Afficher sur l'interface web une valeur venant du port série)