Hello everyone
I'm making a radio controller for my RC airplanes using nRF24L01 and Arduino nano
I have made one for my RC car with no problems but now I have some problems
I make them on perfboards.
I made the transmitter successfully, and then the receiver.
The receiver sometimes would work and sometimes wouldn't. Like it couldn't receive any data
I added a code to serial.print the value (wether it receives anything or not). So the TX LED should start flashing as soon as I power Arduino. When I power Arduino alone it flashes so it's sending the data through serial. When I power it in my circuit with nRF DETACHED, it flashes, but as soon as I put the nRF in its place(female header pins) it stops flashing and it means there's some problems in my soldering.
It desoldered everything except Arduino and nrf24, it didn't change anything, I soldered Arduino pins directly to the nRF pins (Arduino was in perfboard, but nRF wasn't) and it worked great. Now I decided to remove header pins and solder nRF directly in perfboard, now I have soldered VCC and GND and MISO and MOSI, and now when I power Arduino, it doesn't work -_-
I'm partially sure that it's because of my solderings like it has some short circuit, I don't know.
If anyone can guess which pin is probably causing this problem?
After I posted this topic, I saw if I touch or get my finger close to MOSI or CSN on nRF (I'm not sure which one) the Arduino TX LED would flash. I soldered all pins, and now again it doesn't flash even if I touch it
erfan_m14:
I'm partially sure that it's because of my solderings like it has some short circuit, I don't know.
That's a reasonable hypothesis but without seeing, in detail, how you have constructed it I can't think how we can help. Even with pictures it may be very difficult to offer useful advice.
I had one faulty nRF24 module in which the Vcc and GND pins were short circuited within the module - and I could not fix it. That sort of problem might cause your symptoms.
Robin2:
That's a reasonable hypothesis but without seeing, in detail, how you have constructed it I can't think how we can help. Even with pictures it may be very difficult to offer useful advice.I had one faulty nRF24 module in which the Vcc and GND pins were short circuited within the module - and I could not fix it. That sort of problem might cause your symptoms.
You're right I didn't know how to give you all details but now I will take a short video and show and explain everything and upload it to YouTube and post the link
The problem is not from nRF as this nRF works well in my other radio controller, and this receiver circuit doesn't work with any of my nRFs
By the way here is the code
/* Receiver code for the Arduino Radio control with PWM output
* Install the NRF24 library to your IDE
* Upload this code to the Arduino UNO, NANO, Pro mini (5V,16MHz)
* Connect a NRF24 module to it:
Module // Arduino UNO,NANO
GND -> GND
Vcc -> 3.3V
CE -> D9
CSN -> D10
CLK -> D13
MOSI -> D11
MISO -> D12
This code receive 7 channels and create a PWM output for each one on D2, D3, D4, D5, D6, D7and D8
Please, like share and subscribe : https://www.youtube.com/c/ELECTRONOOBS
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <VarSpeedServo.h> //To create PWM signals we need this lybrary
const uint64_t pipeIn = 0xE8E8F0F0E1LL; //Remember that this code is the same as in the transmitter
RF24 radio(9, 10); //CSN and CE pins
// The sizeof this struct should not exceed 32 bytes
struct Received_data {
byte ch1; //potentiometer (flaps)
byte ch2; //throttle (motor)
byte ch3; //aileron and vertical tail
byte ch4; //horizontal tail
// byte ch5;
// byte ch6;
// byte ch7;
};
Received_data received_data;
VarSpeedServo channel_1; //potentiometer (flaps)
VarSpeedServo channel_2; //throttle (motor)
VarSpeedServo channel_3; //aileron
VarSpeedServo channel_4; //horizontal tail
VarSpeedServo channel_5; //vertical tail
//Servo channel_6;
//Servo channel_7;
int ch1_value = 0;
int ch2_value = 0;
int ch3_value = 0;
int ch4_value = 0;
int ch5_value = 0;
//int ch6_value = 0;
//int ch7_value = 0;
void reset_the_Data()
{
// 'safe' values to use when NO radio input is detected
received_data.ch1 = 127; //Throttle (channel 1) to 0
received_data.ch2 = 127;
received_data.ch3 = 127;
received_data.ch4 = 127;
// received_data.ch5 = 0;
// received_data.ch6 = 0;
// received_data.ch7 = 0;
}
/**************************************************/
void setup()
{
Serial.begin(9600);
//Attach the servo signal on pins from D2 to D8
channel_1.attach(3);
channel_2.attach(2,1000,2000);
channel_3.attach(4);
channel_4.attach(5);
channel_5.attach(6);
// channel_6.attach(7);
// channel_7.attach(8);
//We reset the received values
reset_the_Data();
//Once again, begin and radio configuration
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1,pipeIn);
//We start the radio comunication
radio.startListening();
}
/**************************************************/
unsigned long lastRecvTime = 0;
//We create the function that will read the data each certain time
void receive_the_data()
{
while ( radio.available() ) {
radio.read(&received_data, sizeof(Received_data));
lastRecvTime = millis(); //Here we receive the data
}
}
/**************************************************/
void loop()
{
//Receive the radio data
receive_the_data();
//////////This small if will reset the data if signal is lost for 1 sec.
/////////////////////////////////////////////////////////////////////////
unsigned long now = millis();
if ( now - lastRecvTime > 1000 ) {
// signal lost?
reset_the_Data();
//Go up and change the initial values if you want depending on
//your aplications. Put 0 for throttle in case of drones so it won't
//fly away
}
ch1_value = map(received_data.ch1,0,255,0,180);
if (received_data.ch2 < 127) {
received_data.ch2 = 127;
}
ch2_value = map(received_data.ch2,127,255,0,180);
ch3_value = map(received_data.ch3,0,255,0,180);
ch4_value = map(received_data.ch4,0,255,0,180);
ch5_value = map(received_data.ch4,0,255,0,180);
// ch6_value = map(received_data.ch6,0,1,1000,2000);
// ch7_value = map(received_data.ch7,0,255,1000,2000);
//Creathe the PWM signals
channel_1.slowmove(ch1_value, 120);
channel_2.write(ch2_value);
channel_3.slowmove(ch3_value, 120);
channel_4.slowmove(ch4_value, 120);
channel_5.slowmove(ch5_value, 120);
// channel_6.writeMicroseconds(ch6_value);
// channel_7.writeMicroseconds(ch7_value);
Serial.print("ch1_value=");
Serial.println(ch1_value);
Serial.print('\n');
Serial.print("ch2_value=");
Serial.println(ch2_value);
Serial.print('\n');
Serial.print("received_data.ch1=");
Serial.println(received_data.ch1);
Serial.print('\n');
Serial.print("received_data.ch2=");
Serial.println(received_data.ch2);
Serial.print('\n');
}//Loop end
Let me mention that if I remove the Arduino and nRF, and put them in my transmitter circuit, they will work well.
So I think it shows that the problem is with my soldering and these things, but I resoldered many times, I don't know what I should do. Maybe measure the resistance between those pons to see if there is any short circuit? Well there isn't any short circuit but some pins show resistance of 200k ohms or 100 k ohms.
How much resistance at least should be between two near pins which are not supposed to be connected to each other?
A video is not a satisfactory way to explore soldering or wiring errors. A series of sharply focused still images would be needed. Even with good still images I think I would find it impossible to identify a problem when all the wires are the same colour and seem to overlap each other.
My best suggestion is to remove all of the wires and build the circuits again from first principles - testing all the connections carefully with a multimeter to ensure the connections are solid and to ensure that there are no unintended solder bridges to other pads on the PCB.
I have made several projects on stripboard (veroboard) and I ALWAYS check that there are no bridged connections after every two or three soldered joints. I scrape between the tracks with a small screwdriver. It is much more difficult to find that sort of problem when everything is assembled.
Have you tested the new software on a breadboard before you started making the soldered circuits? If not, and as you say you have another older set of hardware which does work, iIs it possible to try the newer software in the older hardware so as to verify that there is no software error?
How much resistance at least should be between two near pins which are not supposed to be connected to each other?
Much the same as if you held the two multimeter probes so they do not touch anything.
...R
Robin2:
A video is not a satisfactory way to explore soldering or wiring errors. A series of sharply focused still images would be needed. Even with good still images I think I would find it impossible to identify a problem when all the wires are the same colour and seem to overlap each other.My best suggestion is to remove all of the wires and build the circuits again from first principles - testing all the connections carefully with a multimeter to ensure the connections are solid and to ensure that there are no unintended solder bridges to other pads on the PCB.
I have made several projects on stripboard (veroboard) and I ALWAYS check that there are no bridged connections after every two or three soldered joints. I scrape between the tracks with a small screwdriver. It is much more difficult to find that sort of problem when everything is assembled.
Have you tested the new software on a breadboard before you started making the soldered circuits? If not, and as you say you have another older set of hardware which does work, iIs it possible to try the newer software in the older hardware so as to verify that there is no software error?
Much the same as if you held the two multimeter probes so they do not touch anything....R
The new software, actually isn't new and I had added these codes to my previous controller too, actually I copied and pasted the codes from the previous project, so yes I have tested this code and it has no problems.
I guess as you said the best thing is to remove all wires and solder new wires for the 4th or 5th time but this time much more carefully. Thank you so much for your help, I hope this time it will work.
Robin2:
A video is not a satisfactory way to explore soldering or wiring errors. A series of sharply focused still images would be needed. Even with good still images I think I would find it impossible to identify a problem when all the wires are the same colour and seem to overlap each other.My best suggestion is to remove all of the wires and build the circuits again from first principles - testing all the connections carefully with a multimeter to ensure the connections are solid and to ensure that there are no unintended solder bridges to other pads on the PCB.
I have made several projects on stripboard (veroboard) and I ALWAYS check that there are no bridged connections after every two or three soldered joints. I scrape between the tracks with a small screwdriver. It is much more difficult to find that sort of problem when everything is assembled.
Have you tested the new software on a breadboard before you started making the soldered circuits? If not, and as you say you have another older set of hardware which does work, iIs it possible to try the newer software in the older hardware so as to verify that there is no software error?
Much the same as if you held the two multimeter probes so they do not touch anything....R
I did what you said and it worked. Thank youuuu
Thanks for the update. Good to hear it is working.
...R