Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:amocanu:smart-vacuum-cleaner [2021/04/25 21:05]
catalin.mihai2109
pm:prj2021:amocanu:smart-vacuum-cleaner [2021/06/01 14:24] (current)
catalin.mihai2109 [Bibliografie/Resurse]
Line 1: Line 1:
-==== Smart vacuum cleaner ​====+====== Smart Vacuum Cleaner ====== 
 +===== Introducere =====
  
-=== Autor === +Prezentarea pe scurt a proiectului:​ 
-MIHAI CATALIN VALENTIN 335CC+  * Scopul final al acestui device este de a fi un aspirator smart care aspira singur evitand obstacolele din jur. 
 +  * In momentul actual nu contine pompa de aspirat, ci doar '​carcasa'​ si sistemul de miscare/​evitare a obstacolelor. 
 +  * Ideea de la care am pornit acest proiect a fost de a crea propriul aspirator smart si de-al utiliza in casa.
  
-=== Introducere ​===+===== Descriere generală =====
  
-Prezentarea pe scurt proiectului+Cadrul circular al aspiratorului este facut dintr-o bucata de polistiren extrudat de 3cm grosime. 
-    ce face? +Pe acest cadru vin prinse in holsuruburi componentele. 
-    ​aspira singur ​evitand obstacolele din jur + 
-    care este scopul lui? +Pentru ​porni aspiratorul,​ exista doua surse de alimentare9V respectiv 6V. Aceste surse pot fi pornite/​oprite prin doua switch-uri. 
-    sa faca curatenie fara a avea nevoie ​de suport/ajutor uman +Odata pornita alimentarea,​ aspiratorul sta 5 secunde in idle asteptand ulterior un '​impuls'​ intr-unul din senzori pentru a porni rutina de functionare. Acesta va merge non-stop ​evitand obstacolele din jur. 
-    care a fost ideea de la care aţpornit? + 
-    ​- dorinta de a crea propriul aspirator smart (cele existente sunt foarte scumpe ​:D+Din pacate aveam nevoie de 4 senzori in loc de 3, deoarece exista un unghi mort in care aspiratorul se blocheaza.  ​ 
-    de ce credeţi că este util pentru ​alţii şi pentru voi? + 
-    - mentine curatenie ​in casa+Schema bloc: {{ :​pm:​prj2021:​amocanu:​vacuum-cleaner-block-scheeme.png |}} 
 + 
 +===== Hardware Design ===== 
 + 
 +Lista de piese 
 +  * 1  x Arduino UNO R3 
 +  * 1  x L293D Motor Driver 
 +  * 1  x Breadboard 400 
 +  * 1  x Suport carcasa baterii 6xAA 
 +  * 1  x Suport carcasa baterii 4xAA 
 +  * 10 x Baterii AA Varta 
 +  * 1  x Ball Caster 
 +  * 3  x Senzor ultrasonic HC-SR04 
 +  * 3  x Suport pentru senzor ultrasonic HC-SR04 
 +  * 2  x Switch cu 2 pozitii 
 +  * 2  x Micro motor cu reducție - RPM : 60 
 +  * 2  x Roata din plastic/cauciuc - Culoare : Alb 
 +  * 2  x Suport micro-motor 
 + 
 +<note tip>​Schema hardware:</​note>​  
 +{{ :​pm:​prj2021:​amocanu:​smart-vacuum-cleaner_bb.png |}} 
 + 
 +<note tip>​Rezultat final:</​note>​ 
 +{{ :​pm:​prj2021:​amocanu:​smart-vacuum-cleaner-top-down.jpeg?​500 |}} 
 + 
 +===== Software Design ===== 
 + 
 +Mediu de dezvoltare 
 +  * Arduino IDE 2.0.0 - beta3 (are auto code completion) 
 + 
 +---- 
 + 
 +Librarii 3rd-party 
 +  * Adafruit-Motor-Shield-library ([[https://​github.com/​adafruit/​Adafruit-Motor-Shield-library]]) 
 + 
 +---- 
 + 
 +Surse 
 +  * **smart_vacuum_cleaner.ino** 
 +<​note><​code C++> 
 +#include <​AFMotor.h>​ 
 + 
 +static constexpr int startupSleepTime = 5000; 
 +static constexpr int loopSleepTime = 10; 
 + 
 +// MOTOR DECLARATIONS 
 +static AF_DCMotor motors[2] = { 
 +  AF_DCMotor(2,​ MOTOR12_1KHZ),​  
 +  AF_DCMotor(3,​ MOTOR12_1KHZ) 
 +}; 
 +static constexpr int motorSpeed = 200; 
 +static constexpr int LRTurnDelay = 1200; 
 + 
 +// SENSOR DECLARATIONS 
 +static constexpr int triggers[3] = {A0, A1, A2}, echoes[3] = {A3, A4, A5}; 
 +static constexpr float speedOfSound = 0.0343; 
 +static float distances[3] = {0}; 
 +static float minDistance = 5.0; 
 + 
 +enum SensorPosition { 
 +  FRONT_LEFT = 0, 
 +  FRONT_RIGHT = 2, 
 +  BACK = 1 
 +}; 
 + 
 +// MOTOR FUNCTIONS 
 +void initMotors() { 
 +  motors[0].setSpeed(motorSpeed);​ 
 +  motors[1].setSpeed(motorSpeed);​ 
 +
 + 
 +void goForward() { 
 +  motors[0].run(FORWARD);​ 
 +  motors[1].run(BACKWARD);​ 
 +
 + 
 +void goBackward() { 
 +  motors[0].run(BACKWARD);​ 
 +  motors[1].run(FORWARD);​ 
 +
 + 
 +void turnLeft() { 
 +  motors[0].run(BACKWARD);​ 
 +  motors[1].run(BACKWARD);​ 
 +  delay(LRTurnDelay);​ 
 +
 + 
 +void turnRight() { 
 +  motors[0].run(FORWARD);​ 
 +  motors[1].run(FORWARD);​ 
 +  delay(LRTurnDelay);​ 
 +
 + 
 +void brake() { 
 +  motors[0].run(RELEASE);​ 
 +  motors[1].run(RELEASE); ​  
 +
 + 
 +// SENSOR FUNCTIONS 
 +void initSensors() { 
 +  for (int = 0; i < 3; i++) { 
 +    ​pinMode(triggers[i],​ OUTPUT); 
 +    pinMode(echoes[i],​ INPUT); 
 +  } 
 +
 + 
 +void sendSensorsImpulse() { 
 +  for (int i = 0; i < 3; i++) { 
 +    // Trigger sensor ​   
 +    digitalWrite(triggers[i],​ LOW); 
 +    delayMicroseconds(2);​ 
 +    digitalWrite(triggers[i],​ HIGH); 
 +    delayMicroseconds(10);​ 
 +    digitalWrite(triggers[i],​ LOW); 
 + 
 +    // Compute distance 
 +    float durations = pulseIn(echoes[i],​ HIGH); 
 +    distances[i] = (durations / 2) * speedOfSound;​ 
 +  } 
 +
 + 
 +bool isCollision(SensorPosition pos) { 
 +  return distances[pos] <= minDistance;​ 
 +
 + 
 +void setup() { 
 +  delay(startupSleepTime);​ 
 +   
 +  // Enable serial debugging 
 +  Serial.begin(9600);​ 
 + 
 +  initMotors();​ 
 +  initSensors();​ 
 +
 + 
 +void loop() { 
 +  sendSensorsImpulse();​ 
 + 
 +  // Check for collisions: 
 +  // Left and right side collision 
 +  if(isCollision(SensorPosition::​FRONT_LEFT) && isCollision(SensorPosition::​FRONT_RIGHT){ 
 +    ​goBackward();​ 
 +    delay(LRTurnDelay);​ 
 +  } 
 +  // Left side collision 
 +  else if(isCollision(SensorPosition::​FRONT_LEFT)) { 
 +    turnRight();​ 
 +    goForward();​ 
 +  } 
 +  // Right side collision 
 +  else if(isCollision(SensorPosition::​FRONT_RIGHT)) { 
 +    turnLeft();​ 
 +    goForward();​ 
 +  } 
 +   
 +  // Back side collision 
 +  if(isCollision(SensorPosition::​BACK)) { 
 +    goForward();​ 
 +  } 
 + 
 +  delay(loopSleepTime);​ 
 +
 +</​code></​note>​ 
 + 
 +---- 
 + 
 +Detalii despre implementare 
 +  * Se porneste una din cele doua surse de alimentare (utilizand switchu-rile de ON/OFF) 
 +  * Se asteapta 5 secunde, iar pentru ​a porni rutina aspiratorului se atinge unul din cei trei senzori 
 +  * Daca unul din senzori este la distanta de cel mult 5cm de un obstacol, se calculeaza noua directie astfel: 
 +    ​* Senzorul stanga-fata (FL) => Viraj dreapta 
 +    * Senzorul dreapta-fata (FR) => Viraj stanga 
 +    * Ambii senzori fata (FL && FR)=> Mers in spate 
 +    * Senzorul spate (B) => Mers in fata 
 +===== Rezultate Obţinute ===== 
 + 
 +<note tip> 
 +Ce nu am reusit sa obtin: 
 +  * Pompa de aspirat 
 +  * Virtual area map 
 +  * Modul bluetooth 
 + 
 +Ce am resit sa obtin: 
 +  * Partea mecanica (destul de complexa) 
 +  * Detectie obstacole si miscari simple 
 +</​note>​
  
-=== Descriere generală ===+**Videoclip demonstrativ:​** 
 +[[https://​www.youtube.com/​watch?​v=UpZ26sFF9II|{{ :​pm:​prj2021:​amocanu:​smart-vacuum-cleaner-thumb.jpeg?​500 |}}]]
  
-Aspiratorul va fi capabil sa functioneze autonom si sa evite obstacolele intalnite. 
  
-=== Schema bloc === +===== Concluzii =====
-TODO+
  
-=== Hardware Design ​===+Partea mecanica a fost mult mai complexa decat am crezut initial. 
 +Acest proiect m-a facut sa vreau pe viitor sa creez si alte proiecte utilizand Arduino 
 +===== Download =====
  
-Aici puneţi tot ce ţine de hardware design:+<​note>​ 
 +{{:pm:​prj2021:​amocanu:​smart-vacuum-cleaner.zip|}} 
 +</​note>​
  
-    WIP: listă de piese +===== Bibliografie/​Resurse =====
-    - Arduino uno  +
-    - 3 senzori ultrasonici +
-    - driver motor +
-    - roti +
-    - baterii +
-    - mini aspirator de birou +
-    - carton sau plastic +
-    - breadbord +
-    TODO: scheme electrice +
-    TODO: diagrame de semnal +
-    TODO: rezultatele simulării+
  
-=== Software Design ===+<​note>​ 
 +https://​learn.adafruit.com/​adafruit-motor-shield-v2-for-arduino/​using-dc-motors
  
-TODO: Descrierea codului aplicaţiei (firmware):+https://​create.arduino.cc/​projecthub/​abdularbi17/​ultrasonic-sensor-hc-sr04-with-arduino-tutorial-327ff6 
 +</​note>​
  
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
-=== Rezultate Obţinute === 
  
-TODO 
pm/prj2021/amocanu/smart-vacuum-cleaner.1619373907.txt.gz · Last modified: 2021/04/25 21:05 by catalin.mihai2109
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