Projet IMA3 P1, 2016/2017, TD1 : Différence entre versions

De Wiki de Projets IMA
(Partie informatique)
(Partie informatique)
Ligne 108 : Ligne 108 :
 
  }
 
  }
  
 +
Les premiers tests sur la pompe sont concluants. Toutefois, même à une vitesse maximale, le débit est assez faible (goutte à goutte).
 +
 +
''' 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 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 donc commandé un kit comprenant un détecteur de niveau d'eau ainsi qu'un détecteur d'humidité à planter ([https://www.amazon.fr/D%C3%89TECTEUR-DHUMIDIT%C3%89-DETECTEUR-COMPATIBLE-ARDUINO/dp/B01N5JTFVQ/ref=sr_1_1?ie=UTF8&qid=1494793504&sr=8-1&keywords=capteur+humidit%C3%A9+arduino+velleman lien]).
  
 
* Début du prototype avec une Arduino
 
* Début du prototype avec une Arduino

Version du 14 mai 2017 à 20:29

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 à été consacré à 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 : Etablir 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é 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

On est rapidement passé à la programmation pour faire fonctionner ces dispositifs et comprendre leur fonctionnement.

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).

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 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 donc commandé un kit comprenant un détecteur de niveau d'eau ainsi qu'un détecteur d'humidité à planter (lien).

  • Début du prototype avec une Arduino
  • Test concluant de la pompe
  • Test du capteur d'humidité (à planter)

Séance 2

Partie électronique

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.

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)

Séance supplémentaire 1

Partie électronique

Partie informatique

Conclusion