Joystick sendet keine Daten über nRF24L01

Hallo,
ich möchte ein Ferngesteuertes Auto bauen. Mit vier Motoren (2 H-Bridges) und über nRF24L01+ transeiver.
Als Controller nutze ich ein Arduino nano mit Joystick shield V1.A. Im serial Monitor vom Controller Arduino sind alle Werte gut. Wenn ich jedoch beim empfänger Arduino in den Serial Monitor gehe, werden als X und Y-Achse sowie bei allen buttons nur die Werte “0” ausgegeben. Ich habe die vermutung, dass es am Code liegt (den ich aus dem Internet habe). Ich habe jedoch keine Fehlerquelle gefunden (da es mein erstes Projekt ist und ich keine Ahnung habe). Den Auto-Arduino habe ich wie im Anhang verkabelt, bis auf dass ich noch keine Schalter, keine Lichter und keinen Buzzer verbaut habe.
Danke für Antworten im voraus :slight_smile:

car_nrf24_ino.ino (5.96 KB)

joystick_nrf24_ino.ino (2.39 KB)

Hi

Schon Mal nach Beispielen zu nRF24L01 gesucht?
Wo ein Arduino der Sender ist und der Andere der Empfänger?
Wo nur ganz rudimentär einfachste Byte übertragen werden - aber eben mit Funktion?

Wenn DAS klappt, kann man schauen, ob man auch komplexere Daten verschickt bekommt.

Und dann, was man Damit dann im Empfänger Alles anstellen kann.

MfG

Ich hab schon einige Beispiele in Form von tutorials und Projekten von anderen gesehen, dass es möglich ist die Daten vom Joystick per nRF24L01 zu senden. Nur bei mir will es nicht ganz. Im Grunde nimmt es so weit ich weiß ja die Daten die das Joystick shield an den Arduino sendet(in Form einer Zahl) und gibt diese per nRF24L01 weiter. Ich denke bei mir liegt der Fehler im Code nur wo kann ich nicht finden.

MfG

Ich habe mit folgender Hardware das Projekt rudimentär nachgebaut:

  • 2 x Arduino UNO
  • 2 x nRF24
    Die Arduinos sind jeweils über USB mit einem eigenen Computer verbunden (und dem seriellen Monitor).

Mit den Codes des Ausgangsposts funktioniert es bei mir grundsätzlich. Am Empfänger (“car”) kommen jene Werte an, die der Sender verschickt (Beispiel, Empfänger):

Nrf24L01 Receiver Starting
X = 399 Y = 399 Up = 1 Right = 1 Down = 1 Left = 0
X = 405 Y = 403 Up = 1 Right = 1 Down = 1 Left = 0
X = 408 Y = 405 Up = 1 Right = 1 Down = 1 Left = 0
X = 415 Y = 414 Up = 1 Right = 1 Down = 0 Left = 1

Allerdings …

  • … versorge ich die nRF mit jeweils einer eigenen stabilen Stromversorgung (3,3 V) und nicht über die 3,3 Volt Pins der Arduinos, denn diese können oft nicht genügend Strom für die nRF liefern.
    Wenn man schon den 3,3 Volt Pin des Arduino benutzen will, dann baucht es zumindest ein paar “Stütz-Kondensatoren” nahe am nRF (z.B. 100nF Keramik plus 20µF Elko) ohne diese funktioniert es meiner Erfahrung nach gar nicht (das betrifft Arduino UNO).
    Die meinsten Nanos (vor allem die “Nachbauten” mit CH340) können noch weniger Strom an 3,3 Volt liefern als ein UNO. Ich vermute mit einem Nano (-Nachbau) wird es auch mit Stütz-Kondensatoren nicht zuverlässig funktionieren.
  • … ich steuere am Empfänger (“car”) keine Motortreiber etc. an, sondern beschränke mich auf die serielle Ausgabe der empfangenen Werte und habe deshalb den Code für Motorsteuerung etc. auskommentiert (bzw. gelöscht).
    Dabei fällt mir auf: du verwendest Pins 0 und 1 für die Motorsteuerung: IN_11 und IN_12.
    Diese Pins werden aber für die serielle Schnittstelle verwendet. Diese Pins werden also doppelt benutzt. Das wird so nicht funktionieren.
  1. Ich rate zu einer stabilen Stromversorgung der nRF.
  2. Reduziere das Programm für den Empfänger zunächst auf das Wesentlichste (nur Datenausgabe am seriellen Monitor) und versuche erstmal die Datenübertragung zum Laufen zu bringen.
    Bzw. beschäftige dich mit einfachen Beispielen (das hat postmaster-ino ja schon vorgeschlagen).

Einfache Beispiele für den nRF24:
Simple nRF24L01 Transceiver Demo
Nrf24L01-2.4GHz-HowTo

Hier noch der reduzierte Code, den ich für den Empfänger verwendet habe:

// car_nrf24_ino.ino reduziert auf serielle Ausgabe

/* JoyStick module receiver code
  - CONNECTIONS: nRF24L01 Modules See:
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 6
   4 - CSN to Arduino pin 8
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED
*/

//-----( Import needed libraries )-----
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN 6
#define CSN_PIN 8

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe

/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
int joystick[6];  // 6 element array holding Joystick readings
int speedRight = 0;
int speedLeft = 0;
int  xAxis, yAxis;
// the four button variables from joystick
int buttonUp;
int buttonRight;
int buttonDown;
int buttonLeft;

void setup()
{
  Serial.begin(9600);
  Serial.println("Nrf24L01 Receiver Starting");

  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}

void loop()
{
  if ( radio.available() )
  {
    radio.read( joystick, sizeof(joystick) );
    xAxis = joystick[0];
    yAxis = joystick[1];

    // the four button variables from joystick array
    buttonUp    = joystick[2];
    buttonRight = joystick[3];
    buttonDown  = joystick[4];
    buttonLeft  = joystick[5];

    Serial.print("X = ");
    Serial.print(xAxis);
    Serial.print(" Y = ");
    Serial.print(yAxis);
    Serial.print(" Up = ");
    Serial.print(joystick[2]);
    Serial.print(" Right = ");
    Serial.print(joystick[3]);
    Serial.print(" Down = ");
    Serial.print(joystick[4]);
    Serial.print(" Left = ");
    Serial.println(joystick[5]);
  }
}

Danke dir :slight_smile: Werd ich mal testen ob es funktioniert. Ich muss halt noch eine 3,3V Stromquelle Organisieren. Im Moment nutze ich einen 9V Akku. Ne gute einfache Idee wie ich ne 3,3V quelle bekommen kann (als Akku)? Das mit den Motor Pins habe ich nicht angeschaut muss ich gestehen. Ich hatte das Programm auch noch ohne die Motorsteuerung getestet weswegen ich nicht darauf geachtet habe.

Wenn du von 3,3Volt schreibst, dann ist es Spannung, nicht Strom.
Die 3,3Volt kannst du mittels einem StepDown-Regler erhalten, den du mit deiner Hauptspannung versorgst.

Allerdings ist da ein 9Volt-Akku keine so gute Lösung, da dieser nicht genügend Kappazität hat.

In deinem Schaltbild ist auch ein Fehler, den du beseitigen solltest. Du verwendest die Pins D0 und D1 für den Motortreiber.
Da bekommst du Probleme beim Flashen, da hier der USB-Serial-Wandler angeschlossen ist und der durch die zusätzliche Verbindung gestört wird.

Die verkabelung habe ich aus dem Internet, aber ich werds mir merken. Mit Strom und Spannung nehm ich es nicht so genau :slight_smile: Das mit der 9V Batterie habe ich mir auch gedacht. Ist da so ein RC-Akku nützlich? RD SLP 1000 S3: Akku-Pack, Li-Polymer, 11,1 V, 1000 mAh, 25 - 50 C bei reichelt elektronik (Einer dieser Art). Hab noch nicht wirklich viel Ahnung aber jeder ist mal am Anfang ^^
MfG

IMPhilipe:
Die verkabelung habe ich aus dem Internet, aber ich werds mir merken. Mit Strom und Spannung nehm ich es nicht so genau :slight_smile: Das mit der 9V Batterie habe ich mir auch gedacht. Ist da so ein RC-Akku nützlich? RD SLP 1000 S3: Akku-Pack, Li-Polymer, 11,1 V, 1000 mAh, 25 - 50 C bei reichelt elektronik (Einer dieser Art). Hab noch nicht wirklich viel Ahnung aber jeder ist mal am Anfang ^^
MfG

Naja....auch wenn man am Anfang ist, sollte man noch lernen. Und nicht alles was man im Web findet ist gut.