Régulateur de vitesse avec arduino UNO

Bonjour à tous,

Je me présente, je suis en prépa aux écoles d'ingénieur et je prépare un genre d'exposé sur un système que l'on a créé ou amélioré.
Mon objectif est de créer un régulateur de vitesse (l'arduino) sur un scooter électrique. Cependant, le "language" arduino nous a été très peu approfondis, on a plus mis l'accent sur du Python.

J'aurais alors besoin de votre assistance afin de mener à bien mon projet.

Voici le début de mon programme :

/* Active un moteur, puis s'éteint. */

/* Le Pin 11 de l'arduino est connecté au moteur on le donne un nom : */
int moteur = 11;

// après appui sur reset :
void setup() {
int input(VitesseRequise)
int input(VitesseObservée)

// initialiser la broche en tant que sortie numérique.
pinMode(moteur, OUTPUT); }

//analyser l'entrée analogique et comparer la vitesse celle fixée:
analogRead(broche)
if (VitesseObservée > VitesseRequise) :

if (VitesseObservée < VitesseRequise) :

if (VitesseObservée = VitesseRequise) :

Je sais que ce n'est pas grand chose et qu'ill manque des choses en plus.. ::slight_smile:
mais j'aurais juste besoin de votre opinion vu que pour c'est nouveau pour moi :slight_smile:

Merci d'avoir pris la peine de me lire, merci à vous :slight_smile: @+

déclare tes entrées comme ceci plutôt ^^
int vitesse observee = 8 //par exemple 8, le numéro de l'entrée
pinMode(vitesse observee, INPUT);

après tu peut choisir soit de le mettre en pull up ou pull down, a toi de voir

et quand tu lit une valeur avec analogread il faut que la valeur que la fonction renvoie soit stocker dans une variable
double vitesse = analogRead(vitesse observee); //soit lecture de la broche vitesse observee

mais bon tu n'a en faite pas besoin d'initialiser la broche a lire en entrée...
regarde la: analogRead() - Arduino Reference

bonjour,
commence a lire un peu les exemples de l'ide arduino.
tu auras les bases pour ordonner ton programme

pour s'y retrouver plus facilement
1 définir les pin et donner un nom de variable
2 setup définir input ouput pour chaque nom de variable
3 loop
lire les données
comparer par if
faire ce qu'il faut dans les if

ca pourrait donner ca en très simple

int led = 13;
int X = 10;

void setup(){
       pinMode(led, OUTPUT);
}

void loop(){
 if (X>100){
   digitalWrite (led, HIGH);
   X=0;
 }
   else if(X<50){
     digitalWrite(led, HIGH);
     delay(500);
     digitalWrite(led, LOW);
   }
     else{
      digitalWrite(led, LOW);
    }
X++;
}

Je vous remercie pour vos réponses, je corrige actuellement mon programme sous vos conseils.
J'editerais ce post pour vous montrer quelle tête il aura.
Merci encore !

Salut, voici une nouvelle version
Il y a des choses que je ne sais pas encore traduire par les bonnes fonctions ( en rouge et entre points d'exclamation dans le programme).
J'aimerais avoirs vos avis ou conseils
Merci à vous

/* Active un moteur, en ajustant sa vitesse à la vitesse requise puis s'éteint sur demande de l'utilisateur */

/* Le Pin 11 de l'arduino est connecté au moteur on le donne un nom : */
int moteur = 11;
VariableMot = 1

// après appui sur reset :
void setup() {
// initialiser la broche en tant que sortie analogique et allumage moteur :
analogWrite(2,255)
pinMode(moteur, OUTPUT); }
}
//Le Pin 12 associé au capteur de vitesse :
int vitesse = 12
Variabvitesse = 2

//Le pin 13 associé à l'entrée de la vitesse consigne :
int vitconsignne = 13
Variabconsigne = 3

//Mise en route du régulateur par rapport à la vitesse consigne :
if press ON
read vitesse
!!ajuster vitconsigne sur vitesse!!

//Comparaison de la vitesse requise et celle observée
if vitconsigne == vitesse !!ne rien faire!!
if vitconsigne < vitesse !!augmenter vitesse jusqua arriver comme vitesse!!
if vitconsigne > vitesse !!supprimer alimention du moteur!!

// Boucle jusqu'a appui sur reset:
void loop() {
digitalWrite(moteur, HIGH); // Allume moteur au voltage maximum
if press reset digitalWrite(moteur, LOW) break;
}

Tu as pensé à utiliser un systeme PID plutot que le basique "si pas assez vite moteur on, si trop vite moteur off" ?

Dekapon_Meindes:
Tu as pensé à utiliser un systeme PID plutot que le basique "si pas assez vite moteur on, si trop vite moteur off" ?

Très bonne idée, merci j'avais oublié cette possibilité !
Admettons que j' associe un PID à l'arduino. Et que le PID soit soumis aux ordres suivants :

Tous les x millisecondes, faire :
erreur = consigne - mesure;
somme_erreurs += erreur;
variation_erreur = erreur - erreur_précédente;
commande = Kp * erreur + Ki * somme_erreurs + Kd * variation_erreur;
erreur_précédente = erreur

Est-ce ça pourrait le faire si je remplace ça par toute la partie "comparaison de vitesse" ?
Merci beaucoup