Bases de transformer votre véhicule Controll distant en un système autonome (Drone) en utilisant un Arduino (5 / 7 étapes)

Étape 5: La partie de Code 2

Donc en supposant que votre wen Test bien nous pouvons commencer à ajouter des capteurs sur l’activité artisanale, c’est là que le système devient utile.

Vous pouvez utiliser quelque capteur que vous aimez et autant que vous le souhaitez, tant qu’ils peuvent s’interfacer avec l’arduino que vous utilisez.

Pour illustrer cette idée, j’ai écrit un code qui prend un représentant de la lecture de la distance à un analogue SHARP capteur Infra-rouge qui est monté sur un côté de l’hélicoptère, et si la lecture implique que l’hélicoptère est presque un obstacle puis il va être déviée vers le côté opposé. Dans le cas contraire le contrôle restera entièrement sur nos mains.

J’ai laissé le code de la manette des gaz en malgré le fait qu’il n’est pas utilisé dans le cas où vous utilisez une 3ème ligne de signal ; il vous permettra d’économiser temps, ajouter le code de retour dans:) ne sont pas j’ai beau !

Voici la mis à jour le Code et n’oubliez pas à lire les commentaires pour le rendre clair quant à ce que le code est :

#include < RCArduinoFastLib.h >

//
Code d’exemple Mod à the Origional Test Structure de RCArduino du capitaine Dyson
pour la bibliothèque « RCArduinoFastLib »
Copiez le code suivant lit un capteur de distance avant de décider s’il faut déplacer loin ou non.
//

Multicanaux
rcarduino.blogspot.com
Une approche simple pour la lecture des trois canaux RC à l’aide de la goupille de changer des interruptions
Voir les messages connexes-
http://rcarduino.blogspot.co.uk/2012/01/How-to-Read-RC-Receiver-with.html
http://rcarduino.blogspot.co.uk/2012/03/Need-More-interrupts-to-Read-more.html
http://rcarduino.blogspot.co.uk/2012/01/CAN-i-Control-more-than-x-servos-with.html
rcarduino.blogspot.com

inclure la bibliothèque de pinchangeint - voir les liens dans la section Rubriques connexes ci-dessus pour plus de détails
#include < PinChangeInt.h >

Assigner votre canal à pins
#define THROTTLE_IN_PIN 5
#define STEERING_IN_PIN 6
#define AUX_IN_PIN 7

Assigner votre canal des pins
#define THROTTLE_OUT_PIN 8
#define STEERING_OUT_PIN 9
#define AUX_OUT_PIN 10

Attribuer servo index
#define SERVO_THROTTLE 0
#define SERVO_STEERING 1
#define 2
#define SERVO_FRAME_SPACE 3

Ces indicateurs de bits sont définis dans bUpdateFlagsShared pour indiquer quels sont les canaux ont des nouveaux signaux
#define THROTTLE_FLAG 1
#define STEERING_FLAG 2
#define AUX_FLAG 4

contient des indicateurs de mise à jour définis ci-dessus
bUpdateFlagsShared uint8_t volatils ;

variables partagées sont mis à jour par l’ISR et lire en boucle.
Dans le boucle nous, immédiatement prendre des copies locales afin que le rapport de recherche internationale peut garder la propriété de la
ceux partagés. Pour accéder aux suivantes en boucle nous couper d’abord interruptions avec noInterrupts
Nous prenons une copie à utiliser dans la boucle et le tour interruptions sur dès que possible
Cela garantit que nous sommes toujours en mesure de recevoir de nouveaux signaux
unThrottleInShared uint16_t volatils ;
unSteeringInShared uint16_t volatils ;
unAuxInShared uint16_t volatils ;

Ils servent à enregistrer le front montant d’une impulsion dans les fonctions calcInput
Ils ne faut pas être volatile car elles servent uniquement à la sûreté. Si nous voulions
pour faire référence à ces derniers dans la boucle et l’ISR alors ils auraient besoin d’être déclarée volatile
uint16_t unThrottleInStart ;
uint16_t unSteeringInStart ;
uint16_t unAuxInStart ;

uint16_t unLastAuxIn = 0 ;
uint32_t ulVariance = 0 ;
uint32_t ulGetNextSampleMillis = 0 ;
uint16_t unMaxDifference = 0 ;

Assigner un NIP pour lire les données du capteur
int sensorPin = A0 ;

void setup()
{
Serial.Begin(115200) ;
Serial.println("multiChannels") ;

Attachez des objets servo, il vont générer le bon
impulsions pour la conduite des servos, des variateurs électroniques ou autres dispositifs
conçue pour s’interfacer directement avec les récepteurs de RC
CRCArduinoFastServos::attach(SERVO_THROTTLE,THROTTLE_OUT_PIN) ;
CRCArduinoFastServos::attach(SERVO_STEERING,STEERING_OUT_PIN) ;
CRCArduinoFastServos::attach(SERVO_AUX,AUX_OUT_PIN) ;

permet de définir un taux standard de 50 Hz en définissant un espace de trame de 10 * 2000 = 3 Servos + 2000 7 fois
CRCArduinoFastServos::setFrameSpaceA(SERVO_FRAME_SPACE,7*2000) ;
CRCArduinoFastServos::begin() ;

à l’aide de la bibliothèque PinChangeInt, fixez les interruptions utilisées pour lire les canaux
PCintPort::attachInterrupt (THROTTLE_IN_PIN, calcThrottle, changement) ;
PCintPort::attachInterrupt (STEERING_IN_PIN, calcSteering, changement) ;
PCintPort::attachInterrupt (AUX_IN_PIN, calcAux, changement) ;
}

void loop()
{
Créez des variables locales pour tenir des copies locales des entrées canal
ceux-ci sont déclarés statiques afin que leurs valeurs seront conservées entre les appels à boucle.
public static uint16_t unThrottleIn ;
public static uint16_t unSteeringIn ;
public static uint16_t unAuxIn ;
copie locale des indicateurs de mise à jour
bUpdateFlags uint8_t statique ;

vérifier les indicateurs partagés mise à jour pour voir si tous les canaux ont un nouveau signal
if(bUpdateFlagsShared)
{
noInterrupts() ; mettre les interruptions hors rapidement tandis que nous prenons des copies locales des variables partagées

prendre une copie locale dont les canaux ont été mis à jour dans le cas où nous avons besoin de l’utiliser dans le reste de la boucle
bUpdateFlags = bUpdateFlagsShared ;

dans le code actuel, les valeurs partagées sont toujours remplis
donc nous pourrions copier sans tester les drapeaux
Cependant à l’avenir, cela pourrait changer, laisse ainsi
Copiez uniquement quand les drapeaux nous disent que nous pouvons.
if(bUpdateFlags & THROTTLE_FLAG)
{
unThrottleIn = unThrottleInShared ;
}
if(bUpdateFlags & STEERING_FLAG)
{
unSteeringIn = unSteeringInShared ;
}
if(bUpdateFlags & AUX_FLAG)
{
unAuxIn = unAuxInShared ;
}

Désactivez la copie partagée des indicateurs mis à jour parce que nous avons déjà pris les mises à jour
Nous avons encore une copie locale, si nous avons besoin de l’utiliser dans bUpdateFlags
bUpdateFlagsShared = 0 ;

interrupts() ; Nous avons des copies locales des entrées, interrompt alors maintenant nous pouvons tourner sur
dès que les interruptions sont de retour sur, nous pouvons utiliser n’est plus les copies partagées, l’interruption
routines de service ces propres et pourraient mettre à jour à tout moment. Au cours de la mise à jour, le
copies partagées peuvent contenir indésirable. Heureusement, nous avons nos copies locales de travailler avec:-)
}

procéder à tout traitement à partir de là
Utilisez uniquement les valeurs locales unAuxIn, les unThrottleIn et les unSteeringIn

Cette configuration capteur détecte la présence d’un objet vers la droite de helecopters
Si l’objet est de fermer puis le métier va dévier à gauche, loin du danger
Vous pouvez ajouter autant si boucles dans ce code que vous aiment avec différents capteurs
mais s’il vous plaît ne pas copier ce code exactement et espérer qu’il fonctionne, tout dépend
les détails de vos servos et les orientations souhaitées se déplacer
Ce code est spécifique à ma carrure, modifiez-le pour vôtre:)

Lire le capteur
int val = analogRead(sensorPin) ;
Placez une condition contre cette lecture
Si (val > 150)
{
agir sur la condition
unSteeringIn = unSteeringIn + 430 ;
Appliquer les nouvelles valeurs modifiées
if(bUpdateFlags & THROTTLE_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_THROTTLE,unThrottleIn) ;
}

if(bUpdateFlags & STEERING_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_STEERING,unSteeringIn) ;
}

if(bUpdateFlags & AUX_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_AUX,unAuxIn) ;
}
}
Si nous n’avons aucune raison de modifier la position du servo, alors nous pouvons passer le signal par l’intermédiaire
comme nous l’avons fait dans le sketch de test avec aucune altération.
d’autre
{
if(bUpdateFlags & THROTTLE_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_THROTTLE,unThrottleIn) ;
}

if(bUpdateFlags & STEERING_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_STEERING,unSteeringIn) ;
}

if(bUpdateFlags & AUX_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_AUX,unAuxIn) ;
}
}
bUpdateFlags = 0 ;
}

routine d’interruption simple du service
Sub calcThrottle()
{
if(PCintPort::pinState)
{
unThrottleInStart = TCNT1 ;
}
d’autre
{
unThrottleInShared = (TCNT1 - unThrottleInStart) >> 1 ;
bUpdateFlagsShared | = THROTTLE_FLAG ;
}
}

Sub calcSteering()
{
if(PCintPort::pinState)
{
unSteeringInStart = TCNT1 ;
}
d’autre
{
unSteeringInShared = (TCNT1 - unSteeringInStart) >> 1 ;

bUpdateFlagsShared | = STEERING_FLAG ;
}
}

Sub calcAux()
{
if(PCintPort::pinState)
{
unAuxInStart = TCNT1 ;
}
d’autre
{
unAuxInShared = (TCNT1 - unAuxInStart) >> 1 ;
bUpdateFlagsShared | = AUX_FLAG ;  }
}

Maintenant n’oubliez pas que c’est juste un exemple simple, s’il vous plaît être aussi inventifs que vous le souhaitez et ajouter autant de capteurs comme vous, comme, quelques idées seraient un accéléromètre et un capteur de PING pour la détection des distances plus longues, ou aller encore plus loin et ajoute un GPS avec un emplacement actuel vs comparaison emplacement cible puis obtenir votre appareil pour aller à un emplacement géographique spécifique.

Articles Liés

Comment transformer votre maison en un Smart Home

Comment transformer votre maison en un Smart Home

Nous allons vous montrer comment transformer votre maison en une maison intelligente. SafeWise visite interactive d' (afforadable) automatisé Accueil aujourd'hui peut vous aider à planifier quoi, où et comment pour automatiser votre maison. Si vous c
Pirater votre véhicule CAN-BUS avec Arduino et Seeed CAN-BUS bouclier

Pirater votre véhicule CAN-BUS avec Arduino et Seeed CAN-BUS bouclier

Tous les véhicules modernes sont équipés avec un CAN-BUS Controller Area Network, au lieu d'avoir 1 million de fils running back et -vient de différents appareils dans votre voiture à la batterie, sa faisant usage d'un système plus intelligent.Toutes
Comment transformer votre téléphone Mobile en un outil de survie

Comment transformer votre téléphone Mobile en un outil de survie

si vous avez entrepris dans l'ensemble de l'inconnu pour rejoindre Alaska! - la terre de mystère et d'intrigue. Votre esprit est en course pleine de romans d'aventures de Jack London et diverses scènes de la faune depuis des dizaines d'épisodes de Na
Transformer votre téléviseur LCD/LED en hologramme TV

Transformer votre téléviseur LCD/LED en hologramme TV

Je vous présente trois étapes simples pour transformer votre téléviseur LCD/LED en un hologramme TV...Très facile et très simple.Étape 1: Couper et coller... Couper quatre feuilles A4 transparentes en forme trapézoïdale et se joindre à eux pour forme
Transformer votre Moleskine en un monstre de dinosaur de requin avec pièces imprimées en 3D

Transformer votre Moleskine en un monstre de dinosaur de requin avec pièces imprimées en 3D

Ce projet fait partie d'une collaboration courte et amusante avec son compatriote Pier 9 AiRs d'artistes en résidence Bernie Lubell, Maxey Maddy et Andrew Thurlow. Au début de notre résidence, nous avons tous eu ces portables peu cool. Pour un petit
Transformer votre Pi framboise en un serveur web personnel

Transformer votre Pi framboise en un serveur web personnel

LAMP est un acronyme qui signifie LinuxApacheMySQLPHP et composants nécessaires à l'exécution d'une page Web HTML dynamique.Cette instructable démontrera comment vous pouvez transformer votre Pi de framboise dans un serveur web personnel. Les étapes
SensoDuino : Transformez votre téléphone Android en un Hub de capteurs sans fil pour Arduino

SensoDuino : Transformez votre téléphone Android en un Hub de capteurs sans fil pour Arduino

Mises à jour23 novembre 2013: SensoDuino 0,160 obtient un visage à gauche.Le 19 nov. 2031 : avis : la synergie incroyable entre Arduino & Android.19 novembre 2013: SensoDuino 0.159 est sorti. Téléphone Android date (y, m, d) et l'heure (h, m, s) sont
Transformez votre Tablesaw en une dégauchisseuse

Transformez votre Tablesaw en une dégauchisseuse

Il existe des outils qui sont difficiles à trouver, soit ils sont trop cher, difficile de trouver utilisé, ou juste pas commun pour DIY'ers. J'ai trouvé que les dégauchisseuses sont parmi les outils.Heureusement, il existe un moyen facile de transfor
Regarder gratuitement les chaînes de télévision du monde entier sur votre téléviseur et transformez votre TV en un PC à la maison à peu de frais

Regarder gratuitement les chaînes de télévision du monde entier sur votre téléviseur et transformez votre TV en un PC à la maison à peu de frais

Avec l'aide d'un PC Mini Android de 50 $ (trouvé via Amazon ou eBay), expatriés ou tous ceux qui veulent enrichir leurs connaissances en langue étrangère peut regarder les chaînes de télévision étrangères sur leur téléviseur. Le Mini PC Android se co
Comment transformer votre vieux t-shirt dans un oreiller

Comment transformer votre vieux t-shirt dans un oreiller

matériaux1. la chemise choisiriez-vous pour transformer votre oreiller plus récent !2. la farce choisiriez-vous pour combler la chemise avec.3. Visser (n'importe quelle couleur de votre choix).Outils1. aiguille à coudre2. ciseaux.MISE EN GARDE !Soyez
Les bases de faire votre propre lune

Les bases de faire votre propre lune

Les fondements de la fabrication d'alcool de reposent sur des principes établis de la fermentation et la distillation, dont vous avez besoin d'être familier avec, soit avant de suivre une recette de base ou expérimenter avec les ingrédients et les qu
Transformer votre Art en une courtepointe

Transformer votre Art en une courtepointe

Art ! Tissu !Selon moi, qu'une chambre à coucher est tellement plus agréable quand il est personnalisé à vos goûts spécifiques et vos préférences. Bien sûr, c'est moins cher d'acheter une couette dans un magasin de grande surface. Cependant, créant u
Transformez votre vieille chemise en une nouvelle création Rad

Transformez votre vieille chemise en une nouvelle création Rad

aujourd'hui je vais vous montrer comment transformer une vieille chemise dans un nouveau fou hype rad œuvre d'ART, et en plus vous obtenez de montrer au large, vous travaillez en la portant !Il s'agit de la technique actuelle utilisée par Monkey Busi
Comment transformer votre PC (ou autre dispositif) en une Arcade rétro avec Lakka

Comment transformer votre PC (ou autre dispositif) en une Arcade rétro avec Lakka

Si vous cherchez une bonne façon d'utiliser un vieux PC, Lakka peut transformer en une machine de jeu rétro étonnante. Cette configuration facile ne nécessite aucune connaissance avancée de Linux, et vous pouvez même utiliser les contrôleurs que vous