Bonjour!
Mon projet consiste à automatiser l'ouverture de mon poulailler . Le matin la porte s'ouvre et le soir elle se ferme a une heure programmé.
La "porte" est en réalité un velux. Il y a un poid à l'exterieur qui force le velux à s'ouvrir, à l'interieur du poulailler un moteur DC équipé d'un petit pignon tracte une chaine de velo qui est attaché au velux.
#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeAlarms.h>
RTC_DS1307 RTC;
int pwm_b = 11;
int dir_b = 13;
time_t syncProvider()
{
return RTC.now().unixtime();
}
void setup()
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning())
{
Serial.println("RTC is NOT running!");
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
setSyncProvider(syncProvider);
pinMode(pwm_b, OUTPUT);
pinMode(dir_b, OUTPUT);
// create the alarms
Alarm.alarmRepeat(13,42,0, MorningAlarm); //horaires test
Alarm.alarmRepeat(13,42,20,EveningAlarm);
}
void loop(){
digitalClockDisplay();
Alarm.delay(1000); // wait one second between clock display
}
// functions to be called when an alarm triggers:
void MorningAlarm(){
Serial.println("ouverture");
digitalWrite(dir_b, HIGH);
analogWrite(pwm_b, 225);
delay(4000);
analogWrite(pwm_b, LOW);
}
void EveningAlarm(){
Serial.println("fermeture");
digitalWrite(dir_b,LOW);
analogWrite(pwm_b, 225);
delay(4500);
analogWrite(pwm_b, LOW);
}
void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
void printDigits(int digits)
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
J'ai réussi sauf que la fermeture demande plus d'effort au moteur. Demander au moteur de tourner plus longtemps que pendant l'ouverture n'est pas une solution, c'est alors que j'ai pensé a des switch de fin de course pour etre sur que la porte soit bien fermé.
Mes 2 switchs sont en série, je posterais le schema complet prochainement.
Mais voila que je n'arrive pas à coder le tout.
une idée? un conseil ?
#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeAlarms.h>
RTC_DS1307 RTC;
int pwm_b = 11;
int dir_b = 13;
int sw1 = 6;
int sw2 = 7;
time_t syncProvider()
{
return RTC.now().unixtime();
}
////////////////////////////////////////////////
void setup()
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning())
{
Serial.println("RTC is NOT running!");
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
setSyncProvider(syncProvider);
pinMode(pwm_b, OUTPUT);
pinMode(dir_b, OUTPUT);
pinMode(sw1, INPUT);
pinMode(sw2, INPUT);
Alarm.alarmRepeat(12,17,0, MorningAlarm);
Alarm.alarmRepeat(12,18,0,EveningAlarm);
}
//////////////////////////////////////////////////////////////////////////////
void loop(){
digitalClockDisplay();
Alarm.delay(1000);
////////////////////////////////////////
void MorningAlarm(){
Serial.println("ouverture");
while(digitalRead(sw1) == LOW){
digitalWrite(dir_b, HIGH);
analogWrite(pwm_b, 225);
}
}
/////////////////////////////////////////////////
void EveningAlarm(){
Serial.println("fermeture");
while(digitalRead(sw2) == LOW){
digitalWrite(dir_b, HIGH);
analogWrite(pwm_b, 225);
}
}
////////////////////////////////////////////////
void digitalClockDisplay()
{
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
void printDigits(int digits)
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}