Hardi Kurnianto
Published

Mini ARM Robot use Multichannel NRF24

On this occasion we will make control and monitoring of the robot's mini arm with different frequency channels so that it can run parallel

IntermediateProtip10 days869
Mini ARM Robot use Multichannel NRF24

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
Arduino Mega 2560
Arduino Mega 2560
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×2
RGB LCD Shield Kit, 16x2 Character Display
RGB LCD Shield Kit, 16x2 Character Display
×2
nrf24l01
×6
Dual H-Bridge motor drivers L298
SparkFun Dual H-Bridge motor drivers L298
×1
Geared DC Motor, 12 V
Geared DC Motor, 12 V
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

JOYSTICK

Code

Remote Channel 100

Arduino
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

uint64_t pipeTx = 0x4A1001LL; //alamat lawan #ROBOT
uint64_t pipeRx = 0x4A1002LL; //alamat sendiri #Joystick
uint8_t CE=9; uint8_t CSN=10;

int msg[1]; int datain; int bawa; int tinggal;
RF24 Radio(CE, CSN);

void setup()
{
  Serial.begin(9600);
  Radio.begin();
  Radio.setChannel(100);
  Radio.setPALevel(RF24_PA_HIGH);
  Radio.setDataRate(RF24_2MBPS);
  Radio.openWritingPipe(pipeTx);
  pinMode(6, INPUT); pinMode(5, INPUT);pinMode(2,OUTPUT);
}

void loop()
{
  if ( Radio.available() ){digitalWrite(2,HIGH); delay(10);}
   bawa=digitalRead(6);
   tinggal=digitalRead(5);
  if (bawa==0){msg[0]=1; Radio.write(msg, 1); Serial.println("bawa");digitalWrite(2,HIGH);}
  else if (tinggal==0){msg[0]=2; Radio.write(msg, 1); Serial.println("tinggal");digitalWrite(2,HIGH);}
}

Remote Channel 110

Arduino
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

uint64_t pipeTx = 0x4A1101LL; //alamat lawan #ROBOT
uint64_t pipeRx = 0x4A1102LL; //alamat sendiri #Joystick
uint8_t CE=9; uint8_t CSN=10; int n=0; boolean Flag  = false;
RF24 Radio(CE, CSN);

unsigned char buff[33];
float Vi,R1,R2;

struct Pack {
  int data1;
  int data2;
} packet;

void setup()
{
  Serial.begin(9600);
  R1=10000.0; R2=33000.0;
  Radio.begin();
  lcd.begin(16,2);
  lcd.backlight();
  lcd.clear();
  Radio.setChannel(110);
  Radio.setPALevel(RF24_PA_HIGH);
  Radio.setDataRate(RF24_2MBPS);  
  Radio.openReadingPipe(1, pipeRx);
  Radio.startListening();
}

void loop()
{
  
  
  if ( Radio.available())
  {
    lcd.clear();
    Radio.read(&packet, sizeof (packet));
    lcd.setCursor(0,0);
    lcd.print("Ka");
    lcd.setCursor(10,0);
    lcd.print("Ki");
    if(packet.data1<=80 && packet.data2<=80)
    {
      lcd.setCursor(3,0);
      lcd.print(packet.data1);
      lcd.setCursor(13,0);
      lcd.print(packet.data2);
    }
    else 
    {
      lcd.setCursor(3,0);
      lcd.print("Err");
     }
    
    
  }

  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  Vi = voltage / (R2/(R1+R2));
  //lcd.clear();
  lcd.setCursor(10,1);
  lcd.print("V");
  lcd.setCursor(5,1);
  lcd.print(Vi*3  );
  delay(500);
}

Remote Channel 120

Arduino
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

uint64_t pipeTx = 0x4A1201LL; //alamat lawan #ROBOT
uint64_t pipeRx = 0x4A1202LL; //alamat sendiri #Joystick
uint8_t CE=9; uint8_t CSN=10;

int msg[1]; int datain;
int maju; int mundur; int kanan; int kiri;
RF24 radio(CE, CSN);

void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(120);
  radio.setPALevel(RF24_PA_HIGH);
  radio.setDataRate(RF24_2MBPS);
  radio.openWritingPipe(pipeTx); delay(50);
  pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); pinMode(8, INPUT);
  pinMode(2,OUTPUT);
}

void loop()
{
  if ( radio.available() ){digitalWrite(2,HIGH); delay(10);}
   maju=digitalRead(6);
   mundur=digitalRead(5);
   kanan=digitalRead(7);
   kiri=digitalRead(8);
  if (maju==0)
  {msg[0]=1; radio.write(msg, 1); Serial.println("maju");digitalWrite(2,HIGH);}
  if (mundur==0)
  {msg[0]=2; radio.write(msg, 1); Serial.println("mundur");digitalWrite(2,HIGH);}
  if (kanan==0)
  {msg[0]=3; radio.write(msg, 1); Serial.println("kanan");digitalWrite(2,HIGH);}
  if (kiri==0)
  {msg[0]=4; radio.write(msg, 1); Serial.println("kanan");digitalWrite(2,HIGH);}
  else{digitalWrite(2, LOW);}
}

Robot Channel 100

Arduino
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
#include <Servo.h>

Servo bawah; Servo kanan; Servo kiri;

int msg[1];
uint64_t pipeTx = 0x4A1002LL; //alamat lawan #JOYSTICK
uint64_t pipeRx = 0x4A1001LL; //alamat sendiri #ROBOT
uint8_t CE=9; uint8_t CSN=10; 
RF24 Radio(CE, CSN);

void awal(){bawah.write(120); kanan.write(80); kiri.write(100);}
void buka(){kanan.write(40); kiri.write(140);}
void tutup(){kanan.write(120); kiri.write(80);}
void angkat(){bawah.write(120);}
void turun(){bawah.write(10);}

void bawa()
{buka();delay(1000);turun();delay(1000);tutup();delay(1000);angkat();}
void tinggal()
{turun();delay(1000);buka();delay(1000);angkat();delay(1000);tutup();delay(1000);}

void setup()
{
  Serial.begin(9600);
  Radio.begin();
  Radio.setChannel(100) ;
  Radio.setPALevel(RF24_PA_HIGH);
  Radio.setDataRate(RF24_2MBPS);
  Radio.openReadingPipe(1, pipeRx);delay(50);
  Radio.startListening();
  bawah.attach(2); kanan.attach(3); kiri.attach(4);
  awal(); 
}

void loop()
{
if ( Radio.available() )
  {
      Radio.read(msg,1);
      if(msg[0]==1){Serial.println("bawa");bawa();}
      else if(msg[0]==2){Serial.println("tinggal");tinggal();}
      } 
}

Robot Channel 110

Arduino
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

#define trigPin1 2
#define echoPin1 3
#define trigPin2 5
#define echoPin2 4

uint64_t pipeTx = 0x4A1102LL; //alamat lawan #JOYSTICK
uint64_t pipeRx = 0x4A1101LL; //alamat sendiri #ROBOT
uint8_t CE=9; uint8_t CSN=10;
RF24 radio(CE, CSN); 

long duration1, distance1;
long duration2, distance2;

struct Pack {
  int data1;
  int data2;
} packet;


void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(110);
  radio.setPALevel(RF24_PA_HIGH);
  radio.setDataRate(RF24_2MBPS);
  radio.stopListening();
  radio.openWritingPipe(pipeTx); delay(50);  
  pinMode(trigPin1, OUTPUT);pinMode(echoPin1, INPUT);pinMode(trigPin2, OUTPUT);pinMode(echoPin2, INPUT);
}

void loop()
{
  digitalWrite(trigPin1, LOW); delayMicroseconds(2); 
  digitalWrite(trigPin1, HIGH); delayMicroseconds(10); 
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = (duration1/2) / 29.1;
  packet.data1 = distance1;
  
  digitalWrite(trigPin2, LOW);delayMicroseconds(2); 
  digitalWrite(trigPin2, HIGH);delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = (duration2/2) / 29.1;
  packet.data2 = distance2;

  radio.write(&packet, sizeof(packet));
  delay(500);
}

Robot Channel 120

Arduino
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

int msg[1];
int IN1A = 8; int IN2A = 9; int IN3A = 10; int IN4A = 11;
int IN1B = 7; int IN2B = 6; int IN3B = 5; int IN4B = 4;

uint64_t pipeTx = 0x4A1202LL; //alamat lawan #JOYSTICK
uint64_t pipeRx = 0x4A1201LL; //alamat sendiri #ROBOT

RF24 radio(49, 53);

void maju()
{digitalWrite(IN1B, HIGH);digitalWrite(IN2B, LOW);digitalWrite(IN3B, LOW);digitalWrite(IN4B, HIGH);}
void mundur()
{digitalWrite(IN1B, LOW);digitalWrite(IN2B, HIGH);digitalWrite(IN3B, HIGH);digitalWrite(IN4B, LOW);}
void kanan()
{digitalWrite(IN1A, LOW);digitalWrite(IN2A, HIGH);digitalWrite(IN3A, LOW);digitalWrite(IN4A, HIGH);}
void kiri()
{digitalWrite(IN1A, HIGH);digitalWrite(IN2A, LOW);digitalWrite(IN3A, HIGH);digitalWrite(IN4A, LOW);}
void nstop()
{digitalWrite(IN1B, HIGH); digitalWrite(IN1A, HIGH);digitalWrite(IN2B, HIGH); digitalWrite(IN2A, HIGH);
 digitalWrite(IN3B, HIGH); digitalWrite(IN3A, HIGH);digitalWrite(IN4B, HIGH); digitalWrite(IN4A, HIGH);}
void putar()
{digitalWrite(IN1A, LOW);digitalWrite(IN2A, HIGH);digitalWrite(IN3A, HIGH);digitalWrite(IN4A, LOW);digitalWrite(IN1B, LOW);digitalWrite(IN2B, HIGH);
 digitalWrite(IN3B, LOW);digitalWrite(IN4B, HIGH);}
void putar1()
{digitalWrite(IN1A, HIGH);digitalWrite(IN2A, LOW);digitalWrite(IN3A, LOW);digitalWrite(IN4A, HIGH);digitalWrite(IN1B, HIGH);digitalWrite(IN2B, LOW);
 digitalWrite(IN3B, HIGH);digitalWrite(IN4B, LOW);}

void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(120);
  radio.setPALevel(RF24_PA_HIGH);
  radio.setDataRate(RF24_2MBPS);
  radio.openReadingPipe(1, pipeRx);
  radio.startListening();
  pinMode(IN1A, OUTPUT); pinMode(IN2A, OUTPUT);pinMode(IN3A, OUTPUT); pinMode(IN4A, OUTPUT);
  pinMode(IN1B, OUTPUT); pinMode(IN2B, OUTPUT);pinMode(IN3B, OUTPUT); pinMode(IN4B, OUTPUT);
}

void loop()
{
  if ( radio.available() )
  {
   radio.read(msg,1);
      if(msg[0]==4){Serial.println("maju");kanan();delay(100);}
      if(msg[0]==1){Serial.println("mundur");kiri();delay(100);}
      if(msg[0]==2){Serial.println("kanan");maju();delay(100);}
      if(msg[0]==3){Serial.println("kiri"); mundur();delay(100);}
      else{nstop();}
      }
     else {Serial.println("disconnect");nstop();}
      }

Credits

Hardi Kurnianto
17 projects • 17 followers
Master student at Intelligent Control and Systems Engineering Department

Comments