Go Down

Topic: Porte poulailler automatisé (Arduino+RTC+Ardumoto sheild+switch) [presque fini] (Read 933 times) previous topic - next topic

MrFOX

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.




Code: [Select]
#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 ?


Code: [Select]
#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);
}


jean-I

- si tes deux switch sont en serie, je ne voit pas comment tu pourrai avoir les entrées sw1 et sw2 discossiées.
- tu as cablé les switch en NC.
- il te manque une fermeture de parenthese dans ton void loop.
- tu n'arrete pas la sortie pwm apres la detection FDC.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy