Ich bin dabei ein altes Modellboot von meinem Opa aufzürüsten den Code habe ich schon ferig gestellt und der Funktioniert auch fast einwandfrei allerdings ist es so, dass wenn der Antribsmotor angeht, der Rf24 zwar noch verbindung hat allerdings nicht mehr reagiert (oder so). Hier mein Code und der Schaltplan.
//Reciver
#include <Servo.h>
#include <SPI.h>
#include <RF24.h>
#include <nRF24L01.h>
Servo Throttle;
Servo Yar;
byte Array[4];
int Tpos = 75;
int Ypos = 75;
int Trot = 0;
int Yrot = 0;
int Time = 0;
const uint64_t pipeIn = 0xE9E8F0F0E1LL;
RF24 radio(9, 10);
void setup()
{
radio.begin();
radio.openReadingPipe(1,pipeIn);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_HIGH);
radio.startListening();
Throttle.attach(4);
Yar.attach(3);
}
unsigned long lastRecvTime = 0;
void recvData()
{
while ( radio.available() ) {
radio.read(&Array, 4);
Trot = map(Array[0],0,200,-80,80);
Yrot = map(Array[1],0,200,80,-80);
lastRecvTime = millis();
}
}
void loop()
{
recvData();
unsigned long now = millis();
if ( now - lastRecvTime > 1000 )
{
Trot = 0;
Yrot = 0;
}
Tpos = Trot + 75;
Ypos = Yrot + 75;
Throttle.write(Tpos);
Yar.write(Ypos);
}
Die 3,3V des Nanos sind zu schwachbrüstig für den nRF24L01. Da braucht es mindestens einen 100µF Elko. Besser eine eigene 3,3V Versorgung.
Es könnte durchaus sein das der Motor soviel Strom braucht, das die Versorgung zusammen bricht, und dadurch die Funktion gestört ist. Jetzt erst erkannt, der Motor wird ja seperat mit 4xAA versorgt.
Das Fritzing Batteriefach gibt den Eindruck, das 2xAA in Reihe und davon zwei Paralell geschalten sind. 3V sind zu wenig für den Nano als VIN.
Der Motor läuft auch mit 3V?
Woran genau machst du die Fehlfunktion fest? Tun die Servos was sie sollen, wenn der Motor abgeklemmt ist?
Genau habe 200µ direkt am 3,3V damit funktioniert der nRF24. @phantox_44 wen der Motor nur in einer Richtung läuft eine Diode antiparallel direkt am Motor.
Ja, das ist ok. Sieht nach einem Regler aus, der auch einen Richtungswechsel durchführen kann. Dann funktioniert es mit der Freilaufdiode nicht. Zumindest nicht direkt am Motor.
Besser ist die Verwendung einer Mosfet-H-Brücke, die schon die Freilaufdioden integriert hat.
Oder du verzichtest auf den Richtungswechsel des Motors.
Dann klappt das mit einer Freilaufdiode am Motor.
Ich glaube du denks, dass der Motor nicht funktioniert. Der funktioniert aber. Was nicht funktioniert ist, dass nach ca.2 sekunden wenn der Motor läuft, ich weder den Motor drosseln, noch lenken kann.
Das ist ganz falsch.
Davon habe ich nichts geschrieben.
In der Elektronik sollte man sich auf physikalische Grundlagen und entsprechende Messwerte verlassen.
Deine Probleme kommen durch fehlende Enrstörung des Motors, sowie der fehlenden Freilaufdiode.
Braucht es die Diode, wenn der Motor galvanisch getrennt von der μC Schaltung ist? So wie ich den MSC verstehe, steuern die Servos mechanisch die Motorgeschwindigkeit. Somit kommt keine entstehende Spannung vom Motor zum μC. Aber vielleicht habe ich das System falsch verstanden.
Das MSC oder der Motor scheint ordentlich Störungen auszustrahlen.
Das weiß man nur sicher, wenn man es messtechnisch oder experimentell heraus findet.
In meinen Projekten erhällt jede Induktivität eine Freilaufdiode, bei Motoren verwende ich immer passende H-Brücken.
Dies Störungen gelangen auch durch die Luft, und man wundert sich, wieso es nicht funktioniert.
Ich habe mich nochmal anderweitig zu dem Thema ungesehen ( https://forum.arduino.cc/t/arduino-storsicher-machen/187597/8 ) und habe demnach einen 47nF zwischen den Pins und je einen 22nF vom Pin zum Gehäuse angelötet. Danke für eure Lösungsvorschläge.