Sari la conținut
ELFORUM - Forumul electronistilor

Automatizare ministatie de epurare cu Arduino


Untold

Postări Recomandate

 

Va salut. Am o automatizare facuta pentru o statie de epurare cu 2 integrate CMOS care merge aiurea rau. Ce face aceasta automatizare: fiind ministatie de epurare, descompunerea deseurilor este facuta cu oxigen activ, avand o pompa de aer. Aceasta automatizare are 4 moduri de lucru: primul mod, pompa merge 15 min, apoi se opreste 15 min si tot asa. Pe modul 2 de lucru, pompa merge 15 minute si se opreste apoi 30 min. Modul 3, pompa merge 15 min, sta 60 min. Pe mod 4, pompa merge incontinuu. De obicei, o tin pe modul 2 de lucru, adica 15 min cu 30 min pauza, apoi ciclul se reia. Problema este ca dupa primul sau al doilea ciclu, pompa nu mai porneste pe modul 2 si 3. Adica, porneste, merge, ii trece timpul de 15 min, apoi se opreste si nu mai porneste. Daca ii scot si bag tensiunea la loc, porneste si apoi isi reia problema. Singurul mod pe care merge fara sa se opreasca, este modul 1, dar este prea mica pauza de 15 min. Automatizarea este facuta cu 2 cmos-uri banale, un cd4066 si un cd 4543. Are un comutator rotatativ cu 4 pozitii si cu led pentru fiecare pozitie, si cam asta e tot. Sursa de alimentare e un traf subdimensionat de 1 cmp, cred, care se cam incalzeste, filtraj avand doar 220uF/16V.
As vrea sa renunt la mizeria aia si sa fac lucrul asta cu un Arduino, un Nodemcu, pe care il am deja. Partea proasta este ca la partea hardware ma pricep cat de cat, am ceva notiuni de electronica, o fac fara probleme, inclusiv scrierea sketch-ului cu Arduino IDE, insa pe partea de programare sunt varza, egal cu 0. Ma poate ajuta cineva cu un sketch?
Deci, primul mod 15 min cu 15 min pauza, 2 - 15 min cu 30 min pauza, 3 - 15 min cu 60 min pauza si 4 - incontinuu. Selectarea modului 1, 2, 3 sau 4 sa se poata face cu un push button si leduri de semnalizare sau cu encoder, nu ma deraanjeaza.
Multumiri pentru orice ajutor!
Editat de Untold
Link spre comentariu
  • Răspunsuri 10
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Nu vrei te rog sa pui schema?

Chiar nu inteleg cum poate un 4066 multiplexor (Quad Bilateral Switch) si un CD4543 decodor BCD-to-7segmente sa realizeze functia ceruta de tine.

Esti sigur ca nu-i vorba de un CD4060? Cu 4060 am facut chestii similare ce functioneaza (unele dintre ele) corect de peste 15 ani.

Link spre comentariu

Ţi-am scris la repezeală un program, aşa mai băbeşte să se poată înţelege de către începători. Pinii corespund la modulele Arduino Uno, pt. NodeMCU prebuie verificat dacă ai destui pini la îndemână şi văzut care sunt pinii ce suportă întreruperi, la care se conectează cele 2 butoane.

Rularea e clară, la conectarea alimentării sare automat pe programul 2, 15/30 minute. Schimbarea programului se poate face doar dacă este în repaus, adică oprit, şi se semnalizează cu 4 leduri, pratic la fiecare apăsare de buton sare un pas apoi revine la capăt. Celălalt buton porneşte sau opreşte programul. Ledul pompei luminează fix când pompa merge şi clipeşte când e în pauză, ca să ai o viziune mai clară a activităţii.

Pt. teste poţi micşora valoarea variabilei interval la 45, astfel fiecare periadă de 15 minute se scurtează la 5 secunde.

Butoanele se conectează la pinii corespunzători spre masă, de preferat cu ceva condensatoare de 100nF paralel, că programul nu conţine rutine de debouncing.

const unsigned long interval = 90000; // INTERVALUL DE BAZA IN ZECIMI DE SECUNDA
unsigned long       contor_pauza, selector_pauza, contor_activ; 
byte                led_pompa = 8,
                    intrare_selector = 2, intrare_activare = 3,
                    iesire_pompa = 9, registru_leduri;
bool                pornit, activ;                   

// *********** CONEXIUNILE CU EXTERIORUL***************************
// LEDURILE SELECTIE MOD SE CONECTEAZA LA PINII 4-7
// LEDUL INDICARE PORNIRE LA 8
// RELEUL POMPEI LA 9
// BUTONUL SELECTIE MOD LA 2
// BUTONUL PORNIRE/OPRIRE PROGAM LA 3

void setup() {
  pinMode(2, INPUT_PULLUP); // INTRARE BUTON SELECTARE PROGRAM
  pinMode(3, INPUT_PULLUP); // INTRARE BUTON PORNIRE/OPRIRE SECVENTA PROGRAM
  for (int i = 4; i < 10; i++) pinMode(i, OUTPUT); // PINII DE IESIRE
  
  attachInterrupt(digitalPinToInterrupt(2), selectareMod, FALLING);
  attachInterrupt(digitalPinToInterrupt(3), comandaPornire, FALLING);
  pornit = false;
  activ = false;
  selector_pauza = 2; // MOD NORMAL DE FOLOSIRE
  registru_leduri = 0b00000100;
}
///////////////////////////////////////////////////////////////
void loop() {
  static bool clipire = millis() % 1000 > 500;
  unsigned long start_secventa = millis();
  if (pornit) {
    contor_activ++;
    if (contor_activ >= interval) {
      if (selector_pauza) {
        activ = false;
        contor_pauza++;
        if (contor_pauza >= selector_pauza * interval) {
          activ = true;
          contor_pauza = 0;
          contor_activ = 0;
        }
      }
      else contor_activ = 0;
    }
    
  }
  for (int i = 4; i < 8; i++) digitalWrite(i, bitRead(registru_leduri, i - 3));
  digitalWrite(iesire_pompa, activ);
  if (pornit) digitalWrite(led_pompa, activ | clipire);
    else  digitalWrite(led_pompa, LOW);
  unsigned int elapsed = millis();
  delay(100 - elapsed); 
}
/////////////////////////////////////////////////////////////////
void selectareMod() {
  if (!pornit) { // PROGRAMUL SE POATE SCHIMBA DOAR DACA NU RULEAZA
    switch (selector_pauza) {
      case 0: {
        selector_pauza = 1;
        registru_leduri = 0b00000010;
      }
      break;
      case 1: {
        selector_pauza = 2;
        registru_leduri = 0b00000100;
      }
      break;
      case 2: {
        selector_pauza = 4;
        registru_leduri = 0b00010000;
      }
      break;
      case 4: {
        selector_pauza = 0;
        registru_leduri = 0b00001000;
      }
      break;
    }
  }  
}
void comandaPornire() {
  pornit = !pornit;
  if (pornit) activ = true;
    else contor_activ = 0;
}

 

Editat de mihaicozac
erori
Link spre comentariu
La 27.10.2022 la 11:01, sesebe a spus:

Nu vrei te rog sa pui schema?

Chiar nu inteleg cum poate un 4066 multiplexor (Quad Bilateral Switch) si un CD4543 decodor BCD-to-7segmente sa realizeze functia ceruta de tine.

Esti sigur ca nu-i vorba de un CD4060? Cu 4060 am facut chestii similare ce functioneaza (unele dintre ele) corect de peste 15 ani.

Scuze, era CD4060, aveti dreptate.

Nu am schema, nu mi-au dat-o cand am cumparat ministatia.

Link spre comentariu
La 27.10.2022 la 17:46, mihaicozac a spus:

Deşi am verificat codul înainte de postare tot au mai rămas erori, penultima linie din loop() ar trebui să fie:

  

unsigned int elapsed = millis() - start_secventa;

Multumesc mult pentru ajutor, m-a ajutat cineva de pe FB si mi-a facut sketchul in Visuino.

 

Primul led aprins e mod 1, 15 min on, 15 min off, al doilea led e mod 2, 15 min on, 30 min off, al treilea led mod 3, 15 min on, 60 min off si al patrulea led, functionare continua. Am pus in loc de releu, un SSR pentru comanda pompei de aer, ssr-ul suporta si sarcini inductive si in comutatie. 

Multumesc inca o data tuturor pentru ajutor!

 

 

 

 

20221028_094655.jpg

Editat de Untold
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări