Aéroglisseur RC + commande à distance sur mesure (6 / 8 étapes)

Étape 6: Le récepteur

Le récepteur que j’ai fait est fondamentalement une coutume * duino Conseil avec la commodité d’avoir un interrupteur ON/OFF et un en-tête pour le module nRF24L01 + radio.

Donc, je conseille d’obtenir un Arduino (ou Conseil compatible) et une juste connecter les autres nRF24l01 + radio module il est respectifs nécessaire broches.

MOSI - broche numérique 11
MISO - axe numérique 12
SCK - broche numérique 13

En outre, vous aurez besoin de connecter les broches CE et CSN (à partir du module radio) à certaines chevilles libres de votre choix sur l’Arduino (ou compatible) Conseil d’administration. La valeur par défaut dans le code qui va suivre sont respectivement les bornes 9 et 10.

Puisque le module radio doit pouvoir vous aurez également besoin de connecter les broches GND et 3,3 volts.

Avertissement: il est très IMPORTANT que vous mettez le MODULE RADIO avec 3.3V sinon vous allez griller il.

Vous devez télécharger une version modifiée du code ci-dessous à l’office récepteur. Vous devrez simplement modifier l’affectation des broches si vous utilisiez des broches différentes, et plus important encore, vous aurez probablement sera besoin de modifier l’ESC armement code. Si vous n’avez pas de travail avec Arduino + ESC avant que je recommande fortement que vous testiez de standalone, armement procédures varient de l’ESC à l’ESC. Le code ci-dessous fonctionne bien pour deux mystère marque ESCs convenant au 30 a. Pour les autres ESCs vous devrez étudier à longuement sur la façon de les armer correctement.

#include < Servo.h >
#include < SPI.h >
#include « nRF24L01.h »
#include « RF24.h »

/ *---VOYAGEANT DES STRUCTURES DE DONNÉES---* /

commandes va à l’intérieur
typedef struct {}
int X ;
int Y ;
booléenne touches [4] ;
}
Charge utile ;

rétroaction va à l’intérieur
typedef struct {}
int rudderAng ;
int Z ;
int S ;
}
Vos commentaires ;

/ *---ANTIREBONDS VARIABLES---* /

long previousMillis = 0 ;        minuterie pour servo
long previousButtonMillis = 0 ;  minuterie pour boutons
long previousTX = 0 ;            minuterie pour les transmissions
TXinterval long = 25 ;           intervalle de transmettre la télémétrie
const int intervalle = 30 ;        intervalle de mise à jour de servo
const int binterval = 70 ;       intervalle pour debouncing
const int TX_timeout = 100 ;     distance - artisanat lien timeout

/* ------------------------------------------------------------- */

Servo de Poussée ;
Ascenseur de servo ;

Paquet de charge utile ;
Vos commentaires telemetrics ;

Palonnier de servo ;

int oldAngle, newAngle = 0 ;     postes de servo

int lift_ang ;                   soulever le moteur pseudo-« angulaire » Vitesse

vel int ;                        pseudo-« angulaire » vitesse de Poussée

Boolean exécuter = false ;

RF24 radio (9, 10) ;

const uint64_t pipes [2] = {}
0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL} ;

/* ----------------------------------------------------- */

/ * METTRE EN PLACE LE NŒUD RÉCEPTEUR * /

Sub setup(void)
{
Serial.Begin(57600) ;

radio.Begin() ;
radio.openWritingPipe(pipes[1]) ;
radio.openReadingPipe(1,pipes[0]) ;
radio.startListening() ;

Rudder.Attach(7) ;

Il est important de bras
CHAQUE ESC séquentiellement
Lift.Attach(5) ;
armESC(lift) ;
lift_ang = 50 ;

Delay(100) ;

Thrust.Attach(6) ;
armESC(thrust) ;
vel = 50 ;
}

Sub loop(void)
{

unsigned long started_waiting_at = millis() ;
timeout booléen = false ;
tandis que (! radio.available() & &! timeout)
Si (millis() - started_waiting_at > TX_timeout)
Timeout = true ;

Si {(timeout)
Serial.println ("Echec, réponse a expiré.") ;
courir = false ;
}
else {}
radio.Read (& package, sizeof(package)) ;
courir = true ;
}

Si le lien TX-RX est vivante () puis...
if(Run)
{

/ *---EXÉCUTION DES COMMANDES REÇUES---* /

int X = package. X ;
int Y = package. Y ;

CONTRÔLE DE LA GOUVERNE DE DIRECTION
// ------------------------------------------------------------
Si (X > 480 & & X 530 <) {}
newAngle = 90 ;             90 = servo en position centrale
}
Si (X < 480) {}
newAngle = ((X, 480, 155, 91 150) carte) ;
}
Si (X > 530) {}
newAngle = ((X, 30, 89, 815, 530) carte) ;
}

CONTRÔLE DE LA POUSSÉE VERS L’AVANT... VROOOOMMMMMMM
// ---------------------------------------------------------------------
Si (Y > 550 & & Y < 635) {}
Thrust.Write(50) ;           position neutre--moteur ne tourne pas
telemetrics. S = 50 ;
}
Si (Y > = 635) {}
vel = (plan (Y, 635, 925, 60, 90)) ;
Thrust.Write(vel) ;
telemetrics. S = vel ;
}

unsigned long currentMillis = millis() ;

Délivrer le gouvernail repositionnement commande uniquement si vous le souhaitez
position de change et l’intervalle (antirebonds) est terminée
Si (oldAngle! = newAngle & & currentMillis - previousMillis > intervalle) {}
previousMillis = currentMillis ;
oldAngle = newAngle ;
Rudder.Write(newAngle) ;     dire de servo pour aller à positionner dans la variable « pos »
} / / fermer si millis-terre (pour le servo de direction)


POIGNÉE BOUTON PRESSES
// ------------------------------------------------------------------
currentMillis = millis() ;

Si (currentMillis - previousButtonMillis > binterval) {}

sur une touche pour MIN instantanée (aucun) lever vitesse (aucun throtle)
Si (package.buttons[0] == 1) {}
lift_ang = 50 ;
}
sur une touche pour la vitesse de l’ascenseur incrément
Si (package.buttons[1] == 1) {}
Si (lift_ang < 120) {lift_ang += 5;}
}
touche appuyer pour l’instant (sorte de) « safe stationnaire » en vol stationnaire
Si (package.buttons[2] == 1) {}
lift_ang = 90 ;
}
sur une touche pour la vitesse de l’ascenseur décrémentation
Si (package.buttons[3] == 1) {}
Si (lift_ang > 50 & & lift_ang < = 115) {lift_ang-= 5;}
}

previousButtonMillis = currentMillis ;

Lift.Write(lift_ang) ;

} / / proche si "millis-land" (critère secondaire)--bouton millis debounce

/* ---------------------------------------------------------------------- */

Set télémétrie données à envoyer
telemetrics. Z = lift_ang ;
telemetrics.rudderAng = newAngle ;

} / / Déclaration de « if(run) » à proximité
else {}
Serial.println ("aucune radio disponible") ;
emergencyStop() ;
}

POUR transmettre les TELEMETRICS utiliser ceci :

radio.stopListening() ;
bool ok = radio.write (& telemetrics, sizeof(telemetrics)) ;
radio.startListening() ;

OU ceci: (besoin de décommenter les variables previousTX et TXinterval
Si vous utilisez cette option)

unsigned long currentMillis = millis() ;
//
Si (currentMillis - previousTX > TXinterval) {}
previousTX = currentMillis ;
//
radio.stopListening() ;
bool ok = radio.write (& telemetrics, sizeof(telemetrics)) ;
radio.startListening() ;
//  }

} / / fermer le bloc « loop() »

Fonctions accessoires

Sub emergencyStop()
{
Thrust.Write(50) ;
Lift.Write(50) ;
}

Sub armESC(Servo esc)
{
ESC.Write(10) ;
Delay(2000) ;
ESC.Write(50) ;
Delay(1000) ;
}

Articles Liés

Comment faire une voiture de contrôle à distance sur mesure

Comment faire une voiture de contrôle à distance sur mesure

dans ce tutoriel, je vais vous montrer comment faire une voiture télécommande personnalisable à peu près tout ce que vous voulez. Je vais utiliser k-nex et un carton, mais vous pouvez également utiliser des Legos, pièces imprimées en 3d ou un tas d'a
Rakshak un : une rover pour la collecte de données et de surveillance avec des fonctionnalités de journalisation de données, voix alertes et distance de mesure.

Rakshak un : une rover pour la collecte de données et de surveillance avec des fonctionnalités de journalisation de données, voix alertes et distance de mesure.

I NTRODUCTIONCe système robotique peut être contrôlé à l'aide d'une interface graphique construite à l'aide de la transformation. Le rover peut être contrôlé en envoyant des commandes via l'interface utilisateur en cours d'exécution sur l'ordinateur
Commande à distance sécurisé

Commande à distance sécurisé

Avez-vous déjà demandé comment vous pourriez relativement facilement cacher votre argent de poche de votre plus petit/grand frère (s) ou tout simplement avoir votre petit "Fort Knox" ? Eh bien... avec ce Instructable vous serez en mesure de ! No
Commande à distance contrôlé via Internet

Commande à distance contrôlé via Internet

Il s'agit d'un tutoriel un peu complex, bien que je vais essayer de le rendre aussi facile à comprendre pour un large nombre de programmeurs.Avant de commencer, n'oubliez pas que vous aurez besoin d'au moins un Altair.Étape 1: théorie Tout d'abord, n
Commande à distance vos framboises Pi

Commande à distance vos framboises Pi

La plupart des articles qui traitent de journalisation à distance dans votre Pi framboise utilisent xrdp pour créer des sessions Bureau à distance dans votre Pi de framboise. C'est souvent une bonne solution et fonctionne même si vous n'avez pas un m
Ajouter une commande à distance à peu près n’importe quoi !

Ajouter une commande à distance à peu près n’importe quoi !

Dans ce Instructable je vais vous montrer comment ajouter un contrôle à distance à bas prix à peu près n'importe quoi ! qui prend votre fantaisie.L'année dernière, j'ai construit un lance-roquettes de l'air comprimé qui a été présenté dans le Magazin
Appareil photo, commande à distance

Appareil photo, commande à distance

Mon appareil photo n'est pas un moyen d'être déclenchée à l'extérieur. Alors, j'ai décidé de construire une caméra Canon contrôlée à distance et il s'avère être « Vert ».Donc, certains d'entre vous ont peut-être appris du logiciel CHDK (Canon Hack De
MediaCenter simple et commande à distance avec une convivialité améliorée

MediaCenter simple et commande à distance avec une convivialité améliorée

Oui, c'est une autre axée sur le bricolage PC Media Center (ou HTPC), mais avec une caractéristique unique : il a sacrément simple à contrôler, donc bien adapté pour les personnes âgées, personnes handicapées, ou simplement paresseux utilisateurs.De
Comment connecter ps3 à distance sur Android (racine)

Comment connecter ps3 à distance sur Android (racine)

comment faire pour connecter votre ps3 à distance sur votre appareil Android pour jouer n'importe quel jeux ?Matériel :-Ps3 à distance-Appareil android root:-)-Adaptateur USB miniUSB-Recharger le câble USB de la télécommande PS3sixaxis - compatibilit
Sur mesure Keg Cooler pour le Camping!!

Sur mesure Keg Cooler pour le Camping!!

Tout d'abord, Merci de vérifier sur mon Instructable! Je l'ai ai créé sous forme d'entrée dans faire un concours de boîte parrainé par Rockler! Si vous aimez ce Instructable, s'il vous plaît VOTE FOR ME! J'aimerais gagner ce concours !L'an dernier, q
Jouet pour chat Catnip sur mesure

Jouet pour chat Catnip sur mesure

il s'agit d'une conception pour un jouet pour chat feutre personnalisable, avec plumes, cloches, cataire et tout ce que vous pouvez penser à ajouter ! Vous pouvez faire cette petite bestiole dans moins d'une heure, et les fournitures sont à peu de fr
Adaptateur porte de coupe sur mesure pour SodaStream, tasse à café & bouteilles d’eau.  J’ai fait à TechShop.

Adaptateur porte de coupe sur mesure pour SodaStream, tasse à café & bouteilles d’eau. J’ai fait à TechShop.

ProblemsDifférentes voitures sont détenteurs de coupe & bouteille de taille différente.  Conducteurs et les passagers ont une taille différente de leurs tasses de café préféré et des bouteilles.  Quand votre bouteille et coupe les détenteurs de véhic
Sur mesure en bois lettres

Sur mesure en bois lettres

Mon premier Instructable !J'ai voulu faire quelque chose sur mesure pour certains de mes amis qui sont déplacent dans une nouvelle maison. Après de longues délibérations, j'ai décidé de faire des mini toiles sur des lettres en bois de leurs initiales
36V 8.7Ah Battery Pack (sac de vélo sur mesure siège)

36V 8.7Ah Battery Pack (sac de vélo sur mesure siège)

Construire un 36V 8.7Ah 18650 Li-ion cellules batterie pour un sac de vélo petit siège.-série 10, 3 cellules Lithium-ion Panasonic 18650 max de 2900mAh 3C en parallèle.-Spot soudé bandes de nickel pur 0,1 mm x 6 mm.-9 ampères. Máx. continuos BMS * av