Liquid blender - mcworkshop

Vai ai contenuti

Liquid blender

Projects
LIQUID BLENDER
VENDING MACHINE

Il progetto ha svariate applicazioni che partono dal serbatoio troppo pieno che vogliamo svuotare automaticamente, al distributore di liquidi, al miscelatore a più vie. Ovviamente, secondo l'applicazione, è necessario corregere il codice ed effettuare delle modifiche costruttive. Per isolare i circuiti di controllo e comando dagli attuatori, le pompe del miscelatore sono comandate da due rele. Le pompe funzionano per un tempo impostabile nello sketch. Lo sketch, nel blocco che riguarda i tempi di funzionamento delle pompe e il controllo serbatoi, non usa il classico delay bloccante ma la funzione unsigned long millis. La funzione delay è utilizzata nel ciclo del display solo per la visualizzazione della scritta livello basso. Per quanto riguarda i tempi da impostare è indispensabile fare quattro conti in ambito della chimica industriale e tenere conto della pressione di esecizio, della sezione dei tubi, della densità dei liquidi da miscelare. La precisione si ottiene inserendo due elettrovalvole che possano immediatamente bloccare il flusso del fluido, oppure si può utilizzare due flussostati con sensore Hall. In caso di liquidi pericolosi è obbligatorio adottare una pompa dosatrice peristaltica. La pompa peristaltica è un apparecchio che applica il principio della peristalsi, in base al quale la prevalenza al fluido trattato viene impressa da una strozzatura che scorre lungo il tubo e viene utilizzata in tutti quei processi dove esiste l'esigenza di non far venire in contatto il fluido trattato con i componenti della pompa.





Nell'immagine sottostante ho effettuato una prima modifica. Invece di sfruttare la caduta libera dell'acqua (serbatoi in alto) ho sfruttato la capacità di prevalenza delle pompe (serbatoi in basso).

click per ingrandire
/*
 Liquid blender
  www.mcworkshop.it - maggio 2021
  by: Marco Cerani
  V1.0
  TempoON1 elettrovalvola 1
  TempoON2 elettrovalvola 2
  Allarme serbatoio sensorValue1 e 2 < 200
*/
# define BUTTON1 4
# define RELE1 2
int buttonState1 = 0;
unsigned long iMillis1 = 0;
byte acceso1 = LOW;
int TempoON1 = 2000;
# define RELE2 3
int buttonState2 = 0;
unsigned long iMillis2 = 0;
byte acceso2 = LOW;
int TempoON2 = 4000;
#define pinSensor1 A0
#define pinSensor2 A1
int sensorValue1;
int sensorValue2;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
 Serial.begin(9600);
 pinMode(RELE1, OUTPUT);
 pinMode(RELE2, OUTPUT);
 pinMode(BUTTON1, INPUT);
 // pinMode(A0, INPUT);
 // pinMode(A1, INPUT);
 digitalWrite(RELE1, HIGH);
 digitalWrite(RELE2, HIGH);
 lcd.init();
 lcd.backlight();
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("  Distributore  ");
 lcd.setCursor(0, 1);
 lcd.print("     PRONTO     ");
}
void loop() {
 digitalRead (5);
 digitalRead (6);
 sensorValue1 = analogRead(pinSensor1);
 sensorValue2 = analogRead(pinSensor2);
 int buttonState1 = digitalRead(BUTTON1);
 delay(5);
 if ( buttonState1 == HIGH && acceso1 == LOW)
 {
   digitalWrite(RELE1, LOW);
   lcd.setCursor(0, 0);
   lcd.print("   FLUIDO 1 ON  ");
   acceso1 = HIGH;
   iMillis1 = millis();
 }
 if ( acceso1 == HIGH && (millis() - iMillis1) > TempoON1)
 {
   digitalWrite(RELE1, HIGH);
   lcd.setCursor(0, 0);
   lcd.print("  FLUIDO 1 OFF  ");
   acceso1 = LOW;
 }
 int buttonState2 = digitalRead(BUTTON1);
 delay(5);
 if ( buttonState2 == HIGH && acceso2 == LOW)
 {
   digitalWrite(RELE2, LOW);
   lcd.setCursor(0, 1);
   lcd.print("   FLUIDO 2 ON  ");
   acceso2 = HIGH;
   iMillis2 = millis();
 }
 if ( acceso2 == HIGH && (millis() - iMillis2) > TempoON2)
 {
   digitalWrite(RELE2, HIGH);
   lcd.setCursor(0, 1);
   lcd.print("  FLUIDO 2 OFF  ");
   acceso2 = LOW;
 }
 //**********************************
 if (sensorValue1 > 200)
 {
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("    SERBATOIO   ");
   lcd.setCursor(0, 1);
   lcd.print("    ! BASSO !     ");
   delay(500);
 }
 if (sensorValue2 > 200)
 {
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("    SERBATOIO   ");
   lcd.setCursor(0, 1);
   lcd.print("    ! BASSO !     ");
   delay(500);
 }
 Serial.print("Valore 1: ");
 Serial.println(sensorValue1);
 Serial.print("Valore 2: ");
 Serial.println(sensorValue2);
}
Sito non a scopo di lucro /sito didattico, hobbistico / no pubblicità / no aggiornamento periodico / schemi e codici di pubblico dominio
ultimo aggiornamento: 12/09/21
Privacy Policy
Cookie Policy
Clicca sulle scritte!
Torna ai contenuti