Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł!

RC FPV tank


RC FPV tank czyli zdalnie sterowany czołg z podglądem na żywo i ruchomą kamerą.
Dodatkowo płytka drukowana czyli PCB.

potrzebne części

Potrzebne materiały:

-arduino x2
-pan/tilt (lub 2 serwa)
-podwozie
-NRF24L01 x2
-telefon z androidem i aplikacją IP webcam lub kamera IP
-sterownik silników
-laminat, kwas, dostęp do drukarki laserowej
-joystick x2
-kabelki
-baterie 1,5V x5 + bateria 9V lub LI-PO 7.4V
-lutownica, wiertarka (lub wkrętarka), brzeszczot, kilka śrubek i nakrętek

potrzebne części
potrzebne części

Krok 1:

Więc zaczniemy od płytki dodaję kilka zdjęć które wykonałem podczas jej robienia oraz PDF do wydrukowania.
Dokładny opis jak wykonać taką płytkę można znaleźć tutaj.
Trzeba również połączyć za pomocą kabelków niektóre piny (jest to pokazane na obrazkach)
layout płytki do pobrania PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

Krok 2:

Kiedy skończymy naszą płytkę możesz przystąpić do podłączenia do nie silników, serw, modułu radiowego,
sterownika silników i zasilania. To właściwie tyle roboty przy "czołgu" jedyne co pozostało zrobić,
to przypiąć kamerę lub telefon z androidem i aplikacją IP webcam. Ja użyłem telefonu który przyczepiłem
do wcześniej przygotowanej kartonowej płytki (przykręciłem ją za pomocą śrubek do pan/tilta) za pomocą gumek
PCB

Krok 3:


Teraz przyszedł czas na pilot więc na początek wszystko łączymy jak poniżej.
pilot połączenie

Następnie przydałoby się to jakoś ładnie zapakować (chociaż może zostać na płytce stykowej)
użyłem do tego pudełka na mydło które kupiłem za 2zł w chińskim sklepie.
Joysticky przykręciłem a całe kable razem z arduino pro mini wepchałem do środka.
Od dołu zrobiłem dwie dziury na kable zasilające można tam podłączyć zasilanie od 5V
do 12V.
PCB
PCB
PCB
PCB

Krok 4:


Powoli zbliżamy się do końca jedyne co zostało to wgrać kod do czołgu i pilota.
a więc tutaj jest kod do czołgu.
/*
##################################################

Copyright by Nikodem Bartnik September 2014

##################################################
*/

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

#define CE_PIN   9
#define CSN_PIN 10

const uint64_t pipe = 0xE8E8F0F0E1LL;

RF24 radio(CE_PIN, CSN_PIN); 

int data[4];  

 //definicja serwa
Servo myservoX, myservoY;  
//definicja pinĂłw dla steronika silnikĂłw
int pwmMotorA=6;
int pwmMotorB=3;
int ForwardA=8;
int BackA=7;
int ForwardB=5;
int BackB=4;
int x, y, servoX, servoY;




void setup() {    
  
 Serial.begin(9600);
  
  myservoX.attach(11);
  myservoY.attach(13);
  

  
  //WyjĹ›cie PWM kanaĹ‚u A
  pinMode(pwmMotorA, OUTPUT); 
  
  //WyjĹ›cie cyfrowe AIN1
  pinMode(ForwardA, OUTPUT); 
  //WyjĹ›cie cyfrowe AIN2
  pinMode(BackA, OUTPUT);   
  
  //WyjĹ›cie PWM kanaĹ‚u B
  pinMode(pwmMotorA, OUTPUT);
  
  //WyjĹ›cie cyfrowe BIN1
  pinMode(ForwardB, OUTPUT); 
  //WyjĹ›cie cyfrowe BIN2
  pinMode(BackB, OUTPUT); 
  
  
  //ustawienie prÄ™dkoĹ›ci obrotowej silnikĂłw
  analogWrite(pwmMotorA, 255);
  analogWrite(pwmMotorB, 255);
  
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();;

}
//skrÄ™t w lewo
void Left(){
  digitalWrite(ForwardA, LOW); 
  digitalWrite(BackA, HIGH);
  
  //Ustawienie kierunku obrotĂłw B
  digitalWrite(ForwardB, HIGH); 
  digitalWrite(BackB, LOW);
 
}

//skrÄ™t w prawo
void Right(){
  
  digitalWrite(ForwardA, HIGH); 
  digitalWrite(BackA, LOW);
  
  
  digitalWrite(ForwardB, LOW); 
  digitalWrite(BackB, HIGH);
 
}

//jazda prosto
void Forward(){
  
  digitalWrite(ForwardA, HIGH); 
  digitalWrite(BackA, LOW);
  
  //Ustawienie kierunku obrotĂłw B
  digitalWrite(ForwardB, HIGH); 
  digitalWrite(BackB, LOW);
}

//cofanie
void Back(){
  digitalWrite(ForwardA, LOW); 
  digitalWrite(BackA, HIGH);
  
  //Ustawienie kierunku obrotĂłw B
  digitalWrite(ForwardB, LOW); 
  digitalWrite(BackB, HIGH);
  
}


//zatrzymanie
void Stop(){
  
  digitalWrite(ForwardA, LOW); 
  digitalWrite(BackA, LOW);
  
  //Ustawienie kierunku obrotĂłw B
  digitalWrite(ForwardB, LOW); 
  digitalWrite(BackB, LOW);
}





void loop() {
  
  if (radio.available()) {
    
    bool done = false;
    while (!done){
     
      done = radio.read( data, sizeof(data) );
//     
      x = data[0];
      y = data[1];
      servoX = data[2];
      servoY = data[3];

      myservoX.write(servoX);
      myservoY.write(servoY);
   
       
       if(x >1000){
       Forward();
       }
       
       if(x<200){
       Back(); 
       }
      
        if(y>1000){
       Right();
        }
        
        if(y<200){
          Left();
        }
        
    if(x>400 && x<600 && y>400 && y<600){
      Stop();
    }    
  }   
 }
}

Krok 5:


Kod dla pilota
/*
##################################################

Copyright by Nikodem Bartnik September 2014

##################################################
*/


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

#define CE_PIN   9
#define CSN_PIN 10
#define JOYSTICK_X A0
#define JOYSTICK_Y A1


const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


RF24 radio(CE_PIN, CSN_PIN); 

int data[4]; 
int servoX, servoY;


void setup(){
  

  radio.begin();
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  radio.openWritingPipe(pipe);

  
  
  
}

void loop(){
 
  servoX = analogRead(A2);
  servoX = map(servoX, 0, 1023, 180, 0);
  servoY = analogRead(A3);
  servoY = map(servoY, 0, 1023, 180, 0);
 
  
  data[0] = analogRead(JOYSTICK_X);
  data[1] = analogRead(JOYSTICK_Y);
  data[2] = servoX;
  data[3] = servoY;
  
  
  radio.write( data, sizeof(data) );
 
 delay(30); 
}

Krok 5:


Gratuluję ukończyłeś budowę możesz teraz uruchomić swoje dzieło a na filmiku poniżej możesz zobaczyć jak działa
mój czołg.
Jeśli masz jakieś pytania napisz na nikodem.bartnik@gmail.com