This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 1 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Presentación de proyecto y dudas (RADIOCONTROL)
#1
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
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
[Imagen: 3c600284f7d26c53899992cf61f86d33.jpg][Imagen: 2422b1645ad47bb30f86928f2f86e6f8.jpg][Imagen: 41154e3afe944ec50716c2276af09ab9.jpg][Imagen: aabebf4dc76cdf8d49893df041c506fa.jpg][Imagen: 047e4928e5ebf7718cb11d8f2aa94112.jpg]
  Responder
#2
Dificil poder ayudarte cuando no has posteado la librería de tu autoria por un lado.
Pero tampoco esta claro los dos valores que quieres enviar.

Al menos una nota explicando, envio esto y esto.

Aca se ve que lees dos datos

Código:
 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();


Supongo que eso es el envió del timon.
Los dos potenciométros no se donde estan?

Como bien has dicho una struct podria ayudarte y también un vector

Código:
radio.write(&var[0], sizeof(var[0]));


esto corresponde a un dato pero si var[3] tuviera tamaño 3 podrias cargar 

var[0] con el valor del timon
var[1] con un potenciometro
var[2] con el 2do potenciometro.


lo envías así

Código:
radio.write(&var, sizeof(var));

y si te daerror pones 

var[] no recuerdo cual funciona

lo mismo del lado receptor.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Novato - Dudas proyecto First Person View para coche o Heli pedrotronic 3 1,840 29-10-2014, 11:28 AM
Último mensaje: pedrotronic
  Dudas Arduino walter white 20 4,255 28-02-2014, 11:17 PM
Último mensaje: walter white
  Dudas Liberia y EEPROM Triggerr 31 17,731 25-08-2013, 10:40 PM
Último mensaje: Triggerr