20042089948860609343154290135367871263297246104253653244222458312125270052256300702210361007257583180001542685853724524200016703683111771555

الأحد، 10 سبتمبر 2017

diy rc car with nrf24l01 - عمل سيارة بالتحكم عن بعد





السلام عليكم و رحمة الله وبركاته


في هدا المشروع سوف نقوم بصناعة او انشاء سيارة نتحكم فيها عن بعد , طبعا في هدا المشروع سوف نستعمل ارخص البوردات فالهدف هو تعلم الالكترونيات.


كود الاردوينو :

المرسل :


#include <SPI.h>
#include <RF24.h>

struct Data{
  int XaxisValue = 0;                  //  variable to read the value from the analog pin 0
  int YaxisValue = 0;                  //  variable to read the value from the analog pin 1
  int SwitchValue = 0;
};
  
const int switchPin = 6;              //  switch to analog pin 2 as digital
const int joyPinX = 0;                 //  pot to analog pin 0
const int joyPinY = 1;                 //  pot to analog pin 1

RF24 radio(9,10);
byte addresses[][6] = {"1Node","2Node"};


void setup() {
  radio.begin();                        // Get the transmitter ready
  radio.setPALevel(RF24_PA_LOW);        // Set the power to low
  radio.openWritingPipe(addresses[1]);  // Where we send data out
  radio.openReadingPipe(1,addresses[0]);// Where we receive data back
  pinMode(switchPin, INPUT_PULLUP);            //  switch is an input
  Serial.begin(9600);  //  serial monitor start
}


 void loop() {
  struct Data inputInfo;
  //  reads the value of the variable resistor 
  inputInfo.XaxisValue = analogRead(joyPinX);   
              
  //  reads the value of the variable resistor 
  inputInfo.YaxisValue = analogRead(joyPinY);   

  //  reads the value of the switch
  inputInfo.SwitchValue = digitalRead(switchPin);
    
  //  sending readed data to serial monitor
  Serial.print(inputInfo.XaxisValue);
  Serial.print("\t");
  Serial.print(inputInfo.YaxisValue);
  Serial.print("\t");
  Serial.println(inputInfo.SwitchValue);

  //Stop listening and begin transmitting
  radio.stopListening();                                 // Stop listening and begin transmitting
  //delay(500);

  if(radio.write(&inputInfo, sizeof(inputInfo)),Serial.println("\n sent inputInfo \n "));         //Send inputInfo data
  
  radio.startListening(); 

 }

المستقبل :
#include <SPI.h>
#include <RF24.h>
#include <L298N.h>

struct Data{
  int XaxisValue = 0;                  //  variable to read the value from the analog pin 0
  int YaxisValue = 0;                  //  variable to read the value from the analog pin 1
  int SwitchValue = 0;
};

RF24 radio(7,8);
byte addresses[][6] = {"1Node","2Node"};

//Pins
const int buzzer = A5;
const int ENA = 10;
const int IN1 = 9;
const int IN2 = 6;
const int IN3 = 5;
const int IN4 = 4;
const int ENB = 3;

L298N driver(ENA,IN1,IN2,IN3,IN4,ENB);

int speed = 150;

void setup() {
  radio.begin();             // Initialize radio
  radio.setPALevel(RF24_PA_LOW);    // Set the power output to low
  radio.openWritingPipe(addresses[0]);
  radio.openReadingPipe(1,addresses[1]);
  radio.startListening();
  
  //  Buzzer and Potentiometer
  pinMode(buzzer,OUTPUT);
  
  Serial.begin(9600);  //  Serial monitor start
}


void loop() {
  struct Data inputInfo;
    
    if(radio.available()){
        radio.read(&inputInfo,sizeof(inputInfo));
        delay(50);// Wait until msg is received
        treatMove(inputInfo.XaxisValue);
        treatTurn(inputInfo.YaxisValue);
        digitalWrite(buzzer,!inputInfo.SwitchValue);// Bip
    } else {
          drive(L298N::MOTOR_B,LOW,LOW);
          drive(L298N::MOTOR_A,LOW,LOW);
          Serial.println("No radio");
          digitalWrite(buzzer,HIGH);
          delay(500);
          digitalWrite(buzzer,LOW);
          delay(500);
    }
    
  //  Sending readed data to serial monitor
  Serial.print(inputInfo.XaxisValue);
  Serial.print("\t");
  Serial.print(inputInfo.YaxisValue);
  Serial.print("\t");
  Serial.println(inputInfo.SwitchValue);
}

//  Treat move values and decide which direction
void treatMove(int m){
  if(m >= 0 && m <= 500){goBackward();Serial.println("Backward");}
  else if(m >= 520 && m <= 1023){goForward();Serial.println("Forward");}
  else{
    Serial.println("STOP MOVE");
    drive(L298N::MOTOR_B,LOW,LOW);
    }
}

//  Treat turn values and decide which side
void treatTurn(int t){
  if(t >= 0 && t <= 500){goLeft();Serial.println("Left");}
  else if(t >= 520 && t <= 1023){goRight();Serial.println("Right");}
  else{
    Serial.println("STOP TURN");
    drive(L298N::MOTOR_A,LOW,LOW);
    }
}


void goForward(){
  drive(L298N::MOTOR_B,HIGH,LOW);
}

void goBackward(){
  drive(L298N::MOTOR_B,LOW,HIGH);
}

void goLeft(){
  drive(L298N::MOTOR_A,HIGH,LOW);
}

void goRight(){
  drive(L298N::MOTOR_A,LOW,HIGH);
}

void drive(int motor,int state1,int state2) {
  driver.setup_motor(motor,state1,state2);
  driver.drive_motor(motor,speed);

}

الادواة الالكترونية المستعملة :

https://www.banggood.com/ATmega328P-Nano-V3-Controller-Board-Compatible-Arduino-p-940937.html?rmmds=search

https://www.banggood.com/Wholesale-Dual-H-Bridge-DC-Stepper-Motor-Drive-Controller-Board-Module-Arduino-L298N-p-42826.html?rmmds=search

https://www.banggood.com/5-Pcs-5V-Electromagnetic-Active-Buzzer-Continuous-Beep-Continuously-p-1035626.html?rmmds=search

https://www.banggood.com/NRF24L01-SI24R1-2_4G-Wireless-Power-Enhanced-Communication-Receiver-Module-p-1056647.html?rmmds=search

https://www.banggood.com/PS2-Game-Joystick-Module-For-Arduino-p-76465.html?rmmds=search

https://www.banggood.com/Mini-Solderless-Prototype-Breadboard-170-Points-For-Arduino-Shield-p-74814.html?rmmds=search

الفيديو :




تعليقات فيسبوك
0 تعليقات بلوجر

ليست هناك تعليقات:

إرسال تعليق

إتصل بنا

الإسم الكريم البريد الإلكتروني مهم الرسالة مهم
كافة الحقوق محفوظةلـ افعلـ بنفسك ــها - DIY For Arabs 2016