Re: Module Arduino
Posté : 31 janv. 2016, 18:48
T'as oublié les femmes, recommences depuis le début !
Forum MG automobiles : conseils techniques, sorties et petites annonces sur le plus grand forum dédié aux automobiles MG : MGF et TF, MG6, MGB et tous les modèles MG anciens et modernes. MG Expert
https://www2.mgcontact.eu/phpBB2/
je suis pas pour les histoires, tu me connais, mais Rachel risque de pas aimer quand je vais lui direOldtimer42 a écrit :T'as oublié les femmes, recommences depuis le début !
Au rique de passer pour un vieux réac, je note que dans les 2 cas ça fait tout aussi mal!la sodomie, les impôts,
ça dépend de quel côté du manche tu esMG O1->B69 a écrit :Au rique de passer pour un vieux réac, je note que dans les 2 cas ça fait tout aussi mal!la sodomie, les impôts,
Bonjour,korrignu a écrit :héhé ! Salut les gens !
Si tu commences à mettre tes doigts dans l'arduino, tu pourrais songer à ce qu'il faut pour monter une sonde pour un tripmaster DIY
...
Code : Tout sélectionner
// ------------------------------------------------------------------------------------------
// declaration partie poussoirs pilotage moteur
//-------------------------------------------------------------------------------------------
// arrêt moteur par bouton poussoir sur pin 7
#define Capt7 7
int etatCapt7;
int etatprecCapt7=HIGH;
// ------------------------------------------------------------------------------------------
// declaration partie capteur inductif de rotation
//-------------------------------------------------------------------------------------------
#define Capt2 2 //num entree numerique (num 2) pour la sortie capteur inductif rotation (fil noir)
int vitessecomptage=0; //vitesse de rotation entree tr/mn avec capt 2 impuls/tr
int compteCapt=0; //compteur impulsions capteur
unsigned long T0=0; // date de debut de comptage des impulsions
unsigned long currentms; // date en cours dans la boucle principale
long interval=1000; // duree de comptage des impulsions en ms (1s)
unsigned long Tcapt=0; //date du dernier changement d'etat du capteur
long intervalcapt=5; // tempo en ms (5ms) pour eviter le rebond de comptage capteur
unsigned long currentcaptms; //date en cours dans la routine d'interruption de lecture du capteur
// ------------------------------------------------------------------------------------------
// declaration partie moteur (pour carte MotorShield)
//-------------------------------------------------------------------------------------------
const int
PWM_A = 3, //constante sortie vitesse moteur A
DIR_A = 12, //constante canal moteur A
BRAKE_A = 9, //constante canal frein A
SNS_A = A0, //constante sens rotation moteur A
consignemoteur = 195; //consigne de vitesse moteur 0-255
int vitessemoteur=0; //consigne moteur courante
int etatmoteur= 0 ; // 1 si phase de mise en route, 0 si phase stop;
// ------------------------------------------------------------------------------------------
// declaration partie Vitesse et Transmission
//-------------------------------------------------------------------------------------------
const int tpkTransmission = 814; //tours/Km du cable compteur
int vitessevoiture=0; //vitesse calculée voiture
// ------------------------------------------------------------------------------------------
// Sous-programme d'initialisation (reset ou mise sous tension carte)
//-------------------------------------------------------------------------------------------
void setup() {
// Configuration da la sortie A MotorShield (moteur)
pinMode(BRAKE_A, OUTPUT); // Brake pin pour canal A
pinMode(DIR_A, OUTPUT); // Direction pin pour canal A
// Configuration rotation moteur
digitalWrite(BRAKE_A, LOW); // brake LOW = frein desactive
digitalWrite(DIR_A, LOW); // direction LOW = rotation moteur sens - (sens horaire vu cote arbre moteur)
// Configuration input (capteur rotation)
pinMode(Capt2,INPUT_PULLUP); // Capteur declare sur entree numerique num 2
attachInterrupt(0,Compter,FALLING); //declaration du sous-programme fonctionnant sur interruption port 0 (=entree num2) sur front descendant
// Configuration boutons poussoirs pilotage moteur
pinMode(Capt7,INPUT_PULLUP);
// affichage moniteur sorie pour debuggage
Serial.begin(9600);
Serial.println("Motor shield DC motor Test:\n");
}
// ------------------------------------------------------------------------------------------
// Sous-programme de calcul de la vitese en fonction de l'info capteur de rotation
//-------------------------------------------------------------------------------------------
int calculvitesse(int entree) {
float result;
double vcpt;
vcpt = float(entree)*60/float(tpkTransmission);
result = vcpt;
return int(result);
}
// ------------------------------------------------------------------------------------------
// Sous-programme de comptage des impulsions capteur, fonctionne sur interruption
//-------------------------------------------------------------------------------------------
void Compter()
{
currentcaptms = millis();
if(currentcaptms-Tcapt > intervalcapt) compteCapt ++ ;
else {};
Tcapt = millis();
}
// ------------------------------------------------------------------------------------------
// Sous-programmes de modification de la vitesse du moteur
//-------------------------------------------------------------------------------------------
void lancemoteur(){
etatmoteur =1;
while (vitessemoteur < consignemoteur)
{
vitessemoteur ++;
analogWrite(PWM_A,vitessemoteur); // envoi consigne de vitesse au moteur
if (vitessemoteur < 20) {delay(10);} else {delay(50);}
}
}
void stopmoteur(){
etatmoteur = 0;
while (vitessemoteur >0)
{
vitessemoteur --;
analogWrite(PWM_A,vitessemoteur); // envoi consigne de vitesse au moteur
delay(50);
}
}
// ------------------------------------------------------------------------------------------
//--------------------------------- PGM PRINCIPAL -------------------------------------------
// ------------------------------------------------------------------------------------------
void loop() {
currentms = millis();
//--- action sur front descendant bouton poussoir -----
etatCapt7 =digitalRead(Capt7);
if ((etatCapt7 == LOW) and (etatprecCapt7 == HIGH))
{
etatprecCapt7 = LOW;
if (etatmoteur == 0) {lancemoteur();} else {stopmoteur();}
}
if ((etatCapt7 == HIGH) and (etatprecCapt7 == LOW)) {etatprecCapt7 = HIGH;}
// -----------------------------------------------------
if(currentms-T0 > interval)
{
// ------Calculs vitesse ----
vitessecomptage = 30 * compteCapt; // en tr/mn (2 impulsions/tr)
vitessevoiture = calculvitesse(vitessecomptage);
Serial.print("vitesse comptage (tr/mn) : ");
Serial.println(vitessecomptage);
Serial.print("Vitesse voiture : ");
Serial.println(vitessevoiture);
// ----------------------------
compteCapt=0;
T0 = millis();
}
}