Vous êtes ici :   Accueil » Mixage des Moteurs (AtTiny 85)
    Imprimer la page...

Mixage des Moteurs (AtTiny 85)

shéma & code du mixage des moteurs

avec le gouvernail (2021)

AtTiny 85

CI.JPG


Le code a entrer dans l'AtTinY 85

/* programmer avec Arduin0 1.0.5
 
 28 Avril 2020 , programme Mixage moteur U47 avec un Attiny 85
  Mixage des 2 Moteurs en fonction de l'angle du gouvernail pour aider a tourner
  Radio FUTABA
  
 ==============================================================================================*/
#include <SoftRcPulseOut.h> // Appel de la librairie servo

SoftRcPulseOut Variateur_Gauche;   // Declarer le Variateur gauche
SoftRcPulseOut Variateur_Droit;    // Declarer le Variateur droit
SoftRcPulseOut Gouvernail;         // Declarer le servo gouvernail

#define S2   0    //  Declare la variable S2, la sortie voie 2 du recepteur (variateur) sera branchee sur le pin 0 de l'attiny 85
#define S4   1    //  Declare la variable S4, la sortie voie 4 du recepteur (gouvernail) sera branchee sur le pin 1 de l'attiny 85

//moyennage des valeurs impultions envoyees par l'emetteur
#define MOY_SUR_1_VALEURS       0
#define MOY_SUR_2_VALEURS       1
#define MOY_SUR_4_VALEURS       2
#define MOY_SUR_8_VALEURS       3
#define MOY_SUR_16_VALEURS      4
#define MOY_SUR_32_VALEURS      5
#define TAUX_DE_MOYENNAGE       MOY_SUR_8_VALEURS  /* Choisir ici le taux de moyennage parmi les 6 valeurs precedentes possibles listees ci-dessus */
#define MOYENNE(Valeur_A_Moyenner,DerniereValeurRecue,TauxDeMoyEnPuissanceDeDeux) Valeur_A_Moyenner=((((Valeur_A_Moyenner)*((1<<(TauxDeMoyEnPuissanceDeDeux))-1)+(DerniereValeurRecue))/(1<<(TauxDeMoyEnPuissanceDeDeux)))+(TauxDeMoyEnPuissanceDeDeux-1))

int neutre=50;         // Valeur autour du neutre pour avoir aucune action de variateurs
int neutreS2=1500;      // definir le point milieu du manche au centre voie 2 (moteur) (Radio FUTABA)1380
int neutreS4=1500;      // definir le point milieu du manche au centre voie 4 (gouvernail) (Radio FUTABA)1430
int MaxDeb=170;         // debattement maxi servo ou variateur en degres
int MinDeb=10;          // debattement mini servo ou variateur en degres
int Val_M;              // Declarer Val_M (Variateurs)
int Val_MD;             // Declarer Val_MD (variateur droit)
int Val_MG;             // Declarer Val_MG (Variateur gauche)
int Val_G;              // Declarer Val_G (Gouvernail)
int Diff = 20;          // Declarer Diff (Mixage)
//============================================================================================
void setup() 
{
  pinMode(S2, INPUT);    // Declare S2 en entree (moteur) au pin 0 de l'attiny 85 (recepteur voie 2 FUTABA)
  pinMode(S4, INPUT);    // Declare S4 en entree (Gouvernail) au pin 1 de l'attiny 85 (recepteur voie 4 FUTABA)

  Gouvernail.attach(2);          // Attache le servo (gouvernail) au pin 2 de l'attiny 85
  Variateur_Droit.attach(3);     // Attache le servo (variateur Droit) au pin 3 de l'attiny 85
  Variateur_Gauche.attach(4);    // Attache le servo (variateur gauche) au pin 4 de l'attiny 85 

//===========================================================================================
void loop() 

  //----------- gouvernail----------
#define TAUX_DE_MOYENNAGE       MOY_SUR_8_VALEURS   // Choix du taux de moyennage
  static int ValMoyennee4;                          // Valeur a moyennae
  Val_G = pulseIn(S4, HIGH);                        // Val_G = la valeur lue sur le pin 1 de l'attiny 85 venant du recepteur voie 4
  Val_G = map(Val_G,neutreS4-500,neutreS4+500,MinDeb,MaxDeb);   // Etalonne le servo de 10° a 170° avec les valeur du deplacemant du manche 1055 a 1880
  ValMoyennee4=MOYENNE(ValMoyennee4,Val_G,TAUX_DE_MOYENNAGE); // Correction du bruit en fonction du taux de moyennage
  Val_G=ValMoyennee4;
    
  //--------- variateur x2 --------- 
 #define TAUX_DE_MOYENNAGE       MOY_SUR_8_VALEURS   // Choix du taux de moyennage
    static int ValMoyennee2;                          // Valeur a moyennee
    Val_M = pulseIn(S2, HIGH);                        // Val_M = la valeur lue sur le pin 0 de l'attiny 85 venant du recepteur voie 2
 //if (Val_M > neutreS2+neutre || Val_M < neutreS2-neutre )  { // agrandir le neutre autour du manche ±50 impultions
     Val_M = map(Val_M,neutreS2-500,neutreS2+500,MinDeb,MaxDeb); // Etalonne les variateurs de 10° a 170° avec les valeurs du deplacemant du manche 1127 a 1949
     ValMoyennee2=MOYENNE(ValMoyennee2,Val_M,TAUX_DE_MOYENNAGE); // Correction du bruit en fonction du taux de moyennage
     Val_M=ValMoyennee2;
 //}else{
     //Val_M=90;  // variateurs à  0
 //}
 //-----------mixage a partir de ±40° de gouvernail et seulement en marche avant------------
 
 if(Val_M>92 && (Val_G<50 || Val_G>130)){ // si ordre au gouvernail >40° ou >-40° et en marche avant seulement)
    if(Val_M>92 && Val_M<=120){Diff = 20;} // modifier la valeur de mixage en fonction de la vitesse = 20
    if(Val_M>120) {Diff = 40;} // modifier la valeur de mixage en fonction de la vitesse = 40
    
    if(Val_G<50){     // si ordre au gouvernail >40° vers la gauche 
     Val_MD=Val_M;
     Val_MG=Val_M-Diff;  // reduire moteur gauche
    }  
    if(Val_G>130){      // si ordre au gouvernail >-40°  vers la droite
     Val_MG=Val_M;
     Val_MD=Val_M-Diff;  // reduire moteur droit
    }  
 }else{ 
    Val_MD=Val_M; Val_MG=Val_M; // pas de mixage des moteurs  
 }
 //--------- servo ---------  
  Val_MG=constrain(Val_MG, MinDeb, MaxDeb);         // Calibre les valeurs Max et Min pour rester dans la plage acceptable
  Val_MD=constrain(Val_MD, MinDeb, MaxDeb);         // Calibre les valeurs Max et Min pour rester dans la plage acceptable
  
  Gouvernail.write(Val_G);                  // Positionne le servo (Gouvernail) 
  Variateur_Gauche.write(Val_MG);           // Positionne le servo (Variateur gauche)  
  Variateur_Droit.write(Val_MD);            // Positionne le servo (Variateur droit)
  delay(15);                                // Delai pour que les servos atteignes leur position
  SoftRcPulseOut::refresh();                // Rafraichir la bibliotheque servo

//==========================FIN DU PROGRAMME ===============================================


Le servo rouge est le gouvernail , les 2 servos noires à la place des 2 variateurs


Page lue 233 fois