Introduction: Plant Vochtigheidsmeter

Ik dacht dat het leuk zal zijn om voor mijn planten die altijd overlijden een plantenmeter te ontwerpen die me precies aangeeft of ze genoeg water hebben gekregen of niet. Hier is wat je nodig gaat hebben als je het ook wilt maken:

Materialen:

Optioneel:

Verder heb je toegang nodig tot de volgende dingen:

  • Lasersnijder
  • 3D printer
  • Soldeer apparaat
  • Een computer
  • Gezond verstand

Step 1: Verbinden

Je moet de Arduino en alle bijbehorende onderdelen op je breadboard aansluiten net als hier boven te zien is. Je kan om het uit te testen op een protoype board aansluiten eerst (foto 2), maar zodra dat gedaan is moet je het aansluiten op je soldeerprintboard (foto 3). Je kan je board knippen om het kleiner te maken zodat het beter in de behuizing past. Het ziet er dan zo als op foto 3 uit. Op plaatsen waar er mogelijk kortsluiting kan ontstaan zet ik een krimpkous (foto 4 & 5). Voor de watersensor is er een grove kabel nodig (zit in het grove moisture sensor pakketje). Die heeft 4 ingangen (foto 6) waarvan er maar 3 interressant zijn. Haal het witte stukje er af aan 1 kant (foto 7), strip de kabels, bevestig de rode en de zwarte op de + en de -. De witte kabel is niet belangerijk. De gele kabel die moet naar AnalogPin A1 dus zet het op de juiste manier op het bord vast.

Nu moet je alles solderen, als je een fout maakt komt hier ook het desoldeerapparaat van pas.

Even opnieuw op een rijtje

Servo: digitalPin: 5

Button: digitalPin: 2

RGB: Red: digitalPin 10, Green: digitalPin 11, Blue digitalPin 12

Watersensor: analogPin 1

Nokia LCD screen: van rechts naar links digitalPin 9, 8, 7, 6, 4, power, 3, ground

Verder gewoon overal de weerstanden en de plus (power) en de min (ground) op de juiste plaats toevoegen

Step 2: Code

Stop je nano In de Computer

Zorg wel dat je instellingen in tools kloppen voor de nano

Kopieer zo de code onderaan deze kop.

In de toegevoegde code is er wel gewerkt met een grove LCD scherm. Wij maken het met een Nokia 5110 LCD scherm. De code is dus net wat anders.

Vervang deze code:

#include
#include "rgb_lcd.h" rgb_lcd lcd;

const int plant1R = 0; const int plant1G = 0; const int plant1B = 255;

void setup() { lcd.begin(16, 2); }

void loop() { } if (whichPlant == 3) { lcd.setRGB(plant4R, plant4G, plant4B); lcd.clear(); lcd.display(); lcd.print("Swamp Plant"); sensorValue = map(sensorValue, 0, 950, 0, 100); lcd.setCursor(0, 1); lcd.print(sensorValue); lcd.print("% Enough water"); Serial.println(sensorValue); delay(500); // crude debouncing } }

Met deze code:

En doe dit op alle plaatsen waar het nodig is

#include
LCD5110 myGLCD(4,6,7,8,9);

extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[];

void setup() { myGLCD.InitLCD(); }

void loop() { if (whichPlant == 3) {

myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print("Cactus", CENTER, 0);

sensorValue = map(sensorValue, 0, 950, 0, 100);

myGLCD.print(sensorValue, CENTER, 8); myGLCD.print("% Enough water", CENTER, 8); delay(500);

}

}

CODE: Dit met aanpassingen kopieren in je programma en uploaden naar je arduino

Arduino code

#include<Servo.h>
#include<Wire.h>
#include"rgb_lcd.h"
rgb_lcd lcd;
constint numberOfPlants = 4;
constint noPlant = -1; // index meaning no plant is being monitored
constint plant1R = 0;
constint plant1G = 0;
constint plant1B = 255;
constint zeroR = 0;
constint zeroG = 0;
constint zeroB = 0;
constint plant2R = 0;
constint plant2G = 255;
constint plant2B = 0;
constint plant3R = 255;
constint plant3G = 0;
constint plant3B = 0;
constint plant4R = 255;
constint plant4G = 0;
constint plant4B = 255;
// Pinout.
constint waterSensorPin = A1;
constint buttonPin = 2;
constint servoPin = 5;
constint ledPins[numberOfPlants] = {12, 11, 10, 9};
// Moisture ranges for the different plants.
constint moistureMinima[numberOfPlants] = { 0, 0, 0, 0};
constint moistureMaxima[numberOfPlants] = {195, 682, 750, 950};
// Servo holding the indicator needle.
Servo indicator;
int sensorValue = 0; // value read from the Soil Moisture
voidsetup() {
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(waterSensorPin, INPUT);
pinMode(buttonPin, INPUT);
for (int ledNo = 0; ledNo < numberOfPlants; ledNo++) {
pinMode(ledPins[ledNo], OUTPUT);
}
indicator.attach(servoPin);
}
voidloop() {
// Which plant are we currently monitoring?
staticint whichPlant = noPlant;
sensorValue = analogRead(waterSensorPin);// read the analog in value:
// Switch to next plant on button press.
if (digitalRead(buttonPin) == HIGH) {
if (whichPlant != noPlant) {
digitalWrite(ledPins[whichPlant], LOW); // turn off previous LED
}
++whichPlant;
if (whichPlant == numberOfPlants) {
whichPlant = noPlant;
} else {
digitalWrite(ledPins[whichPlant], HIGH); // turn on current LED
}
}
if (whichPlant == noPlant) {
digitalWrite(10, LOW); // turn off previous LED
digitalWrite(12, LOW); // turn off previous LED
lcd.clear();
lcd.noDisplay();
lcd.setRGB(zeroR, zeroG, zeroB);
}
if (whichPlant == 3) {
digitalWrite(10, HIGH); // turn off previous LED
digitalWrite(12, HIGH); // turn off previous LED
lcd.setRGB(plant4R, plant4G, plant4B);
lcd.clear();
lcd.display();
lcd.print("Swamp Plant");// print the results to the LCD Display:
sensorValue = map(sensorValue, 0, 950, 0, 100);
lcd.setCursor(0, 1);
lcd.print(sensorValue);
lcd.print("% Enough water");
Serial.println(sensorValue);
delay(500); // crude debouncing
}
if (whichPlant == 2) {
lcd.setRGB(plant3R, plant3G, plant3B);
lcd.clear();
lcd.display();
lcd.print("Orchid");// print the results to the LCD Display:
sensorValue = map(sensorValue, 0, 750, 0, 100);
lcd.setCursor(0, 1);
lcd.print(sensorValue);
lcd.print("% Enough water");
Serial.println(sensorValue);
}
if (whichPlant == 1) {
lcd.setRGB(plant2R, plant2G, plant2B);
lcd.clear();
lcd.display();
lcd.print("Sunflower");// print the results to the LCD Display:
sensorValue = map(sensorValue, 0, 682, 0, 100);
lcd.setCursor(0, 1);
lcd.print(sensorValue);
lcd.print("% Enough water");
Serial.println(sensorValue);
}
if (whichPlant == 0) {
lcd.setRGB(plant1R, plant1G, plant1B);
lcd.clear();
lcd.display();
lcd.print("Cactus");// print the results to the LCD Display:
sensorValue = map(sensorValue, 0, 195, 0, 100);
lcd.setCursor(0, 1);
lcd.print(sensorValue);
lcd.print("% Enough water");
Serial.println(sensorValue);
}
// Report the moisture level of this plant.
if (whichPlant != noPlant) {
int sensorValue = analogRead(waterSensorPin);
int position = map(sensorValue,
moistureMinima[whichPlant], moistureMaxima[whichPlant], 180, 0);
indicator.write(constrain(position, 0, 180));
Serial.println(sensorValue);
delay(500);
}
// added 14-02 to make sure servo pointer goes back to start after reading last reading from waterSensor
if (whichPlant == noPlant) {
int sensorValue = analogRead(waterSensorPin);
int position = map(sensorValue,
moistureMinima[whichPlant], moistureMaxima[whichPlant], 180, 0);
indicator.write(constrain(position, 180, 180));
delay(500);
}
//gemaakt door Sinan van Noppen
}
view rawArduino.INO hosted with ❤ by GitHub

Step 3: 3D Printen

Een aantal onderdelen, de "specials" gaan we 3d printen voor gemak en bevestiging. Deze kan je downloaden van de bijlagen en printen op een apparaat naar keuze. Ik heb zelf de Ultimaker 2+ gebruikt.

Step 4: Lasersnijden

Hier moet je het bestand samen met je multiplex in de lasersnijder zetten en aanzetten. Niet vergeten dat je 3mm multimplex moet gebruiken.

Step 5: Bevestiging

Nu gaan we alles bevestigen. Eerst zetten we de houten behuizing deels in elkaar. Pak de linker, de rechterzijkant, de onderkant en de bovenzijkant en schuif het in elkaar (foto 1). Voeg daarna een klein beetje houtlijm tussen de voegjes (foto 2) en wacht een half uur.

Wanneer het droog is pak de Velcrotape (foto 3) en voeg het toe aan de onderkant van de servohouder , de batterijhouder en de arduino houder (foto 4). Voeg dan het tegenovergestelde Velcro spul op het hout binnenin op de plaats waar de onderdelen horen te zitten (foto 5) (foto 6). Zet nu de batterij (foto 7), de Arduino (met de breadboard, de servo (foto 8), de LED (foto 9) en de button op de juiste plaats. Trek de grove kabel uit de linker zijkant. Zet het LCD scherm vast aan de bovenkant met kleine moeren en bouten (foto 10).

Zet nu de onder zijkant vast met je scharnier en dan voeg je bovenkant (met lijm toe aan het geheel).

Zet dan de onder zijkant vast met de moer en de bout (foto 11).

Zet als laatste de geprinte clip vast aan de achterkant (foto 13)

Optioneel: Voeg epoxy toe bij de watersensor in zijn houder (foto) om het zo waterdicht te maken (foto 12)

Step 6: Klaar!

En toen was je klaar! Wil je hem gebruiken clip je hem aan een pot (waar al reeds een sensor in zit) en verbind je de sensor met het apparaat. Je drukt op de knop en afhankelijk van welke plant het is zet je hem op de goeie stand. Done! Nooit meer plantjes die doodgaan en tegerlijkertijd heel veel interessants geleerd over arduino.