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 ===============================================
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°