Go Down

Topic: Relais simple (Read 730 times) previous topic - next topic

Bonjour et bonne fête.

Désolé de posé une question aussi basic , j'ai un arduino uno et un carte 4 relais, je n'ai aucun idée du codage , je voudrais fermer le circuit du première pendant 3 minutes puis l'éteindre 1 minute
puis fermer le circuit du deuxième 3 secondes après le première pendant 1 secondes.

Merci si vous deniez me reponde :)
Cordialement théo

Carolyne

#1
Dec 25, 2013, 09:12 pm Last Edit: Dec 25, 2013, 09:35 pm by Carolyne Reason: 1
Bonjour theo59310,
Et bien en début de code, tu déclare les variables dont tu va avoir besoin. Comme tu ne sait pas encore quelles elles vont être, tu remontera faire les déclarations au fur et à mesure que tu inventera des variables.
Si ce sont des nombres tenant dans un octet (< 256) tu peux déclarer : byte nom_de_variable  = 0 ; (et le point virgule qu'on oublie)
Pour les nombres plus grands, il y a: int nom_de_variable = 0; (un entier sans décimales)
Pour les nombres à décimales: float nom_de_variable = 0 (déconseillé si non indispensable)
Ensuite vient : void setup(){ (le crochet ouvre le bloc) dans lequel tu va initialiser les broches (pins) qui vont servir.
En input Pullup pour les entrées (boutons ou autres), et que tu mettra à "HIGH" (pour pas qu'elles aient les pieds humides)
Pour la syntaxe de tous ce mic-mac, voir les exemples dans le dossier d'installation (program files sous Windows)
Et en output pour les sorties (les relais ;qu'il va falloir alimenter par des transistors, pour ne pas faire de la peine aux pauvres pins)
Rassure toi, rien de bien compliqué.
Et on ferme le bloc avec: }
Vient ensuite la boucle principale de ton programme: void loop(){
Et là ça se corse (capitale Ajaccio)
Si tu ne mets pas ici une boucle qui attendra que tu appuie sur un bouton pour démarrer le circus, celui-ci démarera dès le téléversement et jusqu'à la fin des temps (ou l'épuisement de la pile, ou la mort du pc)
Donc: while (pin(3)= 0){  (ou LOW) (en français: tant que la pin 3 est HIGH on reste dans la boucle en se tournant les pouces)
On ferme le bloc avec: }
On est toujours dans la boucle principale (et on appuyé sur le bouton, donc on sort de la while).
Pin(5)=HIGH; (la pin5 envoie du jus dans la R=1KOhm, ce jus va dans la base du transistor NPN TIP 120 ou autre qui va bien), qui se réveille, et envoie du jus au relais qui est branché entre son collecteur et le + 5V, tout en restant accroché à la terre par son emmetteur. (une petite diode en parrallèle sur la bobine du relais avec la flèche vers le +, et c'est bon.)
delay(3000); (on attends 3000 millisecondes, soit pas loin de 3 secondes)
Pin(5) LOW; (on coupe le jus)
delay(si tu veux laisser refroidir)
Pin(6) HIGH; méme topos que pour la pin5
Pin(7) HIGH...delay()....LOW....Ext...ext..ext...
} on ferme le bloc de la loop principale, ce qui a pour effet de la relancer.
Lance toi à ton tour, et reviens poster tes exploits. Les experts trierons (si il ya trop d'os et pas assez de viande, tu sera fouétté  :smiley-mr-green:)
Note: Consulter les exemples; consulter la doc de reference (lien en haut de cette page); commencer "petit" avec juste une pin et une led+ R (220 Ohm) à la place du relais, ne rien brancher sur digitalpin0 ni pin1.
Pfiouu..Et ben ça va plus vite à faire qu'à dire...J'ai bien mérité un coca moi. :P

#2
Dec 25, 2013, 10:11 pm Last Edit: Dec 25, 2013, 10:14 pm by theo59310 Reason: 1
Voila mon code , mais sa ne marche pas, je dois obligatoirement utiliser les digital alors peut etre que "pin" ne comviens pas ?
En tout cas merci pour la première réponse qui est très complete :
#define Pin (2)
#define Pin (3)



void setup() {
   // on initialise les sorties et on éteind les leds connectées
   pinMode(Pin(2), OUTPUT);  
   digitalWrite(Pin(2), HIGH);
   pinMode(Pin(3), OUTPUT);  
   digitalWrite(Pin(3), HIGH);
 
}

void loop() {
  Pin(2) HIGH
  delay(1000)
  Pin(3)HIGH
  delay(100)
  Pin(3)LOW
  delay(1OOO)
  Pin(2)LOW

icare

#3
Dec 25, 2013, 10:47 pm Last Edit: Dec 26, 2013, 12:04 am by Jean-François Reason: 1
Bonsoir,

Code: [Select]

#define Pin2 2
#define Pin3 3

void setup() {
   // on initialise les sorties et on éteind les leds connectées
   pinMode(Pin2, OUTPUT);  
   digitalWrite(Pin2, HIGH);
   pinMode(Pin3, OUTPUT);  
   digitalWrite(Pin3, HIGH);
}

void loop() {
//   Pin(2) HIGH
   digitalWrite(Pin2, HIGH);
  delay(1000);
//   Pin(3)HIGH
   digitalWrite(Pin3, HIGH);
  delay(100);
//   Pin(3)LOW
   digitalWrite(Pin3, LOW);
  delay(1000);
//  Pin(2)LOW
   digitalWrite(Pin2, LOW);
}

Avec le code ci-dessus tu devrais avoir un résultat.
Attention : pour mettre ton code, n'oublie pas d'utiliser la balise #
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

#4
Dec 25, 2013, 10:52 pm Last Edit: Dec 25, 2013, 11:01 pm by theo59310 Reason: 1
Malheureusement sa m'indique une erreur de compilation "sketch_dec25a.ino:21:10: error: invalid suffix "OOO" on integer constant"  =(
EDIT: J'ai résolut ce problême mais j'ai que mon relais 2 qui fonctionne le 1 fais rien ... enfaite elle clignote très rapidement (plus rapide que pour le test de demarrage)

icare

Re,

Malheureusement sa m'indique une erreur de compilation "sketch_dec25a.ino:21:10: error: invalid suffix "OOO" on integer constant"  =(

Met le code qui te génère cette erreur
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Enfaite je pense que le problème venais des 000 ... Mais maintenant mon problème c'est que La fiche 3 fonctionne mais la 2 fonctionne un quart de seconde et s'éteins...

albaflo

y'a aucun "OOO" ou "000" dansle code proposé par Icare...

regarde du côté des "delay". Ils comptent en millisecondes, donc
Code: [Select]
delay(1000) //délai de 1 seconde
/*
*/
delay(100); //1/10ième de seconde
il n'y a pas d'âge pour apprendre

Bah nan mais les 000 des 1000 qui allais pas mais le problème est que le relais 2 fait allumer le relais qu'un quard de seconde ...

Jean-François

J'ai corrigé dans le code au dessus, un des 1000 était écrit avec des lettres "o".
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Voilà j'ai mis le code avec la correction,le relais 3 fonctionne Allumage>2sec>arrete>1/8seconde>Allumage
Mais le relais deux ne s'allume pas du tout ! :/

icare

Bonjour,

Voilà j'ai mis le code avec la correction,le relais 3 fonctionne Allumage>2sec>arrete>1/8seconde>Allumage
Mais le relais deux ne s'allume pas du tout ! :/

Ce genre de programme est très simple donc doit fonctionner sans problème.
Mais si tu ne nous mets pas ton code, on ne s'en sortira jamais.
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Bah j'ai mis ton code
Quote
#define Pin2 2
#define Pin3 3

void setup() {
    // on initialise les sorties et on éteind les leds connectées
    pinMode(Pin2, OUTPUT); 
    digitalWrite(Pin2, HIGH);
    pinMode(Pin3, OUTPUT); 
    digitalWrite(Pin3, HIGH);
}

void loop() {
//   Pin(2) HIGH
    digitalWrite(Pin2, HIGH);
   delay(1000);
//   Pin(3)HIGH
    digitalWrite(Pin3, HIGH);
   delay(100);
//   Pin(3)LOW
    digitalWrite(Pin3, LOW);
   delay(1000);
//  Pin(2)LOW
    digitalWrite(Pin2, LOW);
}

icare

#13
Dec 26, 2013, 10:33 am Last Edit: Dec 26, 2013, 10:38 am by icare Reason: 1
Bonjour,
Dans loop() la dernière instruction est :
Code: [Select]
   digitalWrite(Pin2, LOW);
Lorsque cette instruction est terminée, tu passes tout de suite à :
Code: [Select]
   digitalWrite(Pin2, HIGH);
Ton pauvre oeil d'humain ni verra rien. Il faut mettre une pause à la fin.
Code: [Select]
void loop() {
//   Pin(2) HIGH
   digitalWrite(Pin2, HIGH);
  delay(1000);
//   Pin(3)HIGH
   digitalWrite(Pin3, HIGH);
  delay(100);
//   Pin(3)LOW
   digitalWrite(Pin3, LOW);
  delay(1000);
//  Pin(2)LOW
   digitalWrite(Pin2, LOW);
 delay(1000);  //**************TU METS ICI LE TEMPS QUE TU VEUX
               //POUR  REPASSER EN DEBUT DU LOOP() ************
}

@+
Fait attention à ne pas confondre les 0 (zéros) avec les lettres O et o. Nous n'avons pas à faire à des systèmes experts (Avec Arduino c'est oui ou non mais en aucun cas oui, non et peut être  :smiley-mr-green:)
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Ah super sa marche merci beaucoup ! :D

Go Up