[Arduino/Attiny85] mixer 2 variateurs

L’espace pour parler de tout ce qui concerne l’électronique embarquée
Avatar de l’utilisateur
papy94
Messages : 626
Inscription : 23 janv. 2010 14:31
Localisation : Champigny sur marne
Contact :

[Arduino/Attiny85] mixer 2 variateurs

Message par papy94 »

Mixage de 2 variateurs
Cela peut être utile pour les sous-marins qui ont donc 2 hélices, ce n’est pas toujours facile de tourner quand les 2 hélices ont la même vitesse de rotation
En générale nous mettons les 2 variateurs sur le même manche, donc les 2 variateurs reçoivent les mêmes ordres

Démonstration avec montage normal :

Le servo rouge représente le gouvernail, les 2 servos noirs les 2 variateurs (gauche et droit)

En réalité, ce qui est bien, c’est que quand je tourne à gauche, mon hélice gauche ralentisse et que mon hélice droite augmente et pour tourner a droite le contraire
Avec le même circuit imprimé et le même Attiny 85 que j’ai utilisé pour la démonstration de la pompe de cale autonome, j’ai réalisé cette commande

Démonstration avec un Attiny 85 monté entre le récepteur et le servo gouvernail et les 2 variateurs (servos noirs):


Comme vous le voyez sur la vidéo tant que mon gouvernail ne dépasse pas les 20° de chaque coté, les 2 variateurs (servos) se déplace de façon identique
Si je dépasse les 20° à droite, a ce moment la, le variateur gauche diminue, et le variateur droit augmente et plus je vais augmenter l’angle de mon gouvernail, plus l’écart entre les 2 variateurs augmentera

Même si mes 2 variateurs sont a 0, le fait de dépasser l’angle de 20° avec le gouvernail, les 2 variateurs se décaleront, âpres le fait d’aller en avant ou en arrière nous permettra de nous écarter du bord

Donc a vos fers à souder, le même circuit imprimé, le même Attiny85, juste le programme qui a été remplacé

Je vous mets le programme que j’ai fais, il fonctionne correctement, certain dirons il y a mieux, mais c’est un bon exemple pour ce lancer dans l’arduino ou l’attiny85 et s’amuser à créer des petits circuits utiles

Code : Tout sélectionner

/*==============================================================================================
 17 avril 2017 , programme pour un Attiny 85
  Mixage des 2 Moteurs en fonction de l'angle du gouvernail pour aider a tourner  
 ==============================================================================================*/
#include <SoftRcPulseOut.h> // Appel de la librairie servo

SoftRcPulseOut Variateur_Gauche;   // Déclarer le Variateur gauche
SoftRcPulseOut Variateur_Droit;    // Déclarer le Variateur droit
SoftRcPulseOut Gouvernail;         // Déclarer le servo gouvernail

#define S2   0    //  Déclare la variable S2, la sortie voie 2 du recepteur (variateur) sera branchée sur le pin 0 de l'attiny 85 
#define S4   1    //  Déclare la variable S4, la sortie voie 4 du recepteur (gouvernai) sera branchée sur le pin 1 de l'attiny 85

//moyennage des valeurs impultions envoyées 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 neutreS2=1380;      //definir le point milieu du manche au centre voie 2 (moteur)
int neutreS4=1430;      //definir le point milieu du manche au centre voie 4 (gouvernail)
int Val_M;              // Déclarer Val_M (moteurs)
int Val_MD;             // Déclarer Val_MD (moteur droit)
int Val_MG;             // Déclarer Val_MG (moteur gauche)
int Val_G;              // Déclarer Val_G (Gouvernail)
int Diff;               // Déclarer Diff (Mixage)
//============================================================================================
void setup() 
{ 
  pinMode(S2, INPUT);    // Déclare S2 en entrée (moteur) au pin 0 de l'attiny 85
  pinMode(S4, INPUT);    // Déclare S4 en entrée (Gouvernail) au pin 1 de l'attiny 85

  Gouvernail.attach(2);          // Attache le servo (gouvernail) au pin 2 de l'attiny 85
  Variateur_Droit.attach(3);     // Attache le servo (variateur gauche) 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 à moyennée
  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,0,180);   // Etalonne le servo de 0 à 180° avec les valeur du déplacemant du manche 1055 à 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 à moyennée  
  Val_M = pulseIn(S2, HIGH);                        // Val_M = la valeur lue sur le pin 0 de l'attiny 85 venant du recepteur voie 2
  Val_M = map(Val_M,neutreS2-500,neutreS2+500,0,180); // Etalonne les servos de 0 à 180° avec les valeurs du déplacemant du manche 1127 à 1949  
  ValMoyennee2=MOYENNE(ValMoyennee2,Val_M,TAUX_DE_MOYENNAGE); // Correction du bruit en fonction du taux de moyennage
  Val_M=ValMoyennee2;
  
 //-----------mixage a partir de ±20° de gouvernail------------
 Diff=Val_G-90;                // valeur du mixage
 if(Diff>20 || Diff<-20){      // si ordere au gouvernail > 20° ou < -20)
    Val_MG=Val_M+(Diff/2);  Val_MD=Val_M-(Diff/2);  // mixage des moteurs
    }else{
      Val_MD=Val_M; Val_MG=Val_M; // pas de mixage des moteurs
    } 
 //--------- servo ---------  
  Val_MG=constrain(Val_MG, 0, 180);         // Calibre les valeurs Max et Min pour rester dans la plage acceptable
  Val_MD=constrain(Val_MD, 0, 180);         // 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);                                // Délai pour que les servos atteignes leur position
  SoftRcPulseOut::refresh();                // Rafraîchir la bibliothèque servo
} 

//==========================FIN DU PROGRAMME ===============================================
la bibliothèque utilisée SoftRcPulseOut.h à été crée par Philippe loussouarn et Alain Claverie l'utilise dans beaucoup de ses exemples

PS : le servo rouge bat un peu la chamade du coté droit, cela vient du fait que je suis en butée, dans le programme, j’ai mis des courses de 0 à 180° :woow:
Dernière modification par papy94 le 24 avr. 2017 02:24, modifié 1 fois.
A+
Thierry
Image
Avatar de l’utilisateur
Rackham
Messages : 2667
Inscription : 23 janv. 2010 18:43
Contact :

Re: [Arduino/Attiny85] mixer 2 variateurs

Message par Rackham »

Heuu moi j'ai pas de remarque :? .. on contraire tu as beaucoup à m'apprendre sur le sujet :siffle:
Haddock : Messieurs, Cet homme est innocent : Tintin nous l’a dit. Allez-vous lui laisser ces menottes… et l’empêcher d’aller me chercher une bouteille de cognac ?
Avatar de l’utilisateur
pierre
Messages : 3576
Inscription : 08 janv. 2010 12:42
Localisation : Créteil (94)

Re: [Arduino/Attiny85] mixer 2 variateurs

Message par pierre »

Je me le mets derrière l'oreille. Cela peut servir.
Merci.
Mes sous-marins en état de marche :
Un Surcouf, un Seaview, une Flying sub, un Minisub, un subracer.
Autres modèles : quadricoptère MiniDex amphibie full carbon, Quad Alien 680 pliable slowfly + Gopro
J-Pay quad 250 racer, Hexacoptère Typhoon H Yunnec.
Jean michel
Messages : 11
Inscription : 01 avr. 2017 14:14
Localisation : Narbonne

Re: [Arduino/Attiny85] mixer 2 variateurs

Message par Jean michel »

Bonjour,super le post ,bravo,je cherchais comment faire pour réaliser ce système(sur typhoon lecma)je vais me servir de vos indications,par contre c est indentique avec un Arduino et un attiny ou difference de programmation ?
Comment est le branchement électrique des servo et alim sur la carte?
Merci.cdlt
Avatar de l’utilisateur
papy94
Messages : 626
Inscription : 23 janv. 2010 14:31
Localisation : Champigny sur marne
Contact :

Re: [Arduino/Attiny85] mixer 2 variateurs

Message par papy94 »

salut

non c'est identique sur un arduino mini,Nano ou autre,juste changer dans le programme ,l'attibution des pins en fonction de tes branchements sur ta carte

Code : Tout sélectionner

  pinMode(S2, INPUT);    // Déclare S2 en entrée (moteur) au pin 0 de l'attiny 85
  pinMode(S4, INPUT);    // Déclare S4 en entrée (Gouvernail) au pin 1 de l'attiny 85

  Gouvernail.attach(2);          // Attache le servo (gouvernail) au pin 2 de l'attiny 85
  Variateur_Droit.attach(3);     // Attache le servo (variateur gauche) au pin 3 de l'attiny 85
  Variateur_Gauche.attach(4);    // Attache le servo (variateur gauche) au pin 4 de l'attiny 85 
les 2 voies (signal variateur et signal gouvernail) et une masse(-) du récepteur vont sur ta carte arduino , et le servo gouvernail ainsi que les 2 variateurs parte de ta carte arduino

Code : Tout sélectionner

int neutreS2=1380;      //definir le point milieu du manche au centre voie 2 (moteur)
int neutreS4=1430;      //definir le point milieu du manche au centre voie 4 (gouvernail)
et modifier les 2 valeurs qui sont les neutres de ma telecommande ,mais pas forcement les tiens
A+
Thierry
Image
Jean michel
Messages : 11
Inscription : 01 avr. 2017 14:14
Localisation : Narbonne

Re: [Arduino/Attiny85] mixer 2 variateurs

Message par Jean michel »

Bonjour,merci des infos,je vais essayer ,vu carte sur RS,après essai.a+.Jean.michel
Avatar de l’utilisateur
papy94
Messages : 626
Inscription : 23 janv. 2010 14:31
Localisation : Champigny sur marne
Contact :

Re: [Arduino/Attiny85] mixer 2 variateurs

Message par papy94 »

sur RS cela va te couter un bras, mais tu as peut etre des bras de rechange ^^

vas voir sur Ebay ,chez les chinois, pour 3€ et en même temps prend un carte Nano Prototype Shield I/O Extension Board Expansion Module for Arduino Nano V3.0
lien google https://www.google.fr/search?safe=off&c ... xeeZ9qZ9ZQ

mais bon c'est toi qui vois .................
A+
Thierry
Image
Répondre