Contrôle de RC et Arduino : œuvres complètes A (9 / 10 étapes)

Étape 9: Réservoir de direction W/continue Rotation Servos

Cette dernière étape est l’aboutissement de tous les sujets précédents et mon code-citerne steer. J’ai fait le réservoir orienter le code afin d’utiliser uniquement le bâton du pouce droit de l’émetteur pour ensuite contrôler deux servos de CR. N’oubliez pas que mon TX est réglé en mode 3 et je n’ai pas tous les canaux inversés. Le stick analogique droit est canal 3 pour l’axe horizontal et channel 4 pour l’axe vertical. Voici mon esquisse à l’aide d’un Arduino UNO au lieu de la MEGA. J’utilise limites servo différents qui permettent à un micro-servo déplacer un 180 degrés et les différentes gammes pour réservoir de direction pour donner plus de sensibilité.

Assurez-vous de remercier mon merveilleux modèle Sid (ci-dessus photo) pour être tel un bon sport, tandis que je me sers lui à peaufiner mon programme.

/ * Ceci sera croquis sera lu tous les 8 canaux d’un récepteur RC et les valeurs par l’intermédiaire de série d’entrée
moniteur. Programmé pour l’Arduino Uno et Adafuit Servo pilote Board(pins A5-SCL and A4-SDA).
Mon émetteur est également définie en mode 3 donc le joystick droit est comme suit :
Axe de verticle = canal 3
Horixontal axe = canal 4
===========================================================================================*/
Bibliothèques incluses
#include
#include

Activer le mode debug d’entrer des données par l’intermédiaire de série
/ * 0 = OFF, 1 = Engineering Data activé, 2 = Raw Data On, 3 = valeur Servo sortie,
4 = Eng raw & sortie de données Servo, 5 = sortie de données steer Tank, * /
const int debug = 0 ;

Tableaux pour les emplacements de broche de canal et les données des canaux
const int canaux = 8 ;
const int [] chPin = {2,3,4,5,6,7,8,9} ; Emplacements de code PIN
int chEng [8] ; Données du magasin Massé
int chSer [8] ; Stockage de valeur de servo

Signal de RX massant valeurs
const int RXLo = 920 ;
const int RXHi = 1640 ;
const int RXDeadLo = 1265 ;
const int RXDeadHi = 1295 ;
const int RXMid = 1280 ;

Gammes de servo
const int Serlon = 130 ;
const int serMid = 330 ;
const int serHi = 530 ;
const int tankLo = 250 ;
const int tankHi = 410 ;

Sortie de servo
Adafruit_PWMServoDriver servo=Adafruit_PWMServoDriver(0x40) ;
const int freq = 50 ;
const int serNum = 8 ;
int ch3 ; Variable de steer Tank
int ch4 ; Variable de Steer Tank

Configurer les emplacements de code pin, serial, débute ou I2C
void setup() {}
Si (débogage > 0) {}
Serial.Begin(115200) ; Nous allons PLAID !
}

Broches d’entrée :
pour (int i = 0; i pinMode(chPin[i],INPUT) ;
}

servo.Begin() ;
servo.setPWMFreq(freq) ;
} //End du programme d’installation

Programme principal
void loop() {}
Passer des valeurs de chy à chz, chx à chy et lire les nouvelles valeurs
pour (int i = 0; i chEng[i]=pulseIn(chPin[i],HIGH) ;

Signal de massage
chEng [i] = contraindre (chEng [i], RXLo, RXHi) ; Couper le bas et l’extrémité supérieure
Si (chEng [i] < = RXDeadHi & & chEng [i] > = RXDeadLo) {//Create bande morte
chEng [i] = RXMid ;
}

Mapper les valeurs de l’Eng à la sortie de servo
Si (chEng [i] > = RXLo & & chEng [i] < = RXDeadLo) {//Map plage inférieure des valeurs
chSer [i] = carte (chEng [i], RXLo, RXDeadLo, serLo, serMid) ;
}
ElseIf (chEng [i] == RXMid) {//Map valeur du milieu
chSer [i] = serMid ;
}
ElseIf (chEng [i] > = RXDeadHi & & chEng [i] < = RXHi) {//Map plage la plus élevée des valeurs
chSer [i] = carte (chEng [i], RXDeadHi, RXHi, serMid, serHi) ;
}
} //End de boucle For

Steer de réservoir à l’aide du stick analogique droit, outputing à deux servos de rotation continue
/ * En utilisant le système cartésien quadrant et toute valeur donnée au moteur droit est inversé à
assurer le bon fonctionnement * /

Premier quadrant.
/ * Flip gamme servo droit en ce qui concerne la position de l’axe vertical. Cela permet de garder le
ensemble servo de gauche à la position verticale et réduire le speed.* servos droite /
Si (chSer [2] > = serMid & & chSer [3] > = serMid) {}
CH3 = chSer [2] ;
CH4=Map(chSer[3],serMid,serHi,chSer[2],serMid) ;
}

Deuxième Quadrant
/ * Flip gamme servo gauche en ce qui concerne la position verticale de l’axe. Celui-ci n’est pas comme
détroit vers l’avant dans le Quadrant 1, mais l’exemple de code suivant, que j’utilisais avant devrait
apparence similaire.
CH3=Map(chSer[3],serLo,serMid,serMid,serHi) ;
servo.setPWM(2,0,map(ch3,serHi,serMid,chSer[2],serMid)) ;
Comment je suis arrivé avec ce qui suit est par simplification et pour sauver la santé.* /
ElseIf (chSer [2] > serMid & & ch3=map(chSer[3],serLo,serMid,serMid,chSer[2]) chSer [3] ;
CH4 = chSer [2] ;
}

Troisième Quadrant
/ * Flip la gamme servo droit en ce qui concerne la position verticale de l’axe. La servocommande gauche
continueront à voyager vers l’arrière tandis que le servo de droit est slowed.* /
ElseIf (chSer [2] < = serMid & & chSer [3] < = serMid) {}
CH3 = chSer [2] ;
CH4=Map(chSer[3],serMid,serLo,chSer[2],serMid) ;
}

Quatrième Quadrant
/ * Flip la gamme servo gauche en ce qui concerne la position de l’axe vertivle, le servo de droite
sera continut voyageant vers l’arrière pendant la servocommande gauche est slowed.* /
else {if(chSer[2]serMid)
CH4 = chSer [2] ;
CH3=Map(chSer[3],serMid,serLo,chSer[2],serMid) ;
}

/ * Activer CCW Rotation en inversant le servo de droite et transfert servo gauche pour ce qui est
le axis.* horizontal /
Si (chSer [2] == serMid & & chSer [3] > = serMid) {}
CH3 = chSer [3] ;
CH4=Map(chSer[3],serMid,serHi,serMid,serLo) ;
}

/ * Activer la Rotation CW par transfert servo droite et marche arrière servo gauche pour ce qui est
le axis.* horizontal /
Si (chSer [2] == serMid & & chSer [3] < = serMid) {}
CH3 = chSer [3] ;
CH4=Map(chSer[3],serMid,serLo,serMid,serHi) ;
}

Remapper variables pour donner la meilleure sensibilité et la pleine gamme n’est pas nécessaire pour atteindre la pleine vitesse.
CH3=Map(CH3,serLo,serHi,tankLo,tankHi) ;
CH4=Map(CH4,serLo,serHi,tankLo,tankHi) ;

Renversant le signal de servo de droite, signal du canal 4.
Si (ch4 > = serMid) {}
CH4=Map(CH4,serMid,serHi,serMid,serLo) ;
}
ElseIf (ch4=map(ch4,serMid,serLo,serMid,serHi) de ch4 ;
}

Sortie au pilote de servo
servo.setPWM(2,0,ch3) ;
servo.setPWM(3,0,ch4) ;

Sortie de débogage
Si (debug == 1 || debug == 4) //Engineering données
{
Serial.Print ("EngData| CH1: ") ;
Serial.Print (chEng[0]) ;
Serial.Print ("| CH2: ") ;
Serial.Print (chEng[1]) ;
Serial.Print ("| CH3: ") ;
Serial.Print (chEng[2]) ;
Serial.Print ("| CH4: ") ;
Serial.Print (chEng[3]) ;
Serial.Print ("| CH5: ") ;
Serial.Print (chEng[4]) ;
Serial.Print ("| CH6: ") ;
Serial.Print (chEng[5]) ;
Serial.Print ("| CH7: ") ;
Serial.Print (chEng[6]) ;
Serial.Print ("| Ch8: ") ;
Serial.Print (chEng[7]) ;
Serial.println ("|") ;
}

Si (debug == 3 || debug == 4)
{
Serial.Print ("SerData| CH1: ") ;
Serial.Print (chSer[0]) ;
Serial.Print ("| CH2: ") ;
Serial.Print (chSer[1]) ;
Serial.Print ("| CH3: ") ;
Serial.Print (chSer[2]) ;
Serial.Print ("| CH4: ") ;
Serial.Print (chSer[3]) ;
Serial.Print ("| CH5: ") ;
Serial.Print (chSer[4]) ;
Serial.Print ("| CH6: ") ;
Serial.Print (chSer[5]) ;
Serial.Print ("| CH7: ") ;
Serial.Print (chSer[6]) ;
Serial.Print ("| Ch8: ") ;
Serial.Print (chSer[7]) ;
Serial.println ("|") ;
}

Si (debug == 5) {}
Serial.Print(CH3) ;
Serial.Print("|") ;
Serial.println(CH4) ;
}
} //End de programme principal

Je sais pas comment j’ai fait le réservoir de direction est loin d’être optimale, mais c’est comment j’ai pensé à elle.  Le quatrième quadrant ne fonctionne pas et j’ai encore à faire fonctionner.  Ce n’est que les grandes d’un problème puisqu’il s’agit d’une preuve de robot de concept dans le travail avec contrôle RC et Arduino avant que je déménage à pleine échelle.

Faites-moi savoir si vous avez des questions, et je ferai de mon mieux pour répondre et mettre à jour en conséquence. Veuillez inclure l’étape et certains détails expliquant votre problème pour m’aider à obtenir sur la même page avec vous.

Articles Liés

Contrôle par capteur sonore Arduino

Contrôle par capteur sonore Arduino

Contrôle par capteur sonore ArduinoYouTube VidéoDocuments
Contrôler un cafard avec Arduino pour moins de 30 $

Contrôler un cafard avec Arduino pour moins de 30 $

Il y a quelques années j'ai vu cafard contrôlé de la basse-cour cerveau smartphone, et il a juste soufflé mon esprit ! J'ai essayé d'obtenir ma mère de me laisser acheter, mais la mention de cafards lui convaincu du contraire. :) J'ai commencé à fair
Moteurs DC contrôle et stepper avec L298N double moteur contrôleur de Modules et Arduino

Moteurs DC contrôle et stepper avec L298N double moteur contrôleur de Modules et Arduino

Vous n'avez pas à dépenser beaucoup d'argent pour commander les moteurs avec un Arduino ou compatible. Après une chasse autour de nous trouve un module de contrôle moteur soignée basé sur l'IC H-pont L298N qui peut vous permet de contrôler la vitesse
Voiture d’occasion inclinaison contrôlée en utilisant arduino

Voiture d’occasion inclinaison contrôlée en utilisant arduino

Salut, tout le monde c'est mon premier instructables est donc un peu de compréhension. pls, postez vos suggestions pour les futurs instructables. Je suis en train de documenter chaque étape des leurs pour les débutants qui veulent s'initier à la cons
Dub Cadet: MIDI holographique & contrôleur de LED pour Arduino - partie 1

Dub Cadet: MIDI holographique & contrôleur de LED pour Arduino - partie 1

Selon moi, des instruments de musique holographiques sera monnaie courante dans l'avenir, apparaître dans le monde des écoles (pour l'éducation), à domicile (pour le fun), aux bureaux de médias (pour la créativité) et dans les studios de musique (de
Contrôleur de feux tricolores Arduino w/Remote Control

Contrôleur de feux tricolores Arduino w/Remote Control

j'ai eu un feu de circulation que j'ai remise à neuf.  La seule chose reste à faire est de construire le contrôleur pour les modèles de signal de la lumière.  Pour lui donner une touche, j'ai intégré une télécommande.  C'était aussi l'occasion rêvée
Projecteur IR contrôle à l’aide de Arduino Uno

Projecteur IR contrôle à l’aide de Arduino Uno

Durant Halloween et de Noël, j'ai du projet vidéo dans une fenêtre chez moi. Le système utilise un projecteur LED qui affiche des personnages virtuels sur une fenêtre. L'effet crée l'impression comme si les caractères sont vraiment à l'intérieur de v
Contrôler un Furby avec Arduino (ou autre microcontrôleur)

Contrôler un Furby avec Arduino (ou autre microcontrôleur)

Le Furby Million de dollars : Nous pouvons reconstruire. Nous disposons de la technologie.Suite de la précédente Instructable où nous excisés cerveau primitif de Furby, il est maintenant temps de le remplacer par quelque chose de plus.Ce Instructable
Fiable, sécurisé, contrôle à distance SMS personnalisables (Arduino/pfodApp) - aucun codage ne requis

Fiable, sécurisé, contrôle à distance SMS personnalisables (Arduino/pfodApp) - aucun codage ne requis

Mise à jour : 19 mai 2015 : utilisation du pfodParser bibliothèque Version 2.5 ou ultérieure. Il corrige un problème signalé de ne pas laisser suffisamment de temps pour le bouclier pour se connecter au réseau après avoir alimenté vers le hautIntrodu
Comment faire un Robot à 2 roues, contrôlé par IR, Compatible Arduino

Comment faire un Robot à 2 roues, contrôlé par IR, Compatible Arduino

Cette instructable est sur comment vous pouvez faire votre propre robot afin que :-Il est contrôlé par une télécommande IR-Vous êtes en mesure d'accéder et de modifier le code pour le contenu de votre coeur-Vous pouvez changer le robot anti-torsion à
Contrôler votre maison avec Arduino

Contrôler votre maison avec Arduino

Arduino est un excellent outil pour contrôler et chose du sens, c'est pourquoi la plupart des gens l'utiliser, mais il y a un gros hic. Arduino ne peut gérer que des très faibles courants. (Pas plus de 40 ma). C'est ok pour certains projets électroni
Vitesse du moteur pas à pas contrôle avec LABVIEW et ARDUINO

Vitesse du moteur pas à pas contrôle avec LABVIEW et ARDUINO

J'ai fait cela chez Proteusu commande STEPPER MOTOR vitesse avec LABVIEW et ARDUINO...!! wolaaÉtape 1: Ce tutoriel est :> À l'aide de Labview à interface Arduino au PC via le port USB.> Utilisation de Labview pour envoyer des données qui décrit la v
Contrôle moteur en utilisant Arduino

Contrôle moteur en utilisant Arduino

Commande de moteurs en utilisant Arduino peut être délicat.Tout d'abord, les moteurs exigent plus de courant que la sortie de quel Arduino peuvent fournir des épingles. Aussi moteurs peuvent générer leur propre courant à travers un processus appelé i