Pages: [1]   Go Down
Author Topic: Relais simple  (Read 545 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Cordialement théo
Logged

Offline Offline
God Member
*****
Karma: 6
Posts: 534
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley-razz
« Last Edit: December 25, 2013, 03:35:18 pm by Carolyne » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: December 25, 2013, 04:14:06 pm by theo59310 » Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1238
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

Code:
#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 #
« Last Edit: December 25, 2013, 06:04:24 pm by Jean-François » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Malheureusement sa m'indique une erreur de compilation "sketch_dec25a.ino:21:10: error: invalid suffix "OOO" on integer constant"  smiley-cry
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)
« Last Edit: December 25, 2013, 05:01:56 pm by theo59310 » Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1238
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re,
Malheureusement sa m'indique une erreur de compilation "sketch_dec25a.ino:21:10: error: invalid suffix "OOO" on integer constant"  smiley-cry
Met le code qui te génère cette erreur
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

laval, france
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
grand débutant sur arduino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

regarde du côté des "delay". Ils comptent en millisecondes, donc
Code:
delay(1000) //délai de 1 seconde
/*
*/
delay(100); //1/10ième de seconde
Logged

il n'y a pas d'âge pour apprendre

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ...
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3227
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai corrigé dans le code au dessus, un des 1000 était écrit avec des lettres "o".
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ! :/
Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1238
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}
Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1238
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Dans loop() la dernière instruction est :
Code:
   digitalWrite(Pin2, LOW);
Lorsque cette instruction est terminée, tu passes tout de suite à :
Code:
   digitalWrite(Pin2, HIGH);
Ton pauvre oeil d'humain ni verra rien. Il faut mettre une pause à la fin.
Code:
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)
« Last Edit: December 26, 2013, 04:38:10 am by icare » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah super sa marche merci beaucoup ! smiley-grin
Logged

Pages: [1]   Go Up
Jump to: