Робот на ардуино 2 \ 4 wd kit с управлением джойстиком (gamepad ps 2 )

Данный материал это базовые понятия по сборке робота машинки на Ардуино с беспроводным управлением через контроллер . 


Так же в данном примере будет использована готовое шасси заказанное с алиэкспресс под названием 4wd kit arduino Uno .

Но можно использовать любое шасси, даже самодельное , добавить мощные драйвера и моторы , добавить манипулятор и собрать робота помощника , но про это уже потом ))) 


Компоненты для сборки нашего проекта : 


 4WD Robotic Car Kit  можно заказать на алиэкспресс   http://ali.pub/4ahdz6  (тут на выбор , шасси или полный набор шасси + электроника)

Либо брать электронику отдельно :

Arduino UNO http://ali.pub/4ahemp

L298N Драйвер мотора http://ali.pub/4aherr


PS2 Беспроводной пульт и приемник  (лучше брать комплектом)  http://ali.pub/4aheyk

18650 аккумуляторы 3,7 В  2штк (или 3) http://ali.pub/4ahf1o

Держатели для аккумуляторов (можно на 2 или 3 акб ) http://ali.pub/4ahf8a

Так же нам нужна зарядка для акб , и плата балансировки :

Зарядка - рекомендую взять уже проверенные платы 18650 http://ali.pub/4ahfhf


Платы БМС 

BMS для 2S http://ali.pub/4ahfnu

BMS для 3S http://ali.pub/4ahfs4


Для подключения приемника  PS2 используем 6 пинов  (DATA, COMMAND, +3.3V, GND, ATTENTION, CLOCK)

Так же подробнее про контроллер я описывал в статье тут Проверка контроллера на ардуино с дисплеем


Arduino Pin----------------------PS2 Receiver Pin


DATA----------------------------------Pin 12


COMMAND--------------------------Pin 11


+3.3V----------------------------------3.3V pin of Arduino


GND-----------------------------------GND


ATTENTION-------------------------Pin 10


CLOCK--------------------------------Pin 9


Схема подключения :



Часть программирования

Файлы проекта на гугл диске https://drive.google.com/open?id=1zWM75Gj2H_IF7XlHt1GgY85tJGWfTszS

Скетч  


#include <PS2X_lib.h>       //for v1.6 PS2 Library


/******************************************************************

   set pins connected to PS2 controller:

     - 1e column: original

     - 2e colmun: Stef?

   replace pin numbers by the ones you use

 ******************************************************************/

#define PS2_DAT        12      

#define PS2_CMD        11  

#define PS2_SEL        10  

#define PS2_CLK        9  


#define leftm1     3

#define leftm2     4

#define rightm1    5

#define rightm2    6

#define left_EN    2

#define right_EN   7


  //analog values read from PS2 joysticks

int LX = 0;                   

int LY = 0;

int RX = 0;

int RY = 0;

/******************************************************************

   select modes of PS2 controller:

     - pressures = analog reading of push-butttons

     - rumble    = motor rumbling

   uncomment 1 of the lines for each mode selection

 ******************************************************************/

#define pressures   true

//#define pressures   false

#define rumble      true

//#define rumble      false


PS2X ps2x; // create PS2 Controller Class


int error = 0;

byte type = 0;

byte vibrate = 0;



void setup() {


  Serial.begin(9600);


  pinMode(leftm1,  OUTPUT);

  pinMode(leftm2,  OUTPUT);

  pinMode(rightm1, OUTPUT);

  pinMode(rightm2, OUTPUT);

  pinMode(left_EN, OUTPUT);

  pinMode(right_EN, OUTPUT);


  digitalWrite(left_EN, LOW);

  digitalWrite(right_EN, LOW);


  delay(300);  //added delay to give wireless ps2 module some time to startup, before configuring it



  //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

  error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);


  if (error == 0) {

    Serial.print("Found Controller, configured successful ");

  }

  else if (error == 1)

    Serial.print("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");


  else if (error == 2)

    Serial.print("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");


  else if (error == 3)

    Serial.print("Controller refusing to enter Pressures mode, may not support it. ");


    Serial.print(ps2x.Analog(1), HEX);


  type = ps2x.readType();

  switch (type) {

    case 0:

      Serial.print("Unknown Controller type found ");

      break;

    case 1:

      Serial.print("DualShock Controller found ");

      break;

    case 2:

      Serial.print("GuitarHero Controller found ");

      break;

    case 3:

      Serial.print("Wireless Sony DualShock Controller found ");

      break;

  }

}


void loop() {

  ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed

  

delay(50);

  if (ps2x.Button(PSB_L1))

  {

    LY = ps2x.Analog(PSS_LY);                     //receive values from p22 joystick

    LX = ps2x.Analog(PSS_LX);

  }

  if (ps2x.Button(PSB_R1))

  {

    RY = ps2x.Analog(PSS_RY);

    RX = ps2x.Analog(PSS_RX);

  }


  if (LY > 200 || RY > 200)                       //check if the joystick pushed up side

  {

    REV();

  }

  if (LY < 100 || RY < 100)

  {

    forward();

  }

  if (LX < 100 || RX < 100)

  {

    left();

  }

  if (LX > 200 || RX > 200)

  {

    right();

  }

  if(LX == 128 && LY == 128 && RX == 128 && RY == 128)

  {

    waithere();

  }


LY = LX = 128;         //return to default vlaues

RY = RX = 128;         //return to default values

}


void forward()

{

  //Serial.print("forward");

  digitalWrite(left_EN, HIGH);

  digitalWrite(right_EN, HIGH);


  digitalWrite(leftm1, HIGH);

  digitalWrite(leftm2, LOW);

  digitalWrite(rightm1, HIGH);

  digitalWrite(rightm2, LOW);


}

void REV()

{

  //Serial.print("rev");

  digitalWrite(left_EN, HIGH);

  digitalWrite(right_EN, HIGH);


  digitalWrite(leftm1, LOW);

  digitalWrite(leftm2, HIGH);

  digitalWrite(rightm1, LOW);

  digitalWrite(rightm2, HIGH);

}

void left()

{

  //Serial.print("left");

  digitalWrite(left_EN, LOW);

  digitalWrite(right_EN, HIGH);


  digitalWrite(leftm1, LOW);

  digitalWrite(leftm2, LOW);

  digitalWrite(rightm1, HIGH);

  digitalWrite(rightm2, LOW);


}

void right()

{

  //Serial.print("right");

  digitalWrite(left_EN, HIGH);

  digitalWrite(right_EN, LOW);


  digitalWrite(rightm1, LOW);

  digitalWrite(rightm2, LOW);

  digitalWrite(leftm1, HIGH);

  digitalWrite(leftm2, LOW);

}

void waithere()

{

  //Serial.print("stop");

  digitalWrite(left_EN, LOW);

  digitalWrite(right_EN, LOW);

  digitalWrite(rightm1, LOW);

  digitalWrite(rightm2, LOW);

  digitalWrite(leftm1, LOW);

  digitalWrite(leftm2, LOW);

}


//**************END**************************


Так же не забываем добавить библиотеки  v1.6 PS2 Library 

Скачать можно с гитхаба https://github.com/madsci1016/Arduino-PS2X


Настройка и отладка :

Вы можете использовать оба стика на геймпаде PS2 для управления машинкой, для активации режима зажимаем шифт L1, чтобы использовать левый стик, и R1, чтобы использовать правый стик.


Убедитесь, что два правосторонних двигателя работают в одном направлении, и левые боковые двигатели также работают в том же направлении. Измените полярность любого двигателя со стороны, если оба двигателя не вращаются в одном направлении.

Если вы толкнули джойстик вперед, а автомобиль движется задним ходом, измените полярность двигателей или просто измените контакты Arduino.


Ну и еще немного фото моей сборки :



Geek каналы

➤ VK - https://vk.com/denis_geek
➤ VK - https://vk.com/club_arduino
➤ VK - https://vk.com/chinagreat
➤ VK - https://vk.com/solar_pover
➤ VK - https://vk.com/my_vedroid
➤ VK - https://vk.com/3dprintsumy 
➤ Youtube  - http://www.youtube.com/c/Denisgeek 

  • Робот на ардуино 2 \  4 wd kit с управлением джойстиком (gamepad ps 2 )

Похожие статьи

 Подключение OLED I2C дисплея с размером экрана 0,96″ и разрешением 128*64 точек к плате Arduino UNO.

Подключение OLED I2C дисплея с размером экрана 0,96″ и разрешением 128*64 точек к плате Arduino UNO.

Сегодня мы рассмотрим подключение OLED I2C дисплея с размером экрана 0,96″ и разрешением 128*64 точек к плате Arduino UNO.

Машинка робот 2WD 4WD платформа на базе esp8266 wi-fi  и приложение андроид BLYNK  (сборка робота)

Машинка робот 2WD 4WD платформа на базе esp8266 wi-fi и приложение андроид BLYNK (сборка робота)

Данная статья будет полноценной инструкцией для сборки машинки робота на базе кит комплекта  2wd  robot на основе вай-фай платы esp8266 и мотор шилда под неё .

Так же в конце будет прошивка под эту плату и настройка приложения для управления нашим роботом через смартфон по средствам вай-фай сети .

Теги: робот на ардуино, сборка робота, робот, машинка, радиоуправляемая машинка ардуино, arduino robot, robot, 2wd, 4wd, 4wd kit, rc robot, ps2controller, ps2 robot controll, denisgeek, club_arduino, dualshock robot, instruction