Nachdem ich für meine RC-Modelle in den letzten Jahren
eine kommerzielle 40 MHZ MX16s von Graupner genutzt habe, wollte
ich Anfang 2021 doch noch einmal einen echten Eigenbau versuchen. Im Netz
gab es verschiedene Bauberichte über Anlagen mit nRF24L01 Modulen.
Sowas sollte es also werden!
Die NRF-Module arbeiten im 2,4 GHz ISM-Band. Jedes Modul
kann sowohl Sender als auch Empfänger sein. Sie lassen sich komplett
über Software steuern. Ein Arduino ist perfekt geeignet dafür.
 
Das Bild zeigt die beiden aktuell verfügbaren Typen.
Links das nRF24L01+ Modul mit der PCB-Antenne verfügt über maximal
0 dBM (1 mW) Ausgangspower. Die Ausgangsleistung kann in den
Stufen 0, -6, -12 und -18 dBm eingestellt werden.
Die Empfindlichkeit des Empfängers liegt abhängig von der Datenrate
zwischen -82 dBm (2 Mbps) und -94 dBm (250 Kbps).
Mit zwei solcher Module als Sender-Empfänger lässt sich eine
Anlage für Haus-Reichweiten realisieren.
Rechts ist das Stärkere nRF24L01-PA Modul mit der externen
Antenne abgebildet. Dieses Modul enthält zusätzlich zum normalen
nRF24L01 Schaltkreis noch den RFX2401C. Der letztere erhöht die Ausgangsleistung
auf maximale 20 dBm (100 mW). Damit sollten Reichweiten bis
zu 1000 m im Freifeld möglich sein.
Beide Module sind pinkompatibel und arbeiten ausschließlich
mit 3,3 V VCC. Betrieb mit 5 V tötet so ein Modul
u. U. sofort! Im Netz werden zwar diverse Schaltungen propagiert, die
den 3,3 V Ausgang des Arduino für den Betrieb der nRFs nutzen.
Das empfiehlt sich aber höchstens für das schwächere nRF24L01+
Modul.

Das stärkere PA-Modul kann in Maximal-Settings deutlich
über 100 mA ziehen, wie dieses Diagramm aus dem Datenblatt zeigt.
Das kann der 3,3 V ausgang des Arduino nicht leisten. Maximal zulässige
Last am 3,3 V Pin des Nano ist 50 mA. Man braucht also dafür
einen separaten 3,3 V-Regler. Ein Blockkondensator, dicht am 3,3 V-Pin
des nRF wird dringend empfohlen.
Wichtiger Hinweis:
Mein erster Versuch mit zwei "normalen" nRF24L01+ funktionierte
sehr gut. Als ich aber auf der Senderseite den stärkeren PA-Typ nutzen
wollte, ging nichts mehr! Insgesamt drei verschiedene PA-Module brachten
alle kein Ergebnis. Schließlich fand ich im Netz den Hinweis, dass
im Nahfeld die Sendeleistung des PA-Typs reduziert werden muß. Nachdem
-18 dBm eingestellt waren (rot im Code unten), liefen alle Module
perfekt.
Für diese ersten Versuche habe ich den folgenden Aufbau
genutzt:

Das Schema zeigt die Sender-Seite. Genutzt wird das "schwächere"
Modul, daher die Speisung aus dem 3,3 V Pin vom Arduino. Am A0 hängt
das Poti dessen Wert zum Empfänger übertragen wird.
Die Empfänger-Seite sieht genauso aus, nur fehlt das
Poti am A0. Dafür hängt der Arduino permanent über USB
am Terminal und gibt dort den empfangenen Poti-Wert aus.
Test-Sender Code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t my_radio_pipe = 0xE8E8F0F0E1LL;
RF24 radio(9, 10);
struct Data_to_be_sent {
byte ch1;
};
Data_to_be_sent sent_data;
void setup()
{
radio.begin();
radio.setPALevel(RF24_PA_MIN); // nötig
für PA-Typ
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(my_radio_pipe);
sent_data.ch1 = 127;
}
void loop()
{
sent_data.ch1 = map( analogRead(A0), 0, 1024, 0, 255);
radio.write(&sent_data, sizeof(Data_to_be_sent));
}
Test-Empfänger Code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipeIn = 0xE8E8F0F0E1LL;
RF24 radio(9, 10);
struct Received_data {
byte ch1;
};
int ch1_value = 0;
Received_data received_data;
void setup()
{
Serial.begin(9600);
received_data.ch1 = 127;
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1,pipeIn);
radio.startListening();
}
unsigned long last_Time = 0;
void receive_the_data()
{
while ( radio.available() ) {
radio.read(&received_data, sizeof(Received_data));
last_Time = millis();
}
}
void loop()
{
receive_the_data();
ch1_value = map(received_data.ch1,0,255,1000,2000);
Serial.println(ch1_value);
delay(500);
}
Im Terminal der Arduino IDE werden nun hoffentlich die Potiwerte im Bereich
von 0 bis 255 abhängig von der Schleiferstellung ausgegeben.
Genug getestet! Jetzt kommen wir zur neuen 10-Kanal Fernsteuerung.
Die Senderschaltung:

Ein Klick auf die Eagle-Grafik vergrößert sie
in einem neuen Browserfenster. Die Kanäle 1-4 liegen auf den X/Y-Achsen
der beiden Joysticks. Kanal 5-6 sind die zwei Potis, 7-8 liegen auf zwei
Kippschaltern und 9-10 sind auf Drucktaster gelegt.
Die Schaltung bindet über I²C einen MPU6050 an
den Arduino. Dieser Beschleunigungssensor/Gyroskop soll in einer späteren
Version der Software wahlweise zur Steuerung benutzt werden. In der im
Folgenden vorgestellten aktuellen SW-Version wird er noch nicht berücksichtigt.
Die Stromversorgung ist etwas ungewöhnlich. Ich wollte
mit nur zwei AA-Zellen, also 3V auskommen. Das geht mit dem gewählten
DC-DC Booster, der ab etwa 1,5V Eingang bereits 5V am Ausgang bereitstellt.
Dadurch ist sogar Betrieb mit 2 NiMh Zellen (2,4 V) möglich. Über
C1 und C2 wurde jeweils nachträglich noch ein 100 nF SMD-Kondensator
geschaltet (fehlt in Schaltbild und Fotos).
Bei Betrieb mit exakt 3,0 V ist die Stromaufnahme 160 mA. Bei
sinkender Eingangsspannung steigt der Strom. Er beträgt bei 2,4 V
etwa 200 mA.
Auf zwei Stiftleisten werden für künftige Erweiterungen
die ungenutzten Arduino-Pins D6-8 sowie Masse, +3,3V, +5V und die I²C
Datenleitungen herausgeführt.

Das Bild oben zeigt die Hauptbauteile des Senders. Der dritte
Kippschalter wird als EIN/AUS Hauptschalter genutzt.

Die 2-lagige Leiterplatte ist in Eagle entstanden und hat
die Abmaße 150 mm x 90 mm. (Die Massefläche ist in
dieser Ansicht ausgeblendet)

Nach Erstellung der Gerber-Dateien kann man sich die künftige
Platte in einem Gerber-Viewer ansehen.
Die Empfängerschaltung:

Der Empfänger ist sehr simpel und eigentlich wäre
es sogar noch einfacher gegangen. Die externe 3.3 V Quelle könnte
bei Beschränkung auf das nRF24L01+ Modul entfallen. Es würde
dann aus dem Nano versorgt. Auch die LED an A3 ist nicht unbedingt nötig
aber nützlich, weil sie eine bestehende Verbindung zum Sender anzeigt.
Über C1 und C2 wurde jeweils nachträglich noch ein 100 nF
SMD-Kondensator geschaltet (fehlt in Schaltbild und Fotos).

Hier die Einzelteile des Empfängers. Erst vor Kurzem
habe ich entdeckt, daß es Stiftleisten in verschiedenen Farben gibt.
Das bietet sich hier natürlich an, weil man die Servoanschlüsse
(Plus/Minus/Signal) damit klar identifizieren kann.

Auch diese Platte ist zweilagig. Die Maße sind 55 mm
x 35 mm. (Die Masseflächen sind auch hier wieder ausgeblendet)

Auch hier gibt es wieder einen Blick auf das Design der
Platte aus dem Gerber-Viewer.
Die Platinen sind von JLC-PCB in China und ich hatte gehofft,
daß ich nicht ewig auf die Lieferung warten muß.

Sie kamen schließlich aus Hongkong. Am 27. Januar
bestellt, wurden sie am 04. Februar per Kurier an meiner Haustür
geliefert. Die Mindestbestellmenge war 5 Stk. Ich habe also 5 Sender und
10 Empfänger bestellt. Der Gesamtpreis einschließlich Lieferung
betrug unglaubliche 25,60 €. Wobei mehr als die Hälfte
davon für den Versand berechnet war.

Der Empfänger ist als erster fertig bestückt.
In diesem Fall mit dem kleinen nRF24L01+ Modul, daß auf der Unterseite
der Platine sitzt.

Hier nun auch die bestückte Senderplatine, diesmal
mit nRF24L01 PA. Alles passte perfekt. Nur der Eagle-Footprint für
die Mini-Joysticks ist minimal in der Y-Achse daneben. Das muß ich
beim Gehäusedesign beachten, weil der Mittelpunkt der Bedienknöpfe
jeweils um ca 2 mm nach unten verschoben ist.
Das Gehäuse des Senders entstand im 3D-Drucker und
das Design dazu in Fusion 360. Die animierte GIF hier unten zeigt das
Ganze im Schnelldurchlauf.


Das Gehäuseoberteil von innen zeigt die Anordnung der
Bedienteilen. Keine davon sind direkt im Gehäuse befestigt. Nur die
Platine sitzt mit den vier Befestigungsschrauben M3 fest im Gehäuse.
Das macht Montage und Demontage sehr einfach.

Im Gehäuseunterteil befindet sich nur das Batteriefach
für die beiden AA-Zellen. Ober- und Unterteil werden an der Vorderseite
mit zwei M3 Schrauben zusammengehalten. An der Rückseite sind sie
Formschlüssig durch Nut und Falz miteinander verbunden.

Der Schnitt zeigt rechts die Anordnung von Nut und Falz.
Im Schnitt ist für den Batteriekasten das kleine Loch rechts unten
zu sehen. Das ist ein durchgehender Kanal für einen Draht von der
Plus- zur Minusseite, wo sich die Kontakte zur Leiterplatte befinden.
Man beachte im Hintergrund den nach links abgeschrägten Innen-Bund.
Das Erleichtert das Zusammenfügen der beiden Teile nach dem Einrasten
von Nut und Falz auf der rechen Seite des Bildes.

Im Batteriefach gibt es an beiden Enden eine 1,6 mm
breite Nut für ein kleines Stück Lochraster-PCB. Darauf sind
die Kontakte gelötet. Hier oben der Plus-Kontakt wird von zwei U-förmigen
Drahtstücken hergestellt. Im rechten Bild sieht man den Plus-Leiter
durch den vorher erwähnten Kanal zur Gegenseite verschwinden.

Die Minusseite bildet ein recykelter Kontakt aus einer alten
TV-Fernbedienung. An der Außenseite der kleinen Platte kommt der
Draht vom Pluspol an und dort sitzt auch ein 2-poliger 90° Pinheader
als Kontaktanschluß zur Senderplatine.

Hier sieht man die Verbindung zwischen PCB und Batteriefach
mit normalen Pinheader-Steckbrücken. Der helle Streifen auf dem PCB
ist sehr dünner Schaumstoff, der verhindert, daß die Batterien
an der Platte klappern.
Die Platine wird oben mit zwei normalen M3 Linsenkopf-Schrauben im Gehäuse
befestigt. Unten sind es zwei Gewindeabstandshülsen, in die dann
auch die Rückwand geschraubt werden kann.

Ein Bild vom fertigen Sender. In der Mitte zwischen den
Potis und auch links vom linken Poti finden sich zwei kleine optische
Anzeigen. Das sind einfach nur kurze Stückchen von transparentem
3D-Druck Filament. Im Gehäuse eingeklebt, enden sie unten auf der
Platine unmittelbar über den SMD-LEDs, die auf dem Arduino (Anzeige
in der Mitte) und auf dem DC-DC Wandler sowieso schon vorhanden sind.
Deren Leuchten wird dadurch einfach nach Außen geleitet.
Abschließend noch einige Bilder vom Gehäuse des
Empfängers. Das Design kommt wieder aus Fusion 360, gedruckt mit
dem Ultimaker Original+. Das Material ist diesmal transparentes PLA.

Die Montage erfolgt ohne Schrauben. Es ist ein sogenanntes
"snap-fit" Gehäuse. Der Deckel rastet in das Unterteil
ein.
Die Leiterplatte sieht sehr nackt aus. Das liegt daran, dass viele Bauelemente
in meiner Eagle-Bibliothek keinen 3D-Pack hinterlegt haben. Daher ist
auch der Raum unter der Platine hier nur leer zu sehen. In Wirklichkeit
hängt dort das nRF24L01 Modul.

Die beiden Säulen in den gegenüberliegenden Ecken
fixieren die Leiterplatte von oben.

Durch den Ausschnitt sind die Steckverbinder für Betriebsspannung
und Servos zugänglich und die Verbindungs-LED ist besser zu sehen.

Transparentes Filament ist nach dem Druck leider nicht wirklich
glasklar, sondern nur etwas durchscheinend.
|