Skip to content
/ bot Public

Проект радиоуправляемого робота на платформе Arduino Leonardo. Дополнительные особенности: резак и светодиодная лента.

Notifications You must be signed in to change notification settings

gitzense/bot

Repository files navigation

Робот на ардуино

Бот был протестирован на трассе. Время прохождения трассы - 1 минута 34 секунды. Пройдены 4/4 испытаний.

track

Робот на Arduino Leonardo с радиомодулем NRF24. Для лучшего сцепления с гладкой поверхностью на ходовые валки был нанесен термоклей вдоль оси движение в небольшом количестве.

bot_6

В роботе использовалось:

  • Motor Shield,
  • Arduino Leonardo/Amperka Iskra Neo,
  • NRF,
  • NRF+,
  • акумуляторы 18650 x2,
  • DC motor x2,
  • RGB LED лента (4 светодиода),
  • servo 180 x2.
work.demo.MOV

Для контроллера использовалась плата Arduino Pro Micro. Джойствик отвечал за движение по оси Y, потенциометр управлял сервоприводом для поворота, кнопка отвечала за движение сервопривода с режущей насадкой.

controller

В контроллере использовалось:

  • Arduino Pro Micro,
  • NRF,
  • NRF+,
  • повербанк,
  • потенциометр,
  • кнопка,
  • джойстик.
control.demo.MOV

Использованные библиотеки:

  • Servo by Michael Margolis (управление сервоприводами),
  • Adafruit NeoPixel by Adafruit (настройка светодиодной ленты),
  • RF24 by TMRh20 (управление радиомодулем).
  1. Код для контроллера:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define VX_PIN A0
#define VY_PIN A1
#define BTN_PIN 2


RF24 radio(9, 10);
int data[3];

void setup() {

  Serial.begin(9600);
  radio.begin();
  radio.setChannel(2);
  radio.setDataRate(RF24_1MBPS);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openWritingPipe(0x1234567890LL);
  radio.stopListening();
  
  pinMode(BTN_PIN, INPUT);
  
}

void loop() {

  data[0] = analogRead(VX_PIN);
  data[1] = analogRead(VY_PIN);
  data[2] = digitalRead(BTN_PIN);
 
  
  radio.write(&data, sizeof(data));
  delay(15);
  
}
  1. Код для робота:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#include <Adafruit_NeoPixel.h>

#include <Servo.h>
Servo myservo;
Servo myservo2;

#define SPEED_1 5 
#define DIR_1 4

#define SPEED_2 6
#define DIR_2 7

#define MATRIX_PIN    0
#define LED_COUNT 4

Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, MATRIX_PIN, NEO_GRB + NEO_KHZ800);

RF24 radio(9, 10);
int data[3];

int pos = 15;

void setup() {
  
  Serial.begin(9600);
  myservo.attach(3);
  myservo2.attach(12);
  matrix.begin();
  radio.begin();
  radio.setChannel(2);
  radio.setDataRate(RF24_1MBPS);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openReadingPipe(0, 0x1234567890LL);
  radio.startListening();

  for (int i = 4; i < 8; i++) {     
    pinMode(i, OUTPUT);
  }
  
}

void loop() { 
  
  if (radio.available()) {
    radio.read(&data, sizeof(data));

    for (int i = 0; i < matrix.numPixels(); i++) {
      matrix.setPixelColor(i, 255, 255, 255);
      matrix.show();  
    }

    int servoPosition = map(data[0], 0, 1023, 0, 180);
    myservo.write(servoPosition);

    if (data[2] == 1) {
      myservo2.write(45);
      pos = 15;
    }  
    else if (data[2] == 0) {
      myservo2.write(pos);
      pos += 1;
      if (pos == 75) {
        pos = 15;
      }
    }
    if (data[1] < 200) {
      digitalWrite(DIR_1, HIGH);
      digitalWrite(DIR_2, HIGH);
      analogWrite(SPEED_1, 220);
      // analogWrite(SPEED_2, 220);
     }
    else if (data[1] > 900) {
      digitalWrite(DIR_1, LOW);
      digitalWrite(DIR_2, LOW);
      analogWrite(SPEED_1, 255);
      analogWrite(SPEED_2, 255);
    }
    else {
      digitalWrite(DIR_1, HIGH);
      digitalWrite(DIR_2, LOW);
      analogWrite(SPEED_1, 0);
      analogWrite(SPEED_2, 0);      
    }
  }
  
}

About

Проект радиоуправляемого робота на платформе Arduino Leonardo. Дополнительные особенности: резак и светодиодная лента.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages