This shows you the differences between two versions of the page.
pm:prj2024:sseverin:rares.dumitrescu [2024/05/26 19:21] rares.dumitrescu [Software Design] |
pm:prj2024:sseverin:rares.dumitrescu [2024/05/27 15:28] (current) rares.dumitrescu [Software Design] |
||
---|---|---|---|
Line 9: | Line 9: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Folosind un Arduino împreună cu un potentiometru, voi putea seta cantitățile dorite pentru fiecare ingredient. La fiecare ingredient setat împreună cu măsurătorile dorite, valorile fiind afișate pe ecranul LED, plăcuta va trimite o comanda către unul dintre modulele cu driver pentru a activa pompa dorită, sursa de alimentare contribuind cu necesarul de curent. Din timp in timp, Arduino se va folosi de valoarea data de către modulul de citire al greutății, aceasta fiind măsurată de senzorul de greutate, când aceasta depășește un anumit prag, pompa se oprește si Arduino așteaptă comanda pentru următorul ingredient(cantitatea acestuia). Pompele peristaltice se folosesc de crearea presiunii pentru a face posibilă turnarea lichidelor(prin tubul de silicon). Mufa jack va fi folosită pentru a trimite curent modulelor cu driver de motoare de la sursa de alimentare. | + | Folosind un Arduino împreună cu un senzor de atingere, voi putea seta cantitățile dorite pentru fiecare ingredient. La fiecare ingredient setat împreună cu măsurătorile dorite, valorile fiind afișate pe ecranul LED, plăcuta va trimite o comanda către unul dintre modulele cu driver pentru a activa pompa dorită, sursa de alimentare contribuind cu necesarul de curent. Din timp in timp, Arduino se va folosi de valoarea data de către modulul de citire al greutății, aceasta fiind măsurată de senzorul de greutate, când aceasta depășește un anumit prag, pompa se oprește si Arduino așteaptă comanda pentru următorul ingredient(cantitatea acestuia). Pompele peristaltice se folosesc de crearea presiunii pentru a face posibilă turnarea lichidelor(prin tubul de silicon). Mufa jack va fi folosită pentru a trimite curent modulelor cu driver de motoare de la sursa de alimentare. |
- | {{:pm:prj2024:sseverin:schemabloc_dumitrescumatei_cocktailmaker.jpeg?700|}} | + | {{:pm:prj2024:sseverin:schemablocdumitrescumatei.png?700|}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 21: | Line 21: | ||
* Arduino UNO R3 | * Arduino UNO R3 | ||
* Ecran LED IIC | * Ecran LED IIC | ||
- | * Potentiometru | + | * Senzor de atingere |
* Senzor Greutate | * Senzor Greutate | ||
* Modul citire greutate(hx711 ADC IC) | * Modul citire greutate(hx711 ADC IC) | ||
Line 27: | Line 27: | ||
* 3 X pompe dozatoare peristaltice | * 3 X pompe dozatoare peristaltice | ||
* Jack DC | * Jack DC | ||
- | * Sursa alimentare 15V 5A | + | * Sursa alimentare 6V 1200mA |
* Tub silicon 10mm | * Tub silicon 10mm | ||
Line 56: | Line 56: | ||
=== Definirea Pinilor === | === Definirea Pinilor === | ||
- | #define TOUCH_SENSOR_PIN 2 | + | #define TOUCH_SENSOR_PIN 2 |
- | #define HX711_DT 4 | + | #define HX711_DT 4 |
- | #define HX711_SCK 5 | + | #define HX711_SCK 5 |
- | #define PUMP1_IN1 7 | + | #define PUMP1_IN1 7 |
- | #define PUMP1_IN2 8 | + | #define PUMP1_IN2 8 |
- | #define PUMP2_IN3 9 | + | #define PUMP2_IN3 9 |
- | #define PUMP2_IN4 10 | + | #define PUMP2_IN4 10 |
- | #define PUMP3_IN1 11 | + | #define PUMP3_IN1 11 |
- | #define PUMP3_IN2 12 | + | #define PUMP3_IN2 12 |
* Definirea pinilor pentru senzorul tactil, senzorul de greutate și pompele controlate de L298N. | * Definirea pinilor pentru senzorul tactil, senzorul de greutate și pompele controlate de L298N. | ||
Line 79: | Line 79: | ||
=== Funcția setup() === | === Funcția setup() === | ||
- | void setup() { | + | void setup() { |
Serial.begin(9600); | Serial.begin(9600); | ||
- | |||
lcd.init(); | lcd.init(); | ||
lcd.backlight(); | lcd.backlight(); | ||
- | |||
lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
lcd.print("Put your glass"); | lcd.print("Put your glass"); | ||
lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
lcd.print("on the counter"); | lcd.print("on the counter"); | ||
- | |||
pinMode(TOUCH_SENSOR_PIN, INPUT); | pinMode(TOUCH_SENSOR_PIN, INPUT); | ||
- | |||
scale.begin(HX711_DT, HX711_SCK); | scale.begin(HX711_DT, HX711_SCK); | ||
scale.set_scale(calibration_factor); | scale.set_scale(calibration_factor); | ||
scale.tare(); | scale.tare(); | ||
- | |||
pinMode(PUMP1_IN1, OUTPUT); | pinMode(PUMP1_IN1, OUTPUT); | ||
pinMode(PUMP1_IN2, OUTPUT); | pinMode(PUMP1_IN2, OUTPUT); | ||
Line 102: | Line 97: | ||
pinMode(PUMP3_IN1, OUTPUT); | pinMode(PUMP3_IN1, OUTPUT); | ||
pinMode(PUMP3_IN2, OUTPUT); | pinMode(PUMP3_IN2, OUTPUT); | ||
- | } | + | } |
* Inițializarea comunicării seriale pentru debugging. | * Inițializarea comunicării seriale pentru debugging. | ||
Line 113: | Line 108: | ||
=== Funcția loop() === | === Funcția loop() === | ||
- | void loop() { | + | void loop() { |
if (scale.is_ready()) { | if (scale.is_ready()) { | ||
float weight = scale.get_units(5); | float weight = scale.get_units(5); | ||
Serial.print("Weight: "); | Serial.print("Weight: "); | ||
Serial.println(weight); | Serial.println(weight); | ||
- | |||
if (weight > 7) { // Pragul pentru detectarea unui pahar | if (weight > 7) { // Pragul pentru detectarea unui pahar | ||
lcd.clear(); | lcd.clear(); | ||
Line 125: | Line 119: | ||
lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
lcd.print("your cocktail"); | lcd.print("your cocktail"); | ||
- | |||
if (digitalRead(TOUCH_SENSOR_PIN) == HIGH) { | if (digitalRead(TOUCH_SENSOR_PIN) == HIGH) { | ||
prepareCubaLibre(); | prepareCubaLibre(); | ||
Line 138: | Line 131: | ||
Serial.println("HX711 not found."); | Serial.println("HX711 not found."); | ||
} | } | ||
- | |||
delay(500); | delay(500); | ||
- | } | + | } |
* Verifică dacă senzorul de greutate este pregătit. | * Verifică dacă senzorul de greutate este pregătit. | ||
Line 150: | Line 142: | ||
=== Funcția prepareCubaLibre() === | === Funcția prepareCubaLibre() === | ||
- | void prepareCubaLibre() { | + | void prepareCubaLibre() { |
lcd.clear(); | lcd.clear(); | ||
lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
lcd.print("Preparing your"); | lcd.print("Preparing your"); | ||
lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
- | lcd.print("Cuba Libre"); | + | lcd.print("Cocktail!"); |
- | + | Serial.println("Activating Pump 1"); | |
- | Serial.println("Activating Pump 1 (rum)"); | + | |
digitalWrite(PUMP1_IN1, HIGH); | digitalWrite(PUMP1_IN1, HIGH); | ||
digitalWrite(PUMP1_IN2, LOW); | digitalWrite(PUMP1_IN2, LOW); | ||
- | delay(3000); | + | delay(22000); |
digitalWrite(PUMP1_IN1, LOW); | digitalWrite(PUMP1_IN1, LOW); | ||
digitalWrite(PUMP1_IN2, LOW); | digitalWrite(PUMP1_IN2, LOW); | ||
- | + | Serial.println("Activating Pump 2"); | |
- | Serial.println("Activating Pump 2 (cola)"); | + | |
digitalWrite(PUMP2_IN3, HIGH); | digitalWrite(PUMP2_IN3, HIGH); | ||
digitalWrite(PUMP2_IN4, LOW); | digitalWrite(PUMP2_IN4, LOW); | ||
- | delay(5000); | + | delay(40000); |
digitalWrite(PUMP2_IN3, LOW); | digitalWrite(PUMP2_IN3, LOW); | ||
digitalWrite(PUMP2_IN4, LOW); | digitalWrite(PUMP2_IN4, LOW); | ||
- | + | Serial.println("Activating Pump 3"); | |
- | Serial.println("Activating Pump 3 (lime juice)"); | + | |
digitalWrite(PUMP3_IN1, HIGH); | digitalWrite(PUMP3_IN1, HIGH); | ||
digitalWrite(PUMP3_IN2, LOW); | digitalWrite(PUMP3_IN2, LOW); | ||
- | delay(1000); | + | delay(15000); |
digitalWrite(PUMP3_IN1, LOW); | digitalWrite(PUMP3_IN1, LOW); | ||
digitalWrite(PUMP3_IN2, LOW); | digitalWrite(PUMP3_IN2, LOW); | ||
- | |||
lcd.clear(); | lcd.clear(); | ||
lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
- | lcd.print("Enjoy your Cuba"); | + | lcd.print("Enjoy your"); |
lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
- | lcd.print("Libre!"); | + | lcd.print("Cocktail!"); |
delay(5000); | delay(5000); | ||
- | |||
lcd.clear(); | lcd.clear(); | ||
lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
Line 191: | Line 177: | ||
lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
lcd.print("on the counter"); | lcd.print("on the counter"); | ||
- | } | + | } |
* Șterge afișajul și afișează mesajul de pregătire a Cuba Libre; | * Șterge afișajul și afișează mesajul de pregătire a Cuba Libre; | ||
Line 203: | Line 189: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Video demonstrativ: https://www.youtube.com/shorts/6Av4EtJQRUY |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | |||
+ | După nopți nedormite și multă perseverență, proiectul este unul reușit. Laboratoarele folosite sunt cele de I2C (ecran LCD), ADC (senzor de greutate) și PWM (motoarele care alimentează pompele). Pentru a putea îmbunătăți proiectul pe viitor, se pot ajusta motoarele L298N pentru a varia viteza de umplere a paharului în funcție de lichidele folosite pentru Cocktail. De asemenea, se poate îmbunătăți carcasa dispozitivului pentru a-l face mai rezistent. | ||
===== Download ===== | ===== Download ===== |