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

  • participarea la concursul Perpetuum, unde am realizat un automat de dat pagini
  • dorința de a realiza un robot, ce poate evita obstacolele și să să fie controlat de pe telefon. (acesta poate fi apoi îmbunătățit pentru a filma și a monitoriza locuința de la distanță).

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.

Cod Arduino

Cod Arduino

#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

pm/prj2021/abasoc/dariuscell.1622683663.txt.gz · Last modified: 2021/06/03 04:27 by radu.nichita
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