Arroseur automatique de plante
Informations
- Sean RAMS
- ramsean2001@gmail.com
- Master informatique : SESI
- 02/06/2023 - 20/06/2023
Contexte
Afin de préserver les plantes du fablab, je me vue attribuer la création d'arroseur automatique pour les diverse plante du fablab.
Objectifs
RĂ©aliser des arroseur automatique pour diverses plantes
Matériel
- Arduino uno
- 3 led
- Pompe
- Cateure d'humidité sol
Machines utilisées
Aucune
Construction
(Fichiers, photos, code, explications, paramètres d'usinage, photos, captures d'écran...)
Étape 1
----
Étape 2
----
Étape 3
----
Journal de bord
02/06 Premier pas dans le projet:
int sensorPin = A0;
int sensorValue = 0;
int PinR = 7;
int PinV = 8;
int PinB = 4;
void setup() {
Serial.begin(9600);
pinMode(PinR,OUTPUT);
pinMode(PinV,OUTPUT);
pinMode(PinB,OUTPUT);
}
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.print("Moisture = " );
Serial.println(sensorValue);
if (sensorValue < 300){
digitalWrite(PinV,HIGH);
digitalWrite(PinR,LOW);
}
else {
digitalWrite(PinR,HIGH);
digitalWrite(PinV,LOW);
}
delay(1000);
}
15/06 Test d'utilisation de la pompe.
int sensorPin = A0;
int sensorValue = 0;
int PinR = 7;
int PinV = 8;
int PinB = 4;
int pompe = 2;
int serial = 101;
void setup() {
Serial.begin(9600);
pinMode(PinR,OUTPUT);
pinMode(PinV,OUTPUT);
pinMode(PinB,OUTPUT);
pinMode(pompe,OUTPUT);
}
void loop() {
// read the value from the sensor:
/* sensorValue = analogRead(sensorPin);
Serial.print("Moisture = " );
Serial.println(sensorValue);
if (sensorValue < 300){
digitalWrite(PinV,HIGH);
digitalWrite(PinR,LOW);
}
else {
digitalWrite(PinR,HIGH);
digitalWrite(PinV,LOW);
}*/
if (serial >'5' ){
digitalWrite(pompe,HIGH);
}else{
digitalWrite(pompe,LOW);
}
if(Serial.available() > 0) {
serial= Serial.read();
}
Serial.println(serial);
delay(1000);
}
L'idée est de combiner la pompe et le capteur pour alimenter la plante lorsque la terre est séche.
Code fonctionnel pour arroser une plante en fonction de l'humidité de sa terre.
int sensorPin = A0;
int sensorValue = 0;
int PinR = 7;
int PinV = 8;
int PinB = 4;
int pompe = 2;
void setup() {
Serial.begin(9600);
pinMode(PinR,OUTPUT);
pinMode(PinV,OUTPUT);
pinMode(PinB,OUTPUT);
pinMode(pompe,OUTPUT);
digitalWrite(pompe,LOW);
}
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.print("Moisture = " );
Serial.println(sensorValue);
if (sensorValue > 300){
digitalWrite(PinV,HIGH);
digitalWrite(PinR,LOW);
}
else {
digitalWrite(PinR,HIGH);
digitalWrite(PinV,LOW);
digitalWrite(pompe,HIGH);
delay(3000);
}
digitalWrite(pompe,LOW);
delay(3000);
}
DĂ©but de la programmation en tache distincte pour essayer d'utiliser plusieurs capteur/pompe sur une Arduino.
/*
int sensorPin = A0;
int sensorValue = 0;
int PinR = 7;
int PinV = 8;
int PinB = 4;
int pompe = 2;
*/
#define MAX_WAIT_FOR_TIMER 4
unsigned int waitFor(int timer, unsigned long period){
static unsigned long waitForTimer[MAX_WAIT_FOR_TIMER]; // il y a autant de timers que de tâches périodiques
unsigned long newTime = micros() / period; // numéro de la période modulo 2^32
int delta = newTime - waitForTimer[timer]; // delta entre la période courante et celle enregistrée
if ( delta < 0 ) delta = 1 + newTime; // en cas de dépassement du nombre de périodes possibles sur 2^32
if ( delta ) waitForTimer[timer] = newTime; // enregistrement du nouveau numéro de période
return delta;
}
enum {EMPTY, FULL};
struct mailbox_s {
int state;
int val;
};
struct mailbox_s mb = {.state = EMPTY};
//tache pour la lecteur d'un des capteurs.
struct CaptHum{
int timer;
unsigned long period;
int pin;
}
void setup_hum( struct CaptHum * ctx,struct mailbox_s * mb, int timer, unsigned long period, byte pin){
ctx->timer = timer;
ctx->period = period;
ctx->pin = pin;
pinMode(ctx->pin,INPUT);
}
void loop_lum( struct CaptLum * ctx,struct mailbox_s * mb) {
if (!waitFor(ctx->timer, ctx->period)) return; // sort s'il y a moins d'une période écoulée
if (mb->state != EMPTY) return;
mb->val = analogRead(ctx->pin);
mb->state=FULL;
}
//Tache d'activation de l'arosage
struct Active{
int timer;
unsigned long period;
int pinpompe;
int pinledR;
int pinledV;
}
void setup_active( struct CaptHum * ctx,struct mailbox_s * mb, int timer, unsigned long period, byte pin){
ctx->timer = timer;
ctx->period = period;
ctx->pin = pin;
pinMode(ctx->pin,INPUT);
}
void loop_active( struct CaptLum * ctx,struct mailbox_s * mb) {
if (!waitFor(ctx->timer, ctx->period)) return; // sort s'il y a moins d'une période écoulée
if (mb->state != EMPTY) return;
mb->val = analogRead(ctx->pin);
mb->state=FULL;
}
//tache qui desactive la pompe
struct Desactive{
int timer;
unsigned long period;
int pinpompe;
int pinledR;
int pinledV;
}
void setup_active( struct CaptHum * ctx,struct mailbox_s * mb, int timer, unsigned long period, byte pin){
ctx->timer = timer;
ctx->period = period;
ctx->pin = pin;
pinMode(ctx->pin,INPUT);
}
void loop_active( struct CaptLum * ctx,struct mailbox_s * mb) {
if (!waitFor(ctx->timer, ctx->period)) return; // sort s'il y a moins d'une période écoulée
if (mb->state != EMPTY) return;
mb->val = analogRead(ctx->pin);
mb->state=FULL;
}
void setup() {
/*
Serial.begin(9600);
pinMode(PinR,OUTPUT);
pinMode(PinV,OUTPUT);
pinMode(PinB,OUTPUT);
pinMode(pompe,OUTPUT);
digitalWrite(pompe,LOW);
*/
}
void loop() {
/*
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.print("Moisture = " );
Serial.println(sensorValue);
if (sensorValue > 300){
digitalWrite(PinV,HIGH);
digitalWrite(PinR,LOW);
}
else {
digitalWrite(PinR,HIGH);
digitalWrite(PinV,LOW);
digitalWrite(pompe,HIGH);
delay(3000);
}
digitalWrite(pompe,LOW);
delay(3000);
*/
}