Arduino Forum

International => Français => Topic started by: patrick_s on Jun 03, 2013, 06:40 pm

Title: Arduino sur moto
Post by: patrick_s on Jun 03, 2013, 06:40 pm
Bonjour à tous,

Je réalise mon premier projet sur Arduino UNO. Je l'utilise pour gérer les clignotants ainsi que l'enclenchement/déclenchement des feux de croisement sur une moto.

J'utilise la batterie de la moto pour alimenter l'Arduino, en passant par un régulateur à découpage 5V (alim sur borne 5V).
Les actions 12v (clignotant et feu) sont enclencher par des relais 5V (3x).

Cela fait maintenant plusieurs jour que j'essaie de faire fonctionner ton ça mais chaque fois que je résous un problème un autre apparaît et la je suis vrmt bloqué:

J'ai d'abord configurer mes entrées avec une pull-up, cela fonctionnait bien jusqu'à ce que finalement à l'enclenchement d'une entrée, les autres s'activent intenpestivement. Ne comprenant pas pourquoi et pensant que l'énergie du relais créé une chute de tension sur la carte, je décide de supprimer le pull-up, et d'alimenté mes interrupteur par 5V, sur entrée analogique.Tout fonctionne bien. Je décide alors de m'attaquer au toggle on/off des feu de croisements. Et la les feu fonctionne bien, mais lorsque je l'enclenche, cela enclenche le clignotant gauche. Et les relais s'affole lorsque je passe de cligno gauche a cligno droite, ce qui ne posait pas de problème auparavant.

Je decide de supprimer le code de la partie feu de croisement pour retrouver qqch de stable et là... les clignos s'affole toujours. Je suis perdu, je ne comprend vrmt pas le problème, j'espère que qqun saura m'aider!! :)

Ci-dessous, mon code:

Code: [Select]
// Auteur du Programme : Patrick
// Programme écrit le : 19/5/2013.

/* Commande clignotant et Feu de croisement */

#include <Servo.h> // inclusion de la librairie Servo
#include <Bounce.h> //

const int Gauche=2; // Constante pour la broche 2
const int Reset=3; // Constante pour la broche 3
const int Droite=4; // Constante pour la broche 4
const int Feu_on_off=5;
const int Feu=10; // Constante pour la broche 8
const int Cli_G=12; // Constante pour la broche 11
const int Cli_D=8; // Constante pour la broche 10


bool Clign_G=false;
bool Clign_D=false;
bool wasHigh = false;
bool beenLow = true;
bool tictac = false;
long previousMillis = 0;
long interval = 450;
//long time=500000;

Bounce bouton_feu = Bounce(etat_feu,100 );

void setup()  
{
Serial.begin(9600);

// ------- Broches en sorties numériques -------  
pinMode (Cli_D,OUTPUT); // Broche Cli_D configurée en sortie
pinMode (Cli_G,OUTPUT); // Broche Cli_G configurée en sortie
pinMode (Feu,OUTPUT); // Broche Feu configurée en sortie
 
// ------- Broches en entrées numériques -------  
pinMode (Gauche,INPUT); // Broche Gauche configurée en entrée
 digitalWrite(Guache,HIGH);
pinMode (Droite,INPUT); // Broche Droite configurée en entrée
 digitalWrite(Droite,HIGH);
pinMode (Reset,INPUT); // Broche Reset configurée en entrée
 digitalWrite(Reset,HIGH);
pinMode (Feu_on_off,INPUT); // Broche Feu_on_off configurée en entrée
 digitalWrite(Feu_on_off,HIGH);


// ********************************************************************************

void loop()
{
//-------------------------------------------------------------------------
//---------PHARE
//-----------------------------------------------------------------

   bouton_feu.update();  
 
   if (bouton_feu.read()==LOW && beenLow)      // if the switch has been pressed AND it has been released (beenLow == true)
 {
   if (wasHigh)                         // and if the light was high last time
   {
     digitalWrite(Feu,LOW);             // toggle the light low
     wasHigh = false;                   // define that the light was not high
   }
   else                               // otherwise the light was low last time
   {
     digitalWrite(Feu, HIGH);             // so toggle the light high
     wasHigh = true;                   // and define that the light was high
     }
   beenLow = false;                         // define that the switch hasnt been released, to prevent the light from flashing as the loop runs
 }

 if (bouton_feu.read()==HIGH)                   // if the switch has been released (and is pulled low by the pulldown resistor)
 {
   if (wasHigh)                         // and if the light was on
     digitalWrite(Feu,HIGH);             // keep it on
   else                               // otherwise the light was off
     digitalWrite(Feu,LOW);             // so keep it off
   beenLow = true;                         // define that the switch has been released
 }

//-------------------------------------------------------------------------
//---------CLIGNOTANTS
//-----------------------------------------------------------------
 
   unsigned long currentMillis = millis();
     
      if (currentMillis- previousMillis > interval)
{
 previousMillis = currentMillis;
 if (tictac == false)
       {tictac = true;
            }
 else
tictac = false;
       }
 //    tictac = true;
 
      if (digitalRead(Droite)==LOW)
     {
Clign_D=true;
     }
     
     if (digitalRead(Gauche)==LOW)
     {
Clign_G=true;
     }

     if (digitalRead(Reset)==LOW)
     {
Clign_G=false;
Clign_D=false;
   //    time=5000000;
     }      

//---------GAUCHE
 
       if (Clign_G==true && tictac == true && Cli_G==LOW)
        {digitalWrite(Cli_G, HIGH);
        Clign_D=false;
       }
         
//---------DROITE

      if (Clign_D==true && tictac == true && Cli_D==LOW)
        {digitalWrite(Cli_D, HIGH);
        Clign_G=false;
     }
}

Merci bcp, j'ai vrmt besoin d'aide cela fait une semaine que je cherche chaque soir et je tourne en rond :(
Title: Re: Arduino sur moto
Post by: jfs on Jun 03, 2013, 07:21 pm
Mets le code entre les balises "code" STP, le bouton avec # .
Title: Re: Arduino sur moto
Post by: B@tto on Jun 03, 2013, 08:13 pm
Je sens la réponse venir alors je pose la question : comment pilotes-tu tes relais ?
Title: Re: Arduino sur moto
Post by: -Standby on Jun 03, 2013, 08:17 pm
L'abus de if tue les if, néglige pas switch case qui va permettre de simplifié ton code.
Title: Re: Arduino sur moto
Post by: B@tto on Jun 03, 2013, 08:20 pm
Y'a bien d'autres simplifications à faire, mes vus les symptômes je paris sur le hard xD
Title: Re: Arduino sur moto
Post by: patrick_s on Jun 03, 2013, 09:40 pm
Je pense que j'ai trouvé, j'ai vrmt pas réfléchis très loin niveau hard en effet, j'ai branché le signal de commande du relais AINSI QUE son alim sur mon output... j'm'en veux haha,mais je testerais demain et selon devrait régler le problème, enfin je l'espère.

Par contre j'ai un deuxième soucis, je cherche a piloter un servomoteur sur la moto, d'après le schéma électrique, celui-ci à cinq bornes 5V,input,GND, 12V, 12V... je ne comprend pas pourquoi deux bornes 12V... et surtout je n'arrive pas àle faire bouger, j'utilise la librairie servo.h mais je n'arrive pas le faire bouger. Je déclare le servo sur la broche 9, je fais tout comme dans un exemple fonctionnel et rien ne bouge, pensez-vous que le soucis viendrais de la partie 12V?
Title: Re: Arduino sur moto
Post by: patrick_s on Jun 03, 2013, 09:47 pm

L'abus de if tue les if, néglige pas switch case qui va permettre de simplifié ton code.


Je ne maîtrise pas trop les switch case, tu pourrait me faire une démo sur une partie du code?  :)
Title: Re: Arduino sur moto
Post by: B@tto on Jun 03, 2013, 09:54 pm

Je pense que j'ai trouvé, j'ai vrmt pas réfléchis très loin niveau hard en effet, j'ai branché le signal de commande du relais AINSI QUE son alim sur mon output... j'm'en veux haha,mais je testerais demain et selon devrait régler le problème, enfin je l'espère.


Si tu as branché l'alim alors que c'était en OUPUT ta sortie est surement décédée ... Si ce n'est pas plus. Commande de relais : comment exactement ?


Par contre j'ai un deuxième soucis, je cherche a piloter un servomoteur sur la moto, d'après le schéma électrique, celui-ci à cinq bornes 5V,input,GND, 12V, 12V... je ne comprend pas pourquoi deux bornes 12V... et surtout je n'arrive pas àle faire bouger, j'utilise la librairie servo.h mais je n'arrive pas le faire bouger. Je déclare le servo sur la broche 9, je fais tout comme dans un exemple fonctionnel et rien ne bouge, pensez-vous que le soucis viendrais de la partie 12V?


Un servo à 5 fils ? Pas courant ça ... Du coup pas étonnant que la lib ne le gère pas. Mais si je peux te donner un conseil : arrête de tout brancher au pif ... Documente toi, vérifie ce qui peut-l'être au multimètre, progression pas par pas ... T'as déjà surement foutu ton Atmega en l'air (la moitié en tout cas), ça vaudrait le coup t'en tirer des bonnes habitudes ;)
Title: Re: Arduino sur moto
Post by: patrick_s on Jun 04, 2013, 02:57 pm
Voici le module relais utilisé http://www.robotshop.com/module-relais-dfrobot.html (http://www.robotshop.com/module-relais-dfrobot.html)

J'ai branché les fils (5V et output) sur la sortie Arudino, j'espère que cela n'a pas posé de soucis, je verrai (je vois pas bien pourquoi je brûlerai la sortie...?).

Il est vrai que je n'ai pas trop fait gaffe au moment de ce branchement car il y a déjà bcp de câblage, enfin bref.

Maintenant pour le servo j'ai fait toute les mesures possible avec mon matériel avant de la branché, sortie le schéma électrique de la moto etc. Après ben il faut essayer, pas le choix.

j'ai du +5VDC du GND 2x 12VDC et un output qui a une valeur de 2VDC en postion fermée et 2.9V en position ouverte, mais je ne peux malheureusement pas mesurer de signal (qui devrait être pulsé..)

J'ai pensé à utiliser l'arduino en oscillo avec Xscillo sur la borne "output", je trouve un signal alternatif avec une période de 10ms... Je crois que je me sert mal de cet outil parce que je ne vois aucun offset et que au multimètre je mesure bien une tension DC.... :(

Title: Re: Arduino sur moto
Post by: B@tto on Jun 05, 2013, 06:46 pm

J'ai branché les fils (5V et output) sur la sortie Arudino, j'espère que cela n'a pas posé de soucis, je verrai (je vois pas bien pourquoi je brûlerai la sortie...?).


En INPUT, l'Atmega active un une résistance d'entrée pour limiter le courant en entrée et la protéger. En OUTPUT afin de pouvoir débiter du courant il faut désactiver cette résistance. Du coup si tu rentres une tension dessus, il n'y a plus de limite pour le courant. Si tu fais un digitalWrite(pin,LOW) tu fais un "court-circuit".
Title: Re: Arduino sur moto
Post by: patrick_s on Jun 05, 2013, 06:54 pm
Ah ok, mais je n'ai pas fait entrer du 5V sur l'output, j'ai "juste" mal branché mon relai..
Title: Re: Arduino sur moto
Post by: B@tto on Jun 05, 2013, 07:04 pm
Ah oki ! Tant mieux alors ^^
Title: Re: Arduino sur moto
Post by: patrick_s on Jun 05, 2013, 09:50 pm
J'ai câblé mnt correctement les relais et... aucun changement :( je vais essayer de changer l'atmega demain, j'en avais pris un de rechange,mais je crois pas que le soucis vienne de là, vu que c'est idem pour toutes les broches...

Title: Re: Arduino sur moto
Post by: patrick_s on Jun 07, 2013, 08:27 pm
Voilà je suis de retour, tout marche à merveille!!  Mais... dès que j'allume le moteur, les entrées s'activent.Il semblerait après essai que ce soit le cable de commande qui mériterais d'être blindé... Ou est-ce possible de filtré le bruit afin de pas avoir à tout décabler?
une solution?
Title: Re: Arduino sur moto
Post by: B@tto on Jun 07, 2013, 10:37 pm
le problème c'est qu'avec tous les changements on ne s'est plus où tu en es côté branchement ^^
Title: Re: Arduino sur moto
Post by: -Standby on Jun 08, 2013, 01:58 pm

Voilà je suis de retour, tout marche à merveille!!  Mais... dès que j'allume le moteur, les entrées s'activent.Il semblerait après essai que ce soit le cable de commande qui mériterais d'être blindé... [font=Verdana]Ou est-ce possible de filtré le bruit afin de pas avoir à tout décabler?[/font]
une solution?


Il faut faire une cage de faraday est les torsader pour atténuer le bruit :)
Title: Re: Arduino sur moto
Post by: patrick_s on Jun 09, 2013, 05:27 pm
C'est un cable 10x0.5.... donc je vais le changer pour le même en version blindé

Niveau câblage, tout est ok