Go Down

Topic: Arduino sur moto (Read 5182 times) previous topic - next topic

patrick_s

Jun 03, 2013, 06:40 pm Last Edit: Jun 03, 2013, 07:29 pm by patrick_s Reason: 1
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 :(

jfs

Mets le code entre les balises "code" STP, le bouton avec # .
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

B@tto

Je sens la réponse venir alors je pose la question : comment pilotes-tu tes relais ?
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

-Standby

L'abus de if tue les if, néglige pas switch case qui va permettre de simplifié ton code.
The Mind is like a parachute it works best when opened.

B@tto

Y'a bien d'autres simplifications à faire, mes vus les symptômes je paris sur le hard xD
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

patrick_s

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?

patrick_s


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?  :)

B@tto


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 ;)
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

patrick_s

Voici le module relais utilisé 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.... :(


B@tto


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".
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

patrick_s

Ah ok, mais je n'ai pas fait entrer du 5V sur l'output, j'ai "juste" mal branché mon relai..

B@tto

Ah oki ! Tant mieux alors ^^
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

patrick_s

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


patrick_s

#13
Jun 07, 2013, 08:27 pm Last Edit: Jun 07, 2013, 09:37 pm by patrick_s Reason: 1
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?

B@tto

le problème c'est qu'avec tous les changements on ne s'est plus où tu en es côté branchement ^^
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Go Up