Sari la conținut
ELFORUM - Forumul electronistilor

Indicator nivel apa


Alex vw

Postări Recomandate

  • Răspunsuri 67
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Nu şi-au luat ultimul salariu de la forum şi sunt în grevă.Aici nu e nimeni obligat să dea soluţii, dacă cineva are o soluţie şi vrea să ajute, va posta.Dacă nu, vă puteţi documenta şi singur, fiindcă sigur există soluţii pe undeva...

Dacă se doreşte o soluţie contracost, postaţi la Servicii Electro-Job.

Link spre comentariu
Acum 11 minute, catalin004 a spus:

Salutare...de unde ati luat senzorul? Vreau sa imi fac si eu unul pentru un bazin...doar ca nu vreau sa il fac pe LCD. Doar sa porneasca/opreasca o pompa

 

Este un simplu senzor de distanta pe ultrasunete (HC-SR04) insa nu stiu cat de bine se comporta cu lichide. Exista n'spe librarii gata facute pentru arduino pentru a obtine distanta, mai trebuie 3-4 conditii pentru pornit oprit pompa.

 

https://www.optimusdigital.ro/en/ultrasonic-sensors/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=ultrasonic&results=84

https://cleste.ro/senzor-ultrasonic-hc-sr04.html

https://ardushop.ro/ro/home/47-modul-senzor-ultrasonic-detector-distanta.html?search_query=ultrasonic+&results=3

 

Daca mai adaugati niste maruntisuri pt proiect pe cleste.ro aveti transport moca pt comenzi de 90 lei.

Editat de Bandi Szasz
Link spre comentariu
Acum 4 minute, Bandi Szasz a spus:

 

Este un simplu senzor de distanta pe ultrasunete (HC-SR04) insa nu stiu cat de bine se comporta cu lichide. Exista n'spe librarii gata facute pentru arduino pentru a obtine distanta, mai trebuie 3-4 conditii pentru pornit oprit pompa.

 

https://www.optimusdigital.ro/en/ultrasonic-sensors/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=ultrasonic&results=84

https://cleste.ro/senzor-ultrasonic-hc-sr04.html

https://ardushop.ro/ro/home/47-modul-senzor-ultrasonic-detector-distanta.html?search_query=ultrasonic+&results=3

 

Daca mai adaugati niste maruntisuri pt proiect pe cleste.ro aveti transport moca pt comenzi de 90 lei.

Multumesc colegu..voiam sa il bag pe un PIC, nu pe arduino...

Link spre comentariu

Am vazut cateva solutii de fabrica mai vechi , aveauun plutitor inel pe o bara nemagnetica ( textolit,plastic ,aluminiu ,depinde de ce lichid era inauntru ) cu un magnet si cand ajungea la inaltimea dorita acolo era un releu in vid Reed ,care aclansa si dadea comanda mai departe .Simplu si eficient .Mai nou si un prajitor de paine are procesor ,pic ,etc .

Link spre comentariu
1 oră în urmă, validae a spus:

Nu şi-au luat ultimul salariu de la forum şi sunt în grevă.Aici nu e nimeni obligat să dea soluţii, dacă cineva are o soluţie şi vrea să ajute, va posta.Dacă nu, vă puteţi documenta şi singur, fiindcă sigur există soluţii pe undeva...

Dacă se doreşte o soluţie contracost, postaţi la Servicii Electro-Job.

Nu mai stim de gluma sau ?

Am zis ca evit senzorii cu plutitor.Am observat ca senzorii ultrasonici se comporta destul de bine la masurarea apei.Eu nu ma pricep la programare si nu stiu cum sa *triplez* comanda pentru senzori si nu stiu cum sa scriu intrarile si iesirile pentru fiecare senzor.

 

O sa mai studiez si daca gasesc ceva am sa postez si aici .

Link spre comentariu
37 minutes ago, catalin004 said:

Multumesc colegu..voiam sa il bag pe un PIC, nu pe arduino...

Iti pun eu proiect facut cu PIC si HC-SR04 un pic mai tarziu. 

 

LE: uite-l aici. https://forum.mikroe.com/viewtopic.php?t=53891

 

Nu e musai sa pui LCD, iar cu valoarea citita faci ce vrei. Pornesti sau opresti pompa, o controlezi invers proportional, etc. Daca ai intrebari, mai bine deschizi un alt topic. 

 

Din ce-mi aduc aminte il comentasem, deci sigur intelegi ce am facut. E chestie de temporizari doar. 

10 minutes ago, Alex vw said:

Eu nu ma pricep la programare si nu stiu cum sa *triplez* comanda pentru senzori si nu stiu cum sa scriu intrarile si iesirile pentru fiecare senzor. 

Foaia de catalog iti zice tot. Nu e mare lucru daca stii Arduino. 

 

Eu as incepe prin a posta aici proiectul cu 1 bucata si incercat sa adaugi al 2 lea senzor. In cazul asta, colegii vor comenta, tu inveti ceva si toata lumea e multumita. 

Editat de Mircea
Link spre comentariu
Acum 36 minute, Mircea a spus:

Iti pun eu proiect facut cu PIC si HC-SR04 un pic mai tarziu. 

 

LE: uite-l aici. https://forum.mikroe.com/viewtopic.php?t=53891

 

Nu e musai sa pui LCD, iar cu valoarea citita faci ce vrei. Pornesti sau opresti pompa, o controlezi invers proportional, etc. Daca ai intrebari, mai bine deschizi un alt topic. 

 

Din ce-mi aduc aminte il comentasem, deci sigur intelegi ce am facut. E chestie de temporizari doar. 

Foaia de catalog iti zice tot. Nu e mare lucru daca stii Arduino. 

 

Eu as incepe prin a posta aici proiectul cu 1 bucata si incercat sa adaugi al 2 lea senzor. In cazul asta, colegii vor comenta, tu inveti ceva si toata lumea e multumita. 

Multumesc colegu, cand o sa ma apuc de treaba o sa vedem unde postez.

In legatura cu senzorul clasic...e depasit, am lucrat cu ei, se blocau, plus ca nu nu am de unde cumpara la 1m lungime....chiar sa il si confectionez cred ca ma costa mult

Pic-ul il am deja montat, lucreaza dupa timp, insa as vrea dupa nivel...exista si un lcd 4x20 pe acolo...revin dupa ce iau senzorul

Link spre comentariu

@Alex vw

Dacă toate rezervoarele sunt identice e simplu de modificat schiţa, defineşti încă 2 seturi de intrare-ieşire pt. senzori şi îi denumeşti trigPin1 şi echoPin1, respectiv trigPin2 şi echoPin2, apoi încorporezi toată bucla loop iniţială într-o funcţie cu 2 parametri de intrare respectiv triggerPin şi echoPin căreia îi dai un nume de ex. getLevel(int trig_pin, int echo_pin).

Mai ai nevoie de un numărător în buclă cu 3 stări, care poate fi de ex. o variabilă int counter = 0; şi un buton de incrementare a stării numărătorului până la 2 şi apoi din nou la zero,, apelat printr-o întrerupere de flanc pe un pin care suportă întreruperi, 2 sau 3. În final mai ai nevoie de 3 leduri de afişare a rezervorului în care tocmai se face măsurătoarea.

Per total ai nevoie astfel de 4 + 3 + 1 = 8 pini suplimentari faţă de cei 9 existenţi. Cu Arduino Uno ar merge direct, la ESP8266 însă ar fi nevoie de multiplexor extern.

Dacă rezervoarele nu sunt identice atunci mai nevoie de încă 2 seturi de parametri ai rezervorului iar funcţia getLevel() primeşte în plus la argumente setul de lucru al parametrilor respectivi:

// REZERVOARE IDENTICE
switch (counter)
  {
    case 0: getLevel(trigPin, echoPin); 
    break;
    case 1: getLevel(trigPin1, echoPin1); 
    break;
    case 2: getLevel(trigPin2, echoPin2); 
    break;
  }  
// REZERVOARE DIFERITE
switch (counter)
  {
    case 0: getLevel(trigPin, echoPin, maximumRange, r); 
    break;
    case 1: getLevel(trigPin1, echoPin1, maximumRange1, r1); 
    break;
    case 2: getLevel(trigPin2, echoPin2, maximumRange2, r2); 
    break;
  }

În schiţă la rază scrie int r = 53.2 e clar că fiind integer se va lua în considerare doar 53 însă asta nu influenţează foarte mult calculul.

Editat de mihaicozac
typo
Link spre comentariu

@mihaicozac : sunt 3 bazine, 2 identice, 1 nu.Ca si senzori cred ca voi folosi https://cleste.ro/senzor-ultrasonic-rezistent-la-apa.html doar ca,cred ca trebuie modificat si in cod.Am uitat sa mentionez, treaba cu buzeru si ledurile nu ma intereseaza !

 

LE : cu un modul NodeMCU Lua WIFI ESP8266 CP2102 si programul Blynk , nu ar fi mai usor de realizat ?

 

Atasez codurile din video`ului postat la inceput:

 

 /*
 HC-SR04 ultrasonic sensor
 VCC to arduino 5v 
 GND to arduino GND
 Echo to Arduino pin 9 
 Trig to Arduino pin 8
*/
#define echopin 9 // echo pin
#define trigpin 8 // Trigger pin

int maximumRange = 105; // maximum height of tank in cm
long duration;
float v; // volume in cubic cm
float distance; // height of water level in cm
int r = 53.2; // radius of tank in cm
int cap; // capacity in liters
int actual_height; // actual height in cm
 
void setup() 
{
  Serial.begin (9600);
  pinMode (trigpin, OUTPUT);
  pinMode (echopin, INPUT );
  pinMode (4, OUTPUT);  //Buzzer
  pinMode (6, OUTPUT);  //PUMP control
  pinMode (A0, OUTPUT); //0% indicator
  pinMode (A1, OUTPUT); //25% indicator
  pinMode (A2, OUTPUT); //50% indicator
  pinMode (A3, OUTPUT); //75% indicator
  pinMode (A4, OUTPUT); //100% indicator
  
}
void loop ()
{
    digitalWrite(trigpin,LOW);
    delayMicroseconds(2);
    digitalWrite(trigpin,HIGH);
    delayMicroseconds(10);
    duration=pulseIn (echopin,HIGH);
    distance= duration/58.2;
    delay(200);
    Serial.print(distance);
    Serial.println("cm");
    /*Serial.print(v);
    Serial.println("cm3,");
    Serial.print(cap);
    Serial.println("liters, ");*/
    actual_height = maximumRange - distance;
    v = ((3.14*(r*r))*(actual_height)); // formula to calculate volume in cubic cm
    cap = v/1000; // final capacity in liters
  
  if (distance <= 100) 
    {
    digitalWrite(A0,HIGH);  // 0% INDICATION
     
      if (distance > 81) //buzzer action
      {
      digitalWrite(4,HIGH); 
      delay(200);           //BUZZER BEEPING
      digitalWrite(4,LOW);
      delay(200);
      }
      else
      {
      digitalWrite(4,LOW);  //BUZZER OFF
      }
    }
    else
    {
    digitalWrite(A0,LOW); 
    }
 
  if (distance <= 80) // 25% INDICATION
    {
    digitalWrite(A1,HIGH);
    }
    else 
    {
    digitalWrite(A1,LOW);
    }
 
  if (distance <= 60) // 50% INDICATION
    {
    digitalWrite(A2,HIGH);
    }
    else 
    {
    digitalWrite(A2,LOW);
    }
 
 if (distance <= 40) // 75% INDICATION
    {
    digitalWrite(A3,HIGH);
    }
    else 
    {
    digitalWrite(A3,LOW);
    }
 
 if (distance <= 20) // 100% INDICATION
    {
    digitalWrite(A4,HIGH);
    //digitalWrite(6,LOW); //PUMP OFF
    }
    else 
    {
    digitalWrite(A4,LOW);
    }
}



Placuta esp: 

 
/*
********************************************************
ULTRASONIC Water level Indicator using ESP8266-01
********************************************************
*/
//#define TRIGGER 4
//#define ECHO    5

#define TRIGGER 0 // for esp8266-01
#define ECHO    2 // for esp8266-01
 
// Pin D1 --> ECHO | NodeMCU Pin D2 --> TRIGGER
 
//#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Blynk.h>
 
int maximumRange = 105; // maximum height of tank in cm
long duration;
float v;                // volume in cubic cm
float distance;         // height of water level in cm
int r = 53.2;           // radius of tank in cm
int cap;                // capacity in liters
int actual_height;      // actual height in cm
 
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "Your Auth Token";
 
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Your SSID";
char pass[] = "Your WiFi Password";
 
// Keep this flag not to re-sync on every reconnection
bool isFirstConnect = true;
 
// This function will run every time Blynk connection is established
BLYNK_CONNECTED() {
  if (isFirstConnect) {
    // Request Blynk server to re-send latest values for all pins
    Blynk.syncAll();
    isFirstConnect = false;
  }
}
BLYNK_WRITE(V5)
{
  int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable
}
void setup() {  
  //      Serial.begin (9600);
  Blynk.begin(auth, ssid, pass);
  pinMode(TRIGGER, OUTPUT);
  pinMode(ECHO, INPUT);
}
 void loop() {
  {
  //long duration, distance;
  digitalWrite(TRIGGER, LOW);  
  delayMicroseconds(2); 
  
  digitalWrite(TRIGGER, HIGH);
  delayMicroseconds(10); 
 
  digitalWrite(TRIGGER, LOW);
  duration = pulseIn(ECHO, HIGH);
  distance= duration/58.2;
  delay (50);
  actual_height = maximumRange - distance;
  v = ((3.14*(r*r))*(actual_height)); // formula to calculate volume in cubic cm
  cap = v/1000; // final capacity in liters
  Blynk.virtualWrite(V5, cap);
  delay(200);
  }
   if (distance <= 105) 
   {
    Blynk.virtualWrite(V0, 255);
    //digitalWrite(D4,HIGH);
   }
    else 
    {
    Blynk.virtualWrite(V0, 0);
    //digitalWrite(D4,LOW);
    }
 
  if (distance <= 85) 
  {
    Blynk.virtualWrite(V1, 255);
    //digitalWrite(D5,HIGH);
    }
    else 
    {
    Blynk.virtualWrite(V1, 0);
    //digitalWrite(D5,LOW);
    }
 
  if (distance <= 65) 
  {
    Blynk.virtualWrite(V2, 255);
    //digitalWrite(D6,HIGH);
    }
    else 
    {
    Blynk.virtualWrite(V2, 0);
    //digitalWrite(D6,LOW);
    }
 
  if (distance <= 45) 
  {
    Blynk.virtualWrite(V3, 255);
    //digitalWrite(D7,HIGH);
    }
    else 
    {
    Blynk.virtualWrite(V3, 0);
    //digitalWrite(D7,LOW);
    }
 
  if (distance <= 20) 
  {
    Blynk.virtualWrite(V4, 255);
    //digitalWrite(D8,HIGH);
    }
    else 
    {
    Blynk.virtualWrite(V4, 0);
    //digitalWrite(D8,LOW);
    }
    
 Blynk.run();
}
 
 
 
Link spre comentariu
2 hours ago, Alex vw said:
if (distance <= 80) // 25% INDICATION
    {
    digitalWrite(A1,HIGH);
    }
    else 
    {
    digitalWrite(A1,LOW);
    }

eu zic ca aceste comparatii repetate care ocupa multe linii se pot scrie mai simplu asa:

digitalWrite(A1,distance <= 80);
digitalWrite(A2,distance <= 60);
...

Tare urât arată acele if-uri independente unul de altul.

Editat de Vizitator
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