This is an old revision of the document!


Ball Balancing Robot

Nume: Radu Eduard-Andrei Grupa: 333CC

Introducere

Un robot care foloseste 4 stepper-motors pentru a inclina un plan pe care se afla un touchpad rezistiv care poate detecta pozitia unul ball bearing. Va folosi 2 algoritmi de control de tip PID pentru a muta ball bearing-ul catre centrul sau (sau orice punct de pe suprafata lui.

M-am inspirat din videoclipuri vazute online, si l-am ales deoarece am vrut ca proiectul meu sa includa un algoritm de control. Nu are o utilitate practica, dar poate fi vazut ca o jucarie anti-stres.

Descriere generală

Robotul este format din piese printate 3D si consta intr-o platforma care isi poate schimba unghiul cu suprafata orizontala prin intermediul celor 4 motoare care controleaza cela 4 picioare.

Se incearca balansarea unei bile de metal pe platforma. Pentru determinarea pozitiei bilei se foloseste un touchpad rezistiv.

Se foloseste un algoritm de control de tip PID pentru determinarea unghiului optim pentru ca bila sa ajunga in centrul platformei si sa ramana acolo.

Hardware Design

Lista piese:
  • Arduino uno
  • 4x STEPERONLINE Stepper Motor Nema 17 Bipolar
  • 4x AzDelivery A4988 Stepper Motor Driver
  • 1x VSDISPLAY 8.4” Resistive Touch Sensor
  • 1x Sursa DC 24V 0-20A
  • 1x LM2596 DC-DC Buck Converter Step Down Modul
  • 1x CNC Arduino Shield

Software Design

Pentru implementare am folosit un arduino uno R3 cu procesor atmega328p. Am folosit biblioteca AccelStepper pentru controlul mai facil al motoarelor.

Structuri folosite:
  • pidX - pentru controlul unghiului dintre plan si axa OX
  • pidY - pentru controlul unghiului dintre plan si axa OY
  • touchpad - pentru furnizarea pozitiei bilei
  • stepperController - pentru setarea celor 4 steppere in pozitiile corecte rezultate din PID-uri
Algoritmi folositi:

PID

class PID {
public:
    PID(float kP, float kI, float kD, float target);
    void set_target(int target);
    void update(int current);
    float get_value();
private:
    float kP;
    float kI;
    float kD;
 
    float target;
 
    float proportional;
    float integral;
    float derivative;
};
 
PID::PID(float kP, float kI, float kD, float target) : kP(kP), kI(kI), kD(kD), target(target) {
    proportional = 0;
    integral = 0;
    derivative = 0;
}
 
void PID::set_target(int target) {
    this->target = target;
 
    this->proportional = 0;
    this->integral = 0;
    this->derivative = 0;
}
 
void PID::update(int current) {
    current -= 512;
    float normalized_current = current / 512.0;
    derivative = target - normalized_current - proportional;
    proportional = target - normalized_current;
    integral += proportional;
}
 
float PID::get_value() {
    return kP * proportional + kI * integral + kD * derivative;
}

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

Am adaugat codul pentru algoritmul de control si modelele 3mf ale pieselor necesare in acest repository de github:https://github.com/radueduard/BallBalancingRobot

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/tdicu/eduard_andrei.radu.1716814140.txt.gz · Last modified: 2024/05/27 15:49 by eduard_andrei.radu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0