code du suiveur avec pro mini avec L293D PDF


À propos / Télécharger Lire le document
Nom original: code du suiveur avec pro mini avec L293D.pdf
Auteur: Gérard Deremetz

Ce fichier au format PDF 1.4 a été généré par Writer / OpenOffice 4.1.3, et a été envoyé sur Fichier-PDF le 09/10/2017 à 19:51, depuis l'adresse IP 92.149.x.x. La présente page de téléchargement du fichier a été vue 964 fois.
Taille du document: 190 Ko (5 pages).
Confidentialité: fichier public





Aperçu du document


Code pour un suiveur avec une carte Arduino nano et le module L293D
// attribution des broches pour sens de rotation Azimute
int sensAz1 = 7;
int sensAz2 = 8;
// attribution des broches pour sens de rotation Hauteur
int sensH1 = 12;
int sensH2 = 13;
// attribution des broches vitesse des deux moteur ( Azimute et Hauteur)
int vitesseAz = 11; // broche PWM
int vitesseH = 10; // broche PWM
// attribution des broches aux capteurs de lumière
int capteurEst = A0;
int capteurOuest = A1 ;
int capteurHaut = A2;
int capteurBas = A3;
// déclaration des variables de valeur des capteurs
int valeurCapteurEst = 0;
int valeurCapteurOuest = 0;
int valeurCapteurHaut = 0;
int valeurCapteurBas = 0;
int valeurCapteurHall = 0;
// declaration de variable de controle pour la pleine lumière
volatile float controleAz = 0 ;
volatile float controleHt = 0 ;
int ecartAz =0;
int ecartH =0;
// variaviables pour la fonction arret moteur
int arret1 = 0;
int arret2 = 0;
int arret3 = 0;
// déclaration de la variable lumière pour le teste de lumière mini utile au programme
int lumiere = 0 ; // variable pour lumiere mini
int Var = 0;
//declaration de la variable led pour visualiser l'arrêt des deux moteurs
int led = A6
//.............................................................
// declaration pour l'anemometre
//.............................................................
volatile int compteur = 0 ;
//.............................................................
void setup() //execute une seul fois
{
// declaration des broches en sortie (PWM)
pinMode (sensAz1,OUTPUT);
pinMode (sensAz2,OUTPUT);
pinMode (sensH1,OUTPUT);
pinMode (sensH2,OUTPUT);
pinMode ( vitesseAz,OUTPUT);
pinMode ( vitesseH,OUTPUT);
pinMode (led, OUTPUT);
// declaration des broches en entrée
pinMode (capteurEst,INPUT);
pinMode (capteurOuest,INPUT);

Cablage

pinMode (capteurHaut,INPUT);
pinMode (capteurBas,INPUT);
// instruction de communication avec le PC
Serial.begin (9600);
}
void loop() // execute en boucle
{
Serial.println ("ok ok ok debut de boucle ");
//prend la valeur des capteurs lumière
valeurCapteurEst = analogRead (capteurEst);
valeurCapteurOuest = analogRead (capteurOuest);
valeurCapteurHaut = analogRead (capteurHaut);
valeurCapteurBas = analogRead (capteurBas);
valeurCapteurEst = valeurCapteurEst + ecartAz;
// ajuouter la constante 'ecart' si nécessaire après teste
valeurCapteurHaut = valeurCapteurHaut + ecartH ; // ajuouter la constante 'ecart' si nécessaire après teste
//donne à la variable lumière une moyenne à partir des capteurs Est et Ouest pour aprécier s'il y a assez de lumière
//avec une valeur donné dans la boucle while
lumiere = ((valeurCapteurEst+valeurCapteurOuest)/2);
Serial.println ("Si la lumiere est inferieur a 200 le suiveur attend.");
Serial.print ( "La lumiere est egale a : " );
Serial.println ( lumiere );
//.......................................... teste le vent ….....................
testeSecurite ();
//.........................................................................................
Serial.println ("tourne en boucle tant que 'lumière' est < que 200 : valeur à ajuster " );
while (lumiere < 200) return;
// affiche les valeurs des capteurs de lumière
Serial.println ("La lumiere est suffisante pour chercher le soleil");
Serial.println ("Valeurs des capteurs de lumiere");
Serial.print ("Est- ");Serial.println(valeurCapteurEst);
Serial.print ("Ouest- ");Serial.println(valeurCapteurOuest);
Serial.print ("Haut- ");Serial.println(valeurCapteurHaut);
Serial.print("Bas- ");Serial.println(valeurCapteurBas);
//.............................................................................
// prend le valeur de l'ecart des deux cellule est/ouest et haut/bas
//.............................................................................
controleAz = (valeurCapteurEst - valeurCapteurOuest);
controleHt = (valeurCapteurHaut - valeurCapteurBas);
//.............................................................
//
rend positif l'écart trouvé
//.............................................................
if (controleAz < 0)
{
controleAz = controleAz * -1;
}
if (controleHt < 0)
{
controleHt = controleHt *-1;
}
//.............................................................
//
verifie si les nombres sont positif sur pc
//.............................................................
Serial.println (" controle Azimute");
Serial.println (controleAz);
Serial.println (" controle hauteur");
Serial.println (controleHt);
//..............................................................
// réinitialise les variable à 0 pour le controle pleine lumiere
//..............................................................

arret1 = 0;
arret2 = 0;
arret3 = 0;
Serial.println ("arret1");
Serial.println (arret1);
Serial.println ("arret2");
Serial.println (arret2);
Serial.println ("arret3");
Serial.println (arret3);
//.......................................................................................
//
teste la position du suiveur pour le plein soleil
if ( controleAz < 11 ) // valeur modifiable
{
arret1 = 1;
Serial.println ("arret1");
Serial.println (arret1);
// moteur azimute à l arret
}
if ( controleHt < 11)
{
arret2 = 2;
Serial.println ("arret2");
Serial.println (arret2);
// moteur Hauteur a l arret
}
//.................................................................
//
donne une valeur a "arret3"
//.................................................................
arret3 = arret1 + arret2;
Serial.println ("valeur d'arret3 apres addition");
Serial.println (arret3);
//.................................................................
// si les cellules sont en plein lumiere: arret par un delai modifiable ( 5 minutes ) led clignote
//..................................................................
if (arret3 == 3 )
{
arretmoteur ();
}
//................................................................................
// les lignes suivantes permettent de definir quel moteur doit tourner pour être en pleine lumière et dans quel sens
//................................................................................
if ((arret3 == 0) && ( valeurCapteurEst > valeurCapteurOuest ))
{
EstAz ();
}
if ((arret3 == 0) && ( valeurCapteurOuest > valeurCapteurEst ))
{
OuestAz ();
}
if ((arret3 == 0) && ( valeurCapteurHaut > valeurCapteurBas ))
{
HautH ();
}
if ((arret3 == 0) && ( valeurCapteurBas > valeurCapteurHaut ))
{
BasH ();
}
if ((arret3 == 2 )&& (valeurCapteurOuest > valeurCapteurEst ))
{
OuestAz ();

}
if ((arret3 == 2 )&& ( valeurCapteurEst > valeurCapteurOuest ))
{
EstAz ();
}
if ((arret3 == 1 )&& ( valeurCapteurBas > valeurCapteurHaut ))
{
BasH ();
}
if ((arret3 == 1 )&& ( valeurCapteurHaut > valeurCapteurBas ))
{
HautH ();
}
//....................................................................................
//
declaration de l'interuption pour l'anemometre
//....................................................................................
attachInterrupt(0,compt,RISING);
}
// ...............................................................
//
ensemble des fonctions
//................................................................
void arretmoteur ()
// fais clignoter la led rouge pendant ( 2 secondes x 150 = 5 minutes )
{
Var = 0;
while(Var < 150)
{
// affichage pour controle de coherance Permet de suivre l'evolution des valeurs des capteurs.................
valeurCapteurEst = analogRead (capteurEst);
valeurCapteurOuest = analogRead (capteurOuest);
valeurCapteurHaut = analogRead (capteurHaut);
valeurCapteurBas = analogRead (capteurBas);
Serial.print ("Est- ");Serial.println(valeurCapteurEst);
Serial.print ("Ouest- ");Serial.println(valeurCapteurOuest);
Serial.print ("Haut- ");Serial.println(valeurCapteurHaut);
Serial.print ("Bas- ");Serial.println(valeurCapteurBas);
testeSecurite ();
Serial.println ("Je suis en pleine lumiere");
digitalWrite (led,HIGH);
delay (1000);
digitalWrite (led, LOW );
delay (1000);
Var ++ ;
}
void EstAz ()
{
testeSecurite ();
digitalWrite (sensAz1,LOW);
// variables déterminant un sens dans le pont en H du L293D
digitalWrite (sensAz2,HIGH);
analogWrite (vitesseAz,255);
// mise en route du moteur Azimute
Serial.println (" Le moteur 'Azimute' tourne vers l'Est");
delay ( 5000 ); // ajustable impaire
analogWrite (vitesseAz, 0); // arret moteur
}
void OuestAz ()
{
testeSecurite ();
digitalWrite (sensAz1,HIGH);
// variables déterminant un sens dans le pont en H du L293D
digitalWrite (sensAz2,LOW);
analogWrite (vitesseAz, 255);
// mise en route du moteur Azimute
Serial.println (" Le moteur 'Azimute' tourne vers l'Ouest");
delay (6000 );
// ajustable paire

// arret moteur
analogWrite (vitesseAz, 0);
}
void HautH ()
{
testeSecurite ();
digitalWrite (sensH1,LOW);
// ces deux variable détermine un sens dans le pont en H du L293D
digitalWrite (sensH2,HIGH);
analogWrite (vitesseH, 255);
// mise en route du moteur Hauteur
delay ( 5000 );
// ajustable impaire
// arret moteur
analogWrite (vitesseH, 0);
}
void BasH ()
{
testeSecurite ();
digitalWrite (sensH1,LOW);
// variables déterminant un sens dans le pont en H du L293D
digitalWrite (sensH2,HIGH);
analogWrite (vitesseH, 255);
// mise en route du moteur Hauteur
Serial.println (" Le moteur 'Hauteur' tourne vers le bas");
delay ( 6000 );
// ajustable paire
analogWrite (vitesseH, 0);
// arret moteur
// .............................................
// declaration des fonctions pour l'anemometre
//..............................................
void compt ()
{
compteur++; //compteur est incremente par l'interuption
}
void testeSecurite ()
{
compteur = 0; //mise a zero du compteur
delay (5000) ; //compteur est incremente pendant 5 secondes par l'interuption( peut être moifier)
// teste de la puissance du vent .........................
if (compteur > 10)
// ' 10 ' valeur à etalonner en rapport avec la puissance du vent
{
Serial.print ("valeur du compteur...................... ");
Serial.println (compteur);
securite(); // apelle la fonction de securite
}
}
void securite ()
{
Serial.println (" mise en securite");
digitalWrite (sensH1,LOW);
// ces deux variable détermine un sens dans le pont en H du
L293D
digitalWrite (sensH2,HIGH);
analogWrite (vitesseH, 255); // mise en route du moteur Hauteur
Serial.println (" Le moteur 'Hauteur' tourne vers le haut pour mise en sécurite");
Var = 0;
//
while (Var < 5) // boucle de "5 X 1 minute" modifiable pour permettre la coupure de la cate par buttee mecanique
sur un micro contacteur
{
Serial.println ("Securite en route");
delay (60000);
Var ++ ;
}
}
// broche A4 et A5 réservé pour un afficheur Lcd I2C.


Aperçu du document code du suiveur avec pro mini avec L293D.pdf - page 1/5
Aperçu du document code du suiveur avec pro mini avec L293D.pdf - page 2/5
Aperçu du document code du suiveur avec pro mini avec L293D.pdf - page 3/5
Aperçu du document code du suiveur avec pro mini avec L293D.pdf - page 4/5
Aperçu du document code du suiveur avec pro mini avec L293D.pdf - page 5/5







Télécharger le fichier (PDF)





Documents récents du même auteur


Choix libre du mode de cuisson de la terre max 31856 2   2 juillet 2019
Choix libre du mode de cuisson de la terre   28 juin 2019
livret mis à jour le 21 03 18   21 mars 2018
organigramme 4   1er février 2018
code poulailler 2   31 janvier 2018
code 3   27 décembre 2017
livret mis à jour le 17 10 17   17 octobre 2017
code suiveur avec Uno et schield R3   9 octobre 2017
Roket en terre 2   24 septembre 2016
Livret Héliyourte   27 mars 2016
fiche l'égume   19 février 2016
présentation-microferme 4   6 février 2016
Livret serre   1er février 2016
livret élévateur   20 janvier 2015
Livret warré   20 janvier 2015
Livret de dessins éolienne 3000   2 novembre 2012

Sur le même sujet..







Ce fichier a été mis en ligne par un utilisateur du site Fichier PDF. Identifiant unique du document: 00549478.
⚠️  Signaler un contenu illicite
Pour plus d'informations sur notre politique de lutte contre la diffusion illicite de contenus protégés par droit d'auteur, consultez notre page dédiée.