[Projet Arduino] porte poulailler automatique

bonjour,je suis nouveaux sur ce forum.
je débute ce projet qui me permettra de me familiariser avec l'électronique et la programmation.
En bref joindre l'utile à l’agréable :slight_smile:
j'ai donc sélectionné les composants suivant mais je me pose la question suivante : le tout peut être programmé ensemble ? Faut il utiliser un transistor pour le moteur ?

mini panneaux solairehttps://www.amazon.fr/NUZAMAS-Panneau-Solaire-Batterie-Chargeur/dp/B075LYJF67/ref=sr_1_5?__mk_fr_FR=ÅMÅŽÕÑ&keywords=mini+panneau+solaire+12v&qid=1571932488&sr=8-5

moteur 12v DC 12V Moteur Electrique de Réduction Réversible Turbine à Couple Elevé Boîte à Engrenages à Vis sans Fin(5RPM): Amazon.fr: High-tech

regulateur de charge etbools 12 V Amazon.fr : regulateur de charge solaire

interrupteur fin course UEETEK 10pcs 250V 5A SPDT 1NO 1NC levier de rouleau de charnière momentanée Micro commutateurs 3 broches: Amazon.fr: Bricolage

microcontroleur arduino nano

une photo resistance 1M ohms

resistance 10 K ohms

breadbord

transistor

merci de votre aide,mon but n'est pas recopier un projet existant mais de réaliser le miens a ma façon sinon autant simplement recopier un projet existant :smiley:

je vais bientôt faire un projet semblable qui ferme la porte a la tombée de la nuit et qui l'ouvre au levé du jour.

Pour capter la luminosité, j'utilise une photorésistance, j'ai déjà trouvé les valeurs analogRead quand la nuit tombe ( environ 60 si je me souviens bien )

Mais pour piloter le moteur ( motoréducteur pour moi car je vais prendre un systeme monte-vitre de voiture: il y a déjà pas mal de choses de déjà faites dessus ), vu qu'il doit aller dans les deux sens, je vais utiliser un pont en h, cela utilise 4 transistors ( 2 canal n et 2 canal p ).
regarde cela, ça explique tout.

Pour ma part, je n'ai pas commencé le code ni le hardware, j'ai juste fait des schémas et des mesures pour faciliter le travail prochain.

alors moi je fait exactement la même chose , sauf que j'ai du 220 donc plus facile .

J'utilise un L298N avec un moteur comme le tiens , sauf que le miens a un encodeur , car je voulais esayer de ne pas utilisé des capteur de fin de course mais j'ai abandonné pour le moment

j'en suis a écrire le code mais je découvre le monde de l’électronique donc je galère un peux , je fais des tutos a droite a gauche pour comprendre tout les éléments séparé =)

J'ai pu faire ceci avec switch mécanique de fin de course et commande a l'arduino de désactiver le courant
En plus, 2 bouton pour ouvrir ou fermer manuellement.

Voici pour mon code toujours en test

// Test L293D

// RTC
#include <Wire.h>

// Motor connections
int en1 = 9; //Active pin 1 L293D
int en2 = 8; //Active pin 9 L293D
int in1 = 11; //Moteur+ pin 2 L293D
int in2 = 10; // Moteur- pin 7 L293D
int in3 = 7; //Moteur+ pin 10 L293D
int in4 = 6; // Moteur- pin 15 L293D
// Bouton poussoir
int BpO = 3; // Bp Ouverture manuel
int BpF = 2; // BP Fermer manuel
int SWH = 4; // Switch Haut NO
int SWB = 5; // Switch Bas NO

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("Programme Poulailler MotorShield");
  // Set all the motor control pins to outputs
  pinMode(en1, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(en2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  // Turn off motors - Initial state
  digitalWrite(en1, LOW);
  digitalWrite(en2, LOW); 
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW); 
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  // Bp en interne
  pinMode(BpO, INPUT_PULLUP);
  pinMode(BpF, INPUT_PULLUP);
  pinMode(SWH, INPUT_PULLUP);
  pinMode(SWB, INPUT_PULLUP);
 
}

void loop()
{
  //Commande Bouton poussoir Ouvert et Fermer, si uniquement un des deux est presser
  if ((digitalRead(BpO) == 0) && (digitalRead(BpF) == 1) && (digitalRead(SWH) == 1 )) {
    MoteurOuvre();
  }
  else if ((digitalRead(BpF) == 0) && (digitalRead(BpO) == 1) && (digitalRead(SWB) == 1 )) {
    MoteurFerme();
  }
   else
      {
     
      MoteurStop();
    }
    
/*  else {
  static uint32_t ref = 0;
  if (millis() - ref >= 1000)
  {
    ref += 1000;
  }
}

MoteurOuvre();
delay(2000);
MoteurStop();
MoteurFerme();
delay(2000);
*/
}

void MoteurOuvre()
{
  // Ouverture
  if (digitalRead(SWH) ==1) {
  digitalWrite(en1, HIGH);
  digitalWrite(en2, LOW);
  delay(300);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
 // Serial.println("Ouverture de la porte");
}
}

void MoteurFerme()
{
  // Fermeture
  if (digitalRead(SWB) ==1) {
  digitalWrite(en1, LOW);
  digitalWrite(en2, HIGH);
  delay(300);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  //Serial.println("Fermeture de la porte");
  }
}

void MoteurStop()
{
  // Stop
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(300);
  digitalWrite(en1, LOW);
  digitalWrite(en2, LOW);
 // Serial.println("Stop");
}