Hola amigos,
Tenía ganas de hacer un proyecto nuevo con Arduino y me propuse investigar los NRF24L01, y como ni me gustan los drones ni los aviones, y los coches brushless son caros, me he decidido a radiocontrolar un velero de regatas a escala UE compre por 60€ por qué válgame la casualidad, le faltaba el mando y yo tenía una radio antigua.
Ahora me encuentro con problemas que he ido solucionando... Los módulos no se comunicaban bien o erraban, primero puse una pila 9v al Arduino, de la salida 5v alimente los servos, y de la 3,3 los NRF24L01... Solución-> LM7806 para servos, LM7805 para Arduino y LD111V33 para los NRF24L01, al parecer los servos crean una caída de tensión que interrumpia la comunicación de los módulos... (Esto lo pongo por si le sirve a alguien)
Ahora tengo mi barco y mi radio, el timón funciona bien, pero mi problema está en que no me aclaro en mandar información de dos dispositivos (2 potenciómetros) al barco para controlar vela, y timón. He pensado en usar un struct, a ver cómodo lo veis. Os subo los .ino
Os aclaro... La librería ServoPot es de mi autoría, no la vais a encontrar, la hice para controlar fácilmente un servo desde un potenciómetro cualquiera añadiendo unos valores, hace automáticamente el mapeo de los grados que le digamos (setSAV) y los valores de potenciómetro según este nos marque ya que no todos regulan entre 0 y 1024 (setPotval), hay otras funciones, si veis algo dudoso en el código preguntar.
EMISORA
RECEPTOR
Gracias de antemano
Enviado desde mi Mi A2 Lite mediante Tapatalk
Tenía ganas de hacer un proyecto nuevo con Arduino y me propuse investigar los NRF24L01, y como ni me gustan los drones ni los aviones, y los coches brushless son caros, me he decidido a radiocontrolar un velero de regatas a escala UE compre por 60€ por qué válgame la casualidad, le faltaba el mando y yo tenía una radio antigua.
Ahora me encuentro con problemas que he ido solucionando... Los módulos no se comunicaban bien o erraban, primero puse una pila 9v al Arduino, de la salida 5v alimente los servos, y de la 3,3 los NRF24L01... Solución-> LM7806 para servos, LM7805 para Arduino y LD111V33 para los NRF24L01, al parecer los servos crean una caída de tensión que interrumpia la comunicación de los módulos... (Esto lo pongo por si le sirve a alguien)
Ahora tengo mi barco y mi radio, el timón funciona bien, pero mi problema está en que no me aclaro en mandar información de dos dispositivos (2 potenciómetros) al barco para controlar vela, y timón. He pensado en usar un struct, a ver cómodo lo veis. Os subo los .ino
Os aclaro... La librería ServoPot es de mi autoría, no la vais a encontrar, la hice para controlar fácilmente un servo desde un potenciómetro cualquiera añadiendo unos valores, hace automáticamente el mapeo de los grados que le digamos (setSAV) y los valores de potenciómetro según este nos marque ya que no todos regulan entre 0 y 1024 (setPotval), hay otras funciones, si veis algo dudoso en el código preguntar.
EMISORA
Código:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <ServoPot.h>
#include <LiquidCrystal.h>
int var1;
ServoPot potTimon;
LiquidCrystal lcd(2,4,5,6,9,10);
RF24 radio(7, 8); // CE, CSN
int AMP;
const byte address[6] = "00001";
int var[1];
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
potTimon.setInput(A5);
potTimon.setSAV(0,180);
potTimon.setPotval(550,915);
AMP = 3;
pinMode(AMP, INPUT);
}
void loop() {
if(var1 != var[0]) lcd.clear();
var1 = var[0];
lcd.setCursor(0,0);
lcd.print("Timon: ");
lcd.print(potTimon.GetValue() );
lcd.print((char)223);
lcd.setCursor(0,1);
lcd.print("Analog: ");
lcd.print(analogRead(A5) );
potTimon.anglesMap(3);
var[0] = potTimon.GetValue();
radio.write(&var[0], sizeof(var[0]));
Serial.print(analogRead(A5));
Serial.print(" - ");
Serial.println(var[0]);
}
RECEPTOR
Código:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
Servo timon;
RF24 radio(7, 8);
const byte rxAddr[6] = "00001";
void setup()
{
timon.attach(3);
while (!Serial);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, rxAddr);
radio.startListening();
}
void loop()
{
if (radio.available())
{
int pot[1];
radio.read(&pot, sizeof(pot));
timon.write( pot[0] );
Serial.println(pot[0]);
}
}
Gracias de antemano
Enviado desde mi Mi A2 Lite mediante Tapatalk