This is an old revision of the document!
DariusCell
Introducere
Am ales să realizăm acest proiect ca să trecem la PM cu notă bună :) (acuma sperăm și să ne iasă).
Descriere generală
Motivație
Structură proiect
în primă fază, vrem să facem un robot care poate fi controlat printr-un joystick.
în a doua fază, vrem ca robotul să fie capabil să evite obstacolele folosind un senzor.
în a treia fază, vrem să schimbăm modul de controlare al robotului, prin adăugarea unui modul Bluetooth și realizarea interacțiunii cu o aplicație (
Bluetooth Terminal).
Hardware Design
Componente
Asamblarea robotului
lipire fire de motoare folosind un pistol de lipit (orice Letcon e bun)
prima componententă fixată pe șasiu au fost motoarele, la care s-au atașat roțile.
urmează montarea roții pivotante a robotului.
conectarea a doi suporți, a câte 4 baterii de 1,5V fiecare, în serie(pentru a asigura tensiunea necesară de 12V, pentru driverul de motoare L298N, urmată de fixarea (cu șuruburi) pe șasiu.
montare driver de motoare deasupra celor doi suporți (care au capac, pentru a asigura izolarea electrică)
fixare Arduino pe șasiu și conectare pini între plăcuța și driverul de motoare.
montare suport plastic în fața robotului. (pentru design + modul Bluetooth în spate și senzor ultrasonic în fața, pentru a da impresia de robot
Wall-E
fixare modul + senzor + conectarea pinilor cu pini de Arduino.
Schema bloc
Schema electrică
Pentru schema electrică am folosit Eagle și am atașat schema la secțiunea de Resurse
Software Design
Dezvoltarea codului s-a realizat folosind Arduino IDE și am biblitoteca externă SoftwareSerial pentru a realiza conexiunea cu modulul Bluetooth.
Pași funcționare:
Utilizatorul deschide aplicația Bluetooth Terminal.
Având funcția de Bluetooth activată pe telefonul mobil, el se va conecta la dispozitivul HC-05.
El va putea da următoarele comenzi robotului:
w = mișcare înainte
a = rotire stânga, urmată de oprire (pentru a simula o rotire pe loc)
d = rotire dreapta, urmată de oprire (pentru a simula o rotire pe loc)
s = mișcare înapoi, urmată de oprire
q = oprirea robotului
De ce toate operațiile în afară de w necesită oprire? Pentru că partea frontală a robotului are montat un senzor ultrasonic, capabil să detecteze obstacolele din față. El se va opri automat când va ajunge la o distanță apropiată de acestea, fără a se ciocni de ele.
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE 200
#define MAX_SPEED 190 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(3, MOTOR12_1KHZ);
Servo myservo;
boolean goesForward=false;
int distance = 100;
int speedSet = 0;
void setup() {
myservo.attach(9);
myservo.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if(distanceR>=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}
int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}
int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}
void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
}
v
void turnRight() {
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void turnLeft() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
Rezultate Obținute
Concluzie
Acest proiect a fost primul realizat fizic și a combinat multe noțiuni de la materiile de hardware și software. A fost interesant că am putut alege piesele și am avut control deplin asupra proiectului. Partea de asamblare a robotului în sine a fost cea mai challenging, necesitând câteva zile de lipit, aranjat și legat piese. La final, putem zice că a fost o experiență inedită, în care am aplicat majoritatea noțiunilor învătate în cursurile și laboratoarele de PM.
Jurnal
02.06.2021 - terminăm de scris documentația pentru proiect. DariusCell is now complete. (+ temele la SO).
01.06.2021 - ziua Copilului.
26.05.2021 - “Baterii alimentate pe bază de consum puternic de alcool. A nu se lăsa la îndemâna copiiilor!”
26.05.2021 - Am conectat senzorul ultrasonic și am făcut testele și videoclipul de prezentare a lui DariusCell.
25.05.2021 - Legare VCC la ground și invers, circuitul ideal.
24.05.2021 - Am reușit să punem Bluetooth și am comandat un nou senzor ultrasonic, cel actual fiind defect.
23.05.2021 - Terminare Tema4SO + am reușit să învartim roțile din robotului din cod.
22.05.2021 - Radu: Cristi, iese fum … Cristi: Termină cu glumele proaste. (3 seconds later Cristi ia șurubelnița și zvârle bateriile din suport pe jos). Radu: Ia o bere!
21.05.2021 - mergem să lipim robotul fără să luăm piesele. Bonus, făceam alimentarea la 6V în loc de 12V, cât era necesar pt L298N. GG!
30.04.2021 - adăugare schemă electrică
25.04.2021 - DariusCell was born.
Resurse
Documentația proiectului în format
pdf
Un scurt videoclip cu controlarea robotului se poate găsi
aici
Documentație