Arduino Joystick Shield Nrf24l01 Wireless

En este proyecto, estamos construyendo un robot de control remoto de dos ruedas utilizando módulos nRF24L01, un shield con joystick, un Ardunio UNO y un Arduino nano con un controlador de motor L298N para controlar los motores de CC.

arduino-joystick-schutzschild-arduino-5878-450x450

Los controladores de motor nRF24L01 y L298N juntos impulsarán el robot con el arduino nano como controlador. Además, para controlar este robot, estamos utilizando Arduino UNO con el módulo de joystick.

El shield proporciona una entrada analógica simple con el joystick y cuatro botones separados. También se incluyen dos pequeños botones adicionales.

El chip transceptor RF nRF24L01

El nRF24L01 es un chip transceptor de RF realmente rápido y económico. Funciona a 2,4 GHz a hasta 2 Mbps y tiene un consumo de energía ultra bajo, lo que significa que una batería AA/AAA se puede alimentar durante mucho tiempo. Funciona en un rango de suministro de 1,9 a 3,6 V con una corriente máxima de RX/TX de menos de 14 mA.

modulo-nrf24l01

Hardware requerido.

ArduinoUNO-300x300
  • Arduino UNO
nano
  • arduino nano
arduino-joystick-schutzschild-arduino-5878-450x450
  • Shield de joystick
l294n
  • Controlador de motor L298N
modulo-nrf24l01_bas
  • nRF24L01 x 2
chasis-de-vehiculo-robotico-para-arduino-pic-avr-etc-11690-MLM20046960131_022014-O
  • chasis y motores

Montaje del hardware emisor

Ensamblar el Arduino Uno y el shield juntos (con el nrf24).

arduino-robot-car-joystick

Esquema del robot

Siga el esquema de Fritzing y conecte todo al Arduino Nano como se muestra a continuación.

esquema

esq2esq1

Código emisor:

Pâra controlar al robot vams a mandar los mensajes «up», «down», «left», «right», «start», «select» y «analgobut». Con estos mensajes podremos tomar decisiones en nuestro robot, para ir hacia delante, atras, derecha, izquierda,…

//Arduino Joystick shield Code
#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>


#define CE_PIN  9
#define CSN_PIN 10

int up_button     = 2; // Boton Amarillo - A
int down_button   = 4; // Boton Amarillo - C 
int left_button   = 5; // Boton Azul     - D 
int right_button  = 3; // Boton Azul     - B
int start_button  = 6; // Boton F
int select_button = 7; // Boton E
int analog_button = 8; // 
int x_axis = A0;
int y_axis = A1;
int buttons[]={up_button, down_button,left_button,
    right_button,start_button,select_button,analog_button};


const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN,CSN_PIN);
char msg[20] = "";

void setup(){
     for(int i; i <7 ; i++){
         pinMode(buttons[i],INPUT);
         digitalWrite(buttons[i],HIGH);  
     } 
     Serial.begin(9600);
     radio.begin();
     radio.openWritingPipe(pipe);
}

void loop(){
      if(digitalRead(up_button)==LOW){
        char msg[]="up";
      radio.write(&msg,sizeof(msg));
      delay(300);
        Serial.println("UP Button Pressed");
      }
       if(digitalRead(down_button)==LOW){
        char msg[]="down";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Down Button Pressed");
      }
       if(digitalRead(left_button)==LOW){
        char msg[]="left";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Left Button Pressed");
      }
       if(digitalRead(right_button)==LOW){
        char msg[]="right";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Rigth Button Pressed");
      }
       if(digitalRead(start_button)==LOW){
        char msg[]="start";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Start Button Pressed");
      }
       if(digitalRead(select_button)==LOW){
        char msg[]="select";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Select Button Pressed");
      }
       if(digitalRead(analog_button)==LOW){
        char msg[]="analgobut";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Analog Button Pressed");
      }
      Serial.print("\n X = ");
      Serial.print(analogRead(x_axis));
      Serial.print(" \n Y = ");
      Serial.print(analogRead(y_axis));
      Serial.print("  ");
      delay(500);
}
Código robot receptor

// Arduino Car Code 
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>


#define CE_PIN  9
#define CSN_PIN 10

const int RightMotorF= 3;
const int RightMotorB= 4;
const int LeftMotorF= 5;
const int LeftMotorB= 6;

char data[20]="";

RF24 radio(CE_PIN,CSN_PIN);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(){
  pinMode(RightMotorF,OUTPUT);
  pinMode(RightMotorB,OUTPUT);
  pinMode(LeftMotorF,OUTPUT);
  pinMode(LeftMotorB,OUTPUT);
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();
}
 
void loop(){
  String msg="";
  if ( radio.available() ){
    radio.read( data,sizeof(data) );
    Serial.println(data);
    msg=data;
    if(msg=="up"){
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,HIGH);
  digitalWrite(LeftMotorF,HIGH);
  Serial.println("Motor forward");
  }
  else if(msg=="down"){
  digitalWrite(RightMotorB,HIGH);
  digitalWrite(LeftMotorB,HIGH);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  Serial.println("Motor Back");
  }
   else if(msg=="left"){
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,HIGH);
  digitalWrite(RightMotorF,HIGH);
  digitalWrite(LeftMotorF,LOW);
  Serial.println("Left");
  delay(300);
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  }
   else if(msg=="right"){
  digitalWrite(RightMotorB,HIGH);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,HIGH);
  Serial.println("right");
  delay(300);
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  }
  else if(msg=="analgobut"){
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  Serial.println("STOP it");
  }
  }
}

Probando el robot

Después de cargar el código tanto para el control remoto como para el robot, ¡es hora de probarlo! Aquí están los controles para el coche.

shieldexplica

Fuente:

https://maker.pro/arduino/projects/funduino-arduino-joystick-shield-controlled-robot