Nous souhaitons fabriquer un pot de fleur connecté. L'idée est simple : fini les plantes qui manquent d'eau. Nous souhaitons créer un pot de fleur qui transmet les besoins de la plante à l'utilisateur.
Nous souhaitons réaliser un pot de fleur qui puisse accueillir une plante de petite taille.
Vous trouverez le fichier de notre pot dans les fichiers en fin de page, source : "pot_fleur-Revolve.stl"
Une fois la conception réalisé sur Freecad, nous avons imprimé notre pot à l'aide d'une imprimante Bambu Lab du fablab.
Nous avons réalisé une boite sur freecad pour pouvoir ranger notre carte arduino et les différents câbles.
Nous avons ensuite gravé la face supérieur de notre boîte.
Nous utilisons un écran LCD I2C.
La première difficulté est de réussir à écrire le message Hello World sur l'écran. Pour ce faire nous avons téléchargé la bibliothèque LiquidCrystal I2C par Franck de Barbander. Ensuite nous avons utilisé le code d'Arduino suivant pour faire afficher le message :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Hello, world!");
}
void loop()
{
}
Malheureusement, rien ne s'affiche avec ce code.
Alors nous avons utilisé le code suivant pour trouver le problème :
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Attendre l'ouverture du port série
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices = 0;
Serial.println("Scanning...");
for (address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
} else if (error == 4) {
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // Wait 5 seconds for next scan
}
Ce code renvoie I2C "device found at address 0x3F"
Donc nous avons trouvé l'erreur, elle se trouve sur cette ligne de code : LiquidCrystal_I2C lcd(0x27,16,2)
ce n'est pas 0x27 mais 0x3F
Ainsi nous pouvons mettre en place le code permettant de lire l'humidité de notre écran :
(nous avons décidé que la plante manque d'eau à partir de 12% d'humidité)
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int soil;
void setup() {
lcd.init();
lcd.backlight();
pinMode(soil, INPUT);
Serial.begin(9600);
}
void loop() {
int soil = analogRead(A0);
int valeur = map(soil, 0, 1023, 0, 100); //map est une fonction qui permet de passer de 0 à 1023 à 0 à 100
Serial.println(valeur); // Imprimer la valeur d'humidité sur le moniteur série
Serial.println(soil);
lcd.clear(); // Effacer l'écran LCD avant de mettre à jour
lcd.setCursor(0, 0);
lcd.print("Moisture Value:");
if (valeur < 12){
lcd.setCursor(4, 1);
lcd.print("arrose moi !");}
else {
lcd.setCursor(0, 0);
lcd.print("Moisture Value:");}
lcd.setCursor(0, 1);
lcd.print(valeur);
lcd.print(" %");
delay(500);
}
Puis nous avons positionné la carte Arduino Uno dans la boîte pour obtenir le résultat suivant :