This is an old revision of the document!


Dozator bauturi

Introducere

Deoarece mi-am dorit să folosesc în viața de zi cu zi proiectul pe care îl fac, m-am decis să construiesc un dozator de băuturi.
Dozatorul va umple paharul automat atunci când se detectează că acesta e in poziția corectă și se va opri atunci când paharul este plin.
Cred că este util pentru toată lumea deoarece este mai confortabil să îți umple paharul cu precizie un dozator decât să îți torni singur băutura în pahar. De asemenea, ar trebui să prevină și accidentele de neîndemânare (de exemplu, răsturnatul paharului atunci cand vrem să îl umplem).

Descriere generală

Atunci când se apasă pe buton, senzorul ultrasonic va trimite către Arduino distanța la care se află paharul, și se va verifica dacă acesta este pus în pozitie (adica dacă se află într-o distanță limită față de senzor). Dacă se află în poziție ok, se va afișa pe ecran un mesaj cum că dozatorul începe să toarne băutura și plăcuța Arduino va porni pompa de apă pentru un timp definit ( volumul paharului / debitul pompei) folosind un timer. După ce paharul a fost umplut, pe ecran se va afișa un mesaj sugestiv.

Hardware Design

Lista de piese

Componentă Cantitate Descriere
Plăcuță Arduino Uno R3 1 Placuta care controleaza celelalte piese
Ecran LCD 1602 I2C 1 Afișează mesaje sugestive legate de procesul de umplere al paharului
Buton 1 Declanșează începerea umplerii paharului
Rezistor 1.8KΩ 1 Sa functioneze corect butonul
Pompă de apă 3-6V 1 Responsabila pt a transfera apă din sticlă în pahar
Breadboard 400 puncte 1 Rol de conectare a pieselor
Fire jumper x Rol de conectare a pieselor
Modul releu 1 canal 1 Ajută la conectarea pompei de apă la Arduino și la baterie
Senzor ultrasonic HC-SR04 1 Detectează dacă există un pahar în care să se toarne apă
Dioda 1N4001 2 Asigura trecerea curentului intr-o singura directie si previne zgomotul produs de pompa
Socket baterii 4xAA 1 Alimenteaza pompa de apa
Socket baterie 9v 1 Alimenteaza placa Arduino

Schemă Electrică

Montaj (nearanjat in carcasa)

robert_petre_montaj.jpeg

Alegerea pinilor

  • Pentru alimentare am conectat pinii de 5V si GND la breadboard pentru a putea conecta toate componentele de care am nevoie.
  • Pentru toate piesele am conectat alimentarea pe breadboard VCC la + si GND la -.
  • LCD I2C: am conectat cei 2 pini SDA si SCL la pinii analog A4 si A5 pe Arduino conform datasheet-ului.
  • Senzor Ultrasonic: am conectat Trig si Echo la pinii digitali D13 si D12 pe Arduino conform datasheet-ului.
  • Butonul trebuie conectat la un pin digital asa ca am ales sa il conectez la D2.
  • Releul trebuie conectat la un pin digital asa ca am ales sa il conectez la D7. La pinul NO (Normally Open) am conectat +ul bateriei, la pinul COM (Common) am conectat +ul pompei de apa apoi am conectat -ul pompei cu -ul bateriei

Aici puneţi tot ce ţine de hardware design:

Software Design

  • Mediu de dezvoltare ARDUINO IDE
  • Librării şi surse 3rd-party: Wire.h și LiquidCrystal_I2C.h pentru comunicație I2C și afișarea pe ecran LCD.

COD SURSA

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

initializeaza ecranul lcd LiquidCrystal_I2C lcd(0x27, 16, 2); decrarare pini componente const int trigPin = 13; const int echoPin = 12; const int relayPin = 7; const int buttonPin = 2;

declarare variabile ajutatoare long duration; int distance; int buttonState = 0; void setup() { initializare lcd

lcd.init();
lcd.backlight();
Serial.begin(9600);
// initializare senzor ultrasonic
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// initializare releu
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH);
// initializare buton
pinMode(buttonPin, INPUT);

}

void loop() {

// citeste state-ul butonului
buttonState = digitalRead(buttonPin);
// daca se apasa pe buton
if (buttonState == HIGH) { 
  // se calculeaza distanta la care se afla paharul
  // cu ajutorul senzorului ultrasonic
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  // afiseaza distanta pe lcd
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Distance: ");
  lcd.print(distance);
  lcd.print(" cm");
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  // verifica daca paharul se afla in distanta dorita
  if (distance <= 5) {
    // activeaza releul (adica porneste pompa)
    digitalWrite(relayPin, LOW);
    // afiseaza un mesaj sugestiv pe ecran
    lcd.setCursor(0, 1);
    lcd.print("se umple");
    // timer pana se umple un pahar
    delay(3000);
    // dupa trecerea timpului se dezactiveaza releul
    digitalWrite(relayPin, HIGH);
  } else {
    // daca nu se afla pahar in distanta dorita
    // se afiseaza un mesaj
    lcd.setCursor(0, 1);
    lcd.print("nu umple");
    delay(1000);
  }
    delay(500);
} else {
  // daca nu se apasa pe buton se afiseaza pe ecran
  // un mesaj de idle
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Idle");
  delay(500);
}

}

Rezultate Obţinute

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

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

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

Export to PDF

pm/prj2024/vstoica/robert.petre0406.1716561568.txt.gz · Last modified: 2024/05/24 17:39 by robert.petre0406
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