réalisation régulateur vitesse

bonjour.

ayant enfin fait le tour des possibilités technologiques s’offrant à moi pour faire un régulateur de vitesse, j’ai enfin fixé mon projet.

je pars avec un arduino uno ( platine électronique programmable ) et un servo moteur ( moteur piloté par une valeur d’angle ) et afficheur pour communiquer.

mon bidule pourra servir d’accélérateur " manuel ", de limitateur de vitesse et régulateur.

mode de fonctionnement pour mon isuzu dmax non common rail :

1 : les sécurités, si on touche pédale frein embrayage, il se coupe.
2 : je me sers du capteur PMH pour acquérir la vitesse de rotation.
3 : consigne au servo moteur fixé sur la platine d’accroche du cable pour vitesse plus ou moins.
4 : afficheur vitesse réelle avec circonférence roue.

je me souviens que taz voulait un bidule comme ça, j’ai du en parler une fois avec doumdoum me semble aussi…

j’ai acheté 5 lots au cas ou il y a de la demande.

pour moi, 3 vont me servir, j’ai 2 DMAX maintenant :mdr2:
et le 3ième ira sur mon tracteur pour gérer la vitesse du cardan.

restera 2 dispo quand les essais seront concluants, la théorie c’est bien, la pratique validé c’est mieux.
et j’aurai toujours la possibilité d’en refaire par la suite.

et bien on va suivre ça de près! :slight_smile:

tu prend l info vitesse sur le capteur pmh??
pourquoi ne pas prendre une info capteur abs?? :doute: :doute: :doute:

Mon tracteur et mon dmax n’a pas abs :mdr2:

Le capteur pmh est present sur tout les moteurs.

Mais ça reviens au même, l’important c’est d’avoir une frequence de rotation.

Des idées bizarre ce terrassier :smiley:

Si le prix de revient n’est pas trop élevé et bien sur si cela fonctionne :mdr3: , je t’en prends un.

Pour le prix, comptez 20 € de platine + 20 € de servo…

Et une bonne bouteille pour bibi :mdr2:

C est pas le tout de savoir qui n en veut, mais t en est ou de ton montage :siffle: :siffle:
Parce que ça m intéresse aussi :mdr2: :mdr3:

c est quoi qui t interresse;le regulateur ou la bouteille :doute: :doute: :mdr3: :mdr3:

Programme en C, normalement fini.
Les platines arrivent vendredi ou lundi.
Les servo arrivent dans 1 semaine.

Durée des test 1 bon mois.

Le regul ou la bouteille…bonne question… :copain2:

La bouteille biensur :moqueur2:
Pour le regul m en fout, je conduis avec des chaussures de ski :moqueur2:

#include <Servo.h> //On oublie pas d’ajouter la bibliothèque controle servomoteur auto!

// déclaration des variables

long temps; //variable qui stocke la mesure du temps
const int frein = 2; //définition de la broche 2 de la carte en tant que variable frein
const int on = 3; //broche 3 du micro-contrôleur se nomme maintenant
const int plus = 4;
const int moins = 5;
const int cpmh = 6;
unsigned int tpstourref; // entier de 0 à 65355
unsigned int tpstour;
unsigned int tpstour1;
unsigned int etat;
int delta; // entier de - 32300 à + 32300

Servo moteur; //création d’un nouveau servomoteur



void setup() //fonction d’initialisation de la carte

{
moteur.attach(7,1000,2000); //on déclare l’entrée du servo connectée sur la broche 7
Serial.begin(9600); //on oublie pas de démarrer la liaison série :wink:

pinMode(frein, INPUT); //initialisation de la broche 2 comme étant une entrée
pinMode(on, INPUT);
pinMode(plus, INPUT);
pinMode(moins, INPUT);
pinMode(cpmh, INPUT);
etat=0;
moteur.write(etat);

}

void loop() //fonction principale, elle se répète (s’exécute) à l’infini
{

while(digitalRead(on)==0); //attente le bouton on

// calcul vitesse initiale

while (digitalRead(cpmh)==0); // attente signal capteur
while (digitalRead(cpmh)==1); //attente capteur soit dégagé
temps = millis(); //on stocke la nouvelle heure
while (digitalRead(cpmh)==0); //attente tour terminé
tpstourref = millis() - temps;
tpstour1 = tpstourref;

// calcul précharge

if (tpstourref > 1000) etat = 0;
if (tpstourref > 9000) etat = 5;
if (tpstourref > 8000) etat = 10;
if (tpstourref > 7000) etat = 15;

moteur.write(etat);

// boucle controle

do
{ // calcul vitesse
while (digitalRead(cpmh)==0); // attente signal capteur
while (digitalRead(cpmh)==1); //attente capteur soit dégagé
temps = millis(); //on stocke la nouvelle heure
while (digitalRead(cpmh)==0); //attente tour terminé
tpstour = millis() - temps;

// calcul delta vitesse
delta = tpstour-tpstour1;
tpstour1 = tpstour; // memoire tps precedent

// action
if ((delta > 60) && ( etat < 90)) etat=etat +1;// accelerer 1 cran
if ((delta > 80) && ( etat < 90))etat=etat +1;// accelerer 1 cran de plus
if ((delta > 99) && ( etat < 90))etat=etat +1;// accelerer encore 1 cran de plus

if ((delta < 20) && ( etat > 0))etat=etat +1;// lacher 1 cran
if ((delta < 40) && ( etat > 0))etat=etat +1;// lacher 1 cran
if ((delta < 60) && ( etat > 0))etat=etat +1;// lacher 1 cran

moteur.write(etat); //envoyer info
// interaction

if (digitalRead(plus)==1) ( tpstourref= tpstourref + (tpstourref0.01));
if (digitalRead(moins)==1) ( tpstourref= tpstourref - (tpstourref
0.01));

delay ( 1000000 ); // pause 1s temps action

} while (digitalRead(frein)==0); // sécurité frein
moteur.write(0); // remise zero moteur
}






:orage: :mdr2: :orage:

bonne lecture, c’est le programme de contrôle.
enfin une ébauche, il y a surement des petites choses à corriger ou améliorer.
j’ai fait ça tranquillement hier soir de 23H à 2H …

:bien:

bon première phase de test à blanc…

ça marche pas. :doute: :doute: :doute:

à oui je me souviens maintenant de mes cours d’électronique, il faut des résistances de tirages :mdr2:

je vais vite résoudre ce problème, commande expresse chez conrad, 100 Rt ( résistances de tirages ) , 50 LEDs, une platine de laboratoire, une boite de straps ( connections rigides rapides ) quelques boutons poussoirs et buzzer.

reste plus qu’à attendre la factrice … :sexe: :langue: :baby: :mafia:

:smiley: p…n,t as pas autre à foutre de mieux de 23h à 2h du mat… :siffle: :siffle: :siffle: :siffle:

madame était chez sa mère…fallait s’occuper. :mdr2:

Salut,

beau projet! c’est cool de pouvoir se lancer dans ce genre de truc :bien:

Fait attention à l’interface avec la bagnole, l’arduino peu à priori gérer des entrées en 0-5v il faudrait mieux adapter les niveaux avant d’attaquer la carte (les capteurs freins, pmh doivent être à 12v qd ils sont pas actifs?)

Pour le capteur de freins, embrayage, je les câblerais sur les interruptions pour que le système se coupe au plus vite dès qu’ils sont activés.

coté C, j’ai fait ça y’a un bail donc je peux dire des bêtises dans mes remarques :moqueur2:
tu comptes le temps en milliseconde apparemment, donc le calcul de précharge va fonctionner que si le moteur fait un tour en 1s ou plus?

sur la fin:
“if ((delta < 20) && ( etat > 0))etat=etat +1;// lacher 1 cran”

je ferais “if ((delta < 20) && ( etat >= 0))etat=etat **-**1;” penser au moins sinon ça va toujours accélérer :slight_smile:

Enfin la variable tpstourref évolue en cas d’appui sur un bouton, mais elle sera remplacée par la valeur courante d’un tours de moteur lors du calcul de précharge qui sauf erreur sera fait à chaque cycle. Faudrait plutôt agir sur tpstour1??

Voila j’espère avoir pas raconté trop de conneries :slight_smile:
Bon courage

:merci:

Pour les interruptions, c’est ce que je pensais, mais je n’ai rien trouvé la dessus pour le arduino ( alors qu’avec un PIC je piuvais le faire )

Pour l’interface oui il va falloir mettre des atténuateurs, mais je n’ai pas encore levé le capot. Jattends que le programme soit au point au chaud à la maison sur platine labo.

Oui le temps c’est des millis, et j’ai mis des valeurs pifometriques, il y aura toute une mise au point une fois sur la voiture.

Tu as de très bon reste, car toutes les erreurs relevées ont été corrigées cette nuit. J’avais moins de rhum dans le sang. :mdr2:

Je pense faire une refonte du programme avec seulement des appels de procédures.
Et chercher si je peux pas mettre ces interruptions.

Merci pour ton aide, et garde un oeil la dessus, 2 avis valle mieux que 1.

De toute façon sur les dmax quand tu tien une vitesse constante , il ce fou en sécurité :mdr2: :mdr2: :mdr2:

Pas de pb :wink:

Pour ton interface avec le dmax rien de compliqué, tu mets ta pull up à 5v sur les entrées de l’arduino (apparemment il y en a déjà sur le kit de dev??) et une diode en série sur la sortie (cathode coté voiture).
Edit: voir un ptit trigger de schmitt entre le µ et la pull up pour avoir un beau front en entrée du µ

Il faudra aussi penser à filtrer l’alim (sauf si c’est déjà fait sur le kit) et les entrées des capteurs (filtrage numérique ds le µ par exemple en vérifiant pendant plusieurs coups d’horloge successifs que l’état de l’entrée n’a pas changé)

Coté cerveau moteur tu as pris quoi? il doit être assez costaud?

A+

J’ai lu un peu plus loin la doc, arduino peut gérer 2 interruption :bien: je m’en va changer ça dans le programme.

Pour le servo, à l’heure actuel, je un truc de 9grammes prêté par un collegue qui fait du modelisme.
Ceux que j’avais commandé sont en rupture de stick, donx j’ai été remboursé.
Quand tout sera au point, je calculerai la force qu’il faut.

Faut que j’aille doucement, j’aime bien tout faire au pifomètre et des fois…les mesures sont larges largement fausses :mdr2: