Connecter un récepteur RC avec arduino uno

Bonjour,

Je dois fabriquer un sous-marin pour un projet au gymnase (le lycée en Suisse)

Je souhaite connecter un récépteur RC que j'ai pris dans un mini sous-marin et le connecter sur un arduino.

Est-ce-que c'est possible de faire ça et comment faire les branchement ?

en gros vous nous demandez :

je dois connecter un truc que j'ai pris dans un machin sur un bidule. est-ce que c'est possible et si oui comment faire les branchements ?

➜ la boule de cristal est dans le lave vaisselle pour le moment...

Si vous nous donnez plus d'infos (quel récepteur RC, sa spec, quel arduino, etc) alors peut-être on pourra vous aider...

➜lire les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Bonjour pelleteuse

Dans quelle région? (je suis un curieux impénitant)

En fait tu veux brancher une ou des entrées de l'Arduino "à la place" d'un servo et mesurer le signal qui lui était destiné?
Combien de canaux as-tu?
Pour le branchement, ça peut se faire directement de la pin du servo sur une entrée de l'Arduino, l'important est de savoir comment est alimenté ton récepteur, quelle tension.
Ne pas oublier de connecter les GND de l'Arduino et du récepteut RC.

PS: Tu peux faire ça avec la fonction pulsein();, j'ai fait l'essai avec 4 canaux, c'est OK.
Si tu veux un exemple... :wink:

Cordialement
jpbbricole

Bonjour

décodage d'un signal rc d'une télécommande

la question se pose décoder combien de voie ??

ensuite deux manieres de traiter le probleme

avec pulsein ou en gérant les interruptions .

Cadeaux

#include "interrupt.h"

//#define DEBUG

const unsigned long Neutre = 1500;

struct RC_Time {
  unsigned long Voie_1 = Neutre;
  unsigned long Voie_2 = Neutre;
  unsigned long Voie_3 = Neutre;
  unsigned long Voie_4 = Neutre;
};

RC_Time RC_Val;

void setup()
{
  Serial.begin(9600);
  setup_rcTiming();
}

void loop()
{
  if (rcChange) {
    cli();          // Disable interrupts
    rcChange = 0;       // Zero the change counter
    RC_Val.Voie_1 = rcTimes[0];
    RC_Val.Voie_2 = rcTimes[1];
    RC_Val.Voie_3 = rcTimes[2];
    RC_Val.Voie_4 = rcTimes[3];

#ifdef DEBUG
    Serial.println(RC_Val.Voie_1);
    Serial.println(RC_Val.Voie_2);
    Serial.println(RC_Val.Voie_3);
    Serial.println(RC_Val.Voie_4);
    Serial.println();
    Serial.println("-----------------------------");
    Serial.println();
#endif

    sei();          // reenable interrupts
  }
}

un noyaux 4 voies avec gestion en interruption.

static   byte rcOld;        // Prev. states of inputs
volatile unsigned long rcRises[4]; // times of prev. rising edges
volatile unsigned long rcTimes[4]; // recent pulse lengths
volatile unsigned int  rcChange = 0; // Change-counter

// Be sure to call setup_rcTiming() from setup()
void setup_rcTiming() {
  rcOld = 0;
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);
  PCMSK1 |= 0x0F;       // Four-bit mask for four channels
  PCIFR  |= 0x02;       // clear pin-change interrupts if any
  PCICR  |= 0x02;       // enable pin-change interrupts
}

// Define the service routine for PCI vector 1
ISR(PCINT1_vect) {
  byte rcNew = PINC & 15;   // masquage 4 bits, A0-A3
  byte changes = rcNew ^ rcOld; // verif changement bit
  byte channel = 0;
  unsigned long now = micros(); // micros() ok
  while (changes) {
    if ((changes & 1)) {  // Did current channel change?
      if ((rcNew & (1 << channel))) { // Check rising edge
        rcRises[channel] = now;     // Is rising edge
      } else {              // Is falling edge
        rcTimes[channel] = now - rcRises[channel];
      }
    }
    changes >>= 1;      // shift out the done bit
    ++channel;
    ++rcChange;
  }
  rcOld = rcNew;        // Save new state
}

Merci de votre reponse,

J'habite à Vevey c'est au bord du lac Leman.

Voici le recépteur que je veux utiliser :

Il fait tourner 3 moteurs de base, mais je veux les remplacer par d'autres moteur qui ont une intendité plus grande, si je les connecte directement à mon récépteur qui est fait pour prendre 3.7 V il va griller. Donc je veux connectere recépteur à un Arduino Uno et ensuite connecter les moteurs à l'arduino et pouvoir les utiliser avec ma télécommande.

Je ne comprend pas très bien.

Une voie c'est un fil sur lequel est relié un moteur par exemple ?

Sur mon recépteur il n'y a pas de fil nommé GND du coup c'est lequel ?
Celui de l'alimentation ?

Bonsoir pelleteuse

Moi c'est à Corsier-sur-Vevey au bord du même lac :wink:

Oui, celui de l'alimentation du récepteur couplé avec celui de l'Arduino.

Je te fais un exemple de programme pour 3 servos, basé sur l'utilisation de la fonction pulsein();

A+
Cordialement
jpbbricole

Merci,

Vous êtes un peu moins au bord vous :grinning:

Le recépteur était alimenté par une pile, donc j'enlève la pile et relie les deux sorties de la pile avec le GND et le 3.3 V de la partie "power" du Arduino c'est bien ça ?

Bonsoir pelleteuse


En regardant ton image de plus près, pour chaque servo, il y a un fil de couleur et un fil noir, ça doit être le GND, si tu as un ohmmètre, tu peux facilement contrôler ça.

Cordialement
jpbbricole

Bonsoir pelleteuse

Quel type de pile?

Cordialement
jpbbricole

C'est ça ?

Une pile au lithium 3.7 V

Oui, cette partie:

Je n'ai pas le matériel pour essayer, mais, au pire, ça ne fonctionne pas.

Que veux tu commander avec les sorties de l'Arduino?

Cordialement
jpbbricole

Oui, enfin ça ce sont des spéculations.
Il est aussi parfaitement possible (et même fort probable) que les moteurs soient pilotés par des ponts en H auquel cas il n'y a pas de masse et si tu connectes un de ces fils au GND de l'arduino tu vas faire un court-circuit.

Bonsoir fdufnews

Oui, tout à fait, mais, en général le noir est dédié au GND et que ce noir se répète à chacune des 3 sorties, on peut en déduire que c'est un commun et en l'absence de schéma, il ne reste plus que l'ohmmètre.

Cordialement
jpbbricole

Bonsoir pelleteuse

Est ce que la commande du moteur est proportionnelle à la position du levier de la télécommande ou c'est du tout ou rien?

Cordialement
jpbbricole

Non c'est du tout ou rien, si j'appuie sur le bouton de la télecommande le moteur tourne, si j'appuie sur un autre bouton il tourne dans l'autre sens. ( en fait c'est plutôt deux moteurs qui tournent en même temps chacun dans un sens, pour que le sous-marin avance ou recule)

Qu'est ce que je doit faire avec le ohmmètre pour savoir si c'est un GNG ?

Merci

Bonjour pelleteuse

Ca simplifie grandement!

Mesures à faire, l'alimentation OFF:
Il faut mesurer les fils noir entre eux (2, 4, 6 à contrôler s'ils sont bien noirs) tu dois avoir tout près de 0 ohmes et la même valeur entre un des fils noir et le moins de la batterie.

Mesures à faire, l'alimentation ON:
Avec ton multimètre en Volts contunus, mesures chaque paire 1-2, 3-4 et 5-6 avec le noir du multimètre sur le fil noir, que se passe t il à l'appui d'un bouton?

A quoi servent les fils, au bas du circuit imprimé?

A+
Cordialement
jpbbricole