Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Hoe kom je te weten over het waterniveau in een watertank? Om dit soort dingen te bewaken, kunt u een druksensor gebruiken. Dit is in het algemeen zeer nuttige apparatuur voor industriële automatisering. Vandaag gaan we het hebben over deze exacte familie van MPX-druksensoren, specifiek voor drukmeting. Ik zal u kennis laten maken met de MPX5700-druksensor en een monstermontage uitvoeren met behulp van de ESP WiFi LoRa 32.
Ik zal vandaag geen LoRa-communicatie in het circuit gebruiken, noch WiFi noch Bluetooth. Ik heb echter voor deze ESP32 gekozen omdat ik al in andere video's heb geleerd hoe je alle functies kunt gebruiken die ik vandaag bespreek.
Stap 1: Demonstratie
Stap 2: Gebruikte bronnen
• MPX5700DP Drukverschilsensor
• 10k potentiometer (of trimpotmeter)
• Protobord
• Aansluitdraden
• USB-kabel
• ESP WiFi LoRa 32
• Luchtcompressor (optioneel)
Stap 3: Waarom druk meten?
• Er zijn tal van toepassingen waarbij druk een belangrijke regelvariabele is.
• We kunnen pneumatische of hydraulische besturingen inzetten.
• Medische instrumentatie.
• Robotica.
• Beheersing van industriële of milieuprocessen.
• Niveaumeting in vloeistof- of gasreservoirs.
Stap 4: De MPX-familie van druksensoren
• Het zijn drukopnemers in elektrische spanning.
• Ze zijn gebaseerd op een piëzo-resistieve sensor, waarbij compressie wordt omgezet in een variatie van de elektrische weerstand.
• Er zijn uitvoeringen die kleine drukverschillen (van 0 tot 0,04atm) of grote variaties (van 0 tot 10atm) kunnen meten.
• Ze verschijnen in meerdere pakketten.
• Ze kunnen absolute druk (ten opzichte van vacuüm), verschildruk (het verschil tussen twee drukken, p1 en p2), of manometer (ten opzichte van atmosferische druk) meten.
Stap 5: De MPX5700DP
• De 5700-serie is voorzien van absolute, differentiële en metersensoren.
• De MPX5700DP kan een verschildruk meten van 0 tot 700 kPa (ongeveer 7 atm).
• De uitgangsspanning varieert van 0,2V tot 4,7V.
• Zijn vermogen is van 4,75V tot 5,25V
Stap 6: Voor de demonstratie
• Deze keer doen we geen praktische toepassing met deze sensor; we zullen het alleen monteren en enkele metingen uitvoeren als demonstratie.
• Hiervoor zullen we een directe luchtcompressor gebruiken om druk uit te oefenen op de hogedrukinlaat (p1) en het verschil te krijgen ten opzichte van de lokale atmosferische druk (p2).
• De MPX5700DP is een unidirectionele sensor, wat betekent dat hij positieve verschillen meet waarbij p1 altijd groter dan of gelijk aan p2 moet zijn.
• p1> p2 en het verschil is p1 - p2
• Er zijn tweerichtingsverschilsensoren die negatieve en positieve verschillen kunnen evalueren.
• Hoewel het slechts een demonstratie is, zouden we de principes hier gemakkelijk kunnen gebruiken om bijvoorbeeld de druk in een luchtreservoir, aangedreven door deze compressor, te regelen.
Stap 7: De ESP ADC kalibreren
• Aangezien we weten dat de analoog-digitaalconversie van ESP niet volledig lineair is en van de ene SoC tot de andere kan verschillen, laten we beginnen met een eenvoudige bepaling van het gedrag ervan.
• Met een potentiometer en een multimeter meten we de spanning op de AD en relateren deze aan de aangegeven waarde.
• Met een eenvoudig programma om de AD uit te lezen en de informatie in een tabel te verzamelen, konden we de curve van zijn gedrag bepalen.
Stap 8: De druk berekenen
• Hoewel de fabrikant ons de functie geeft met het gedrag van het onderdeel, is het altijd raadzaam om een kalibratie uit te voeren als we het hebben over metingen.
• Omdat het echter slechts een demonstratie is, zullen we de functie in de datasheet direct gebruiken. Hiervoor zullen we het manipuleren op een manier die ons de druk geeft als functie van de ADC-waarde.
* Houd er rekening mee dat de fractie van de spanning die door de referentiespanning op de ADC wordt toegepast, dezelfde waarde moet hebben als de ADC die door de totale ADC wordt gelezen. (De correctie buiten beschouwing gelaten)
Stap 9: Montage
• Om de sensor aan te sluiten, zoekt u naar de inkeping in een van de aansluitingen, die pin 1 aangeeft.
• Vanaf daar tellen:
Pin 1 biedt signaaluitgang (van 0V tot 4,7V)
Pin 2 is de referentie. (GND)
Pin 3 voor stroom. (Vs)
• Aangezien het uitgangssignaal 4,7V is, gebruiken we een spanningsdeler zodat de maximale waarde gelijk is aan 3V3. Hiervoor hebben we de aanpassing gedaan met de potmeter.
Stap 10: Broncode
Broncode: #Includes en #defines
//Bibliotecas para utilização do display oLED#include // Necessário apenas para o Arduino 1.6.5 en posterior #include "SSD1306.h" // o mesmo que #include "SSD1306Wire.h" //Os pinos do OLED estão conectados oa ESP32 scheidt GPIO's: //OLED_SDA -- GPIO4 //OLED_SCL -- GPIO15 //OLED_RST -- GPIO16 #define SDA 4 #define SCL 15 #define RST 16 //RST deve ser ajustado por software
Bron: Globale variabelen en constanten
SSD1306-display (0x3c, SDA, SCL, RST); //Instanciando e ajustando os pinos do objeto "display" const int amostras = 10000; //número de amostras coletadas para a média const int pin = 13; //Leitura const float fator_atm = 0.0098692327; //Fator de conversão para atmosferas const float fator_bar = 0.01; //fator de conversão para bar const float fator_kgf_cm2 = 0.0101971621; // fator de conversão kgf/cm2
Broncode: instellen ()
void setup(){ pinMode(pin, INPUT); //analoge gegevens Serial.begin(115200); //iniciando a serial // Inicia o display display.init(); display.flipScreenVertical(); //Vira a tela verticalmente}
Broncode: Loop ()
void loop(){ float medidas = 0.0;//variável para manipular as medidas float pressao = 0.0; //variável para armazenar o valor da pressão //inicia a coleta de amostras do ADC for (int i = 0; i
Broncode: Functie die de druk in kPa. berekent
float calculaPressao (float medida) {//Calcula a pressão com o //valor do AD corrigido pela função corrigeMedida() //Esta função foi escrita de acordo com dados do fabricante //e NÃO LEVA EM CONSIDERAÇISO DE OSVOS erro) retour ((corrigeMedida(medida) / 3.3) - 0.04) / 0.0012858; }
-- AFBEELDINGEN
Broncode: Functie die de AD-waarde corrigeert
float corrigeMedida(float x) { /* Esta função foi obtida através da relação tussen een tensão aplicada no AD e valor lido */ return 4.821224180510e-02 + 1.180826610901e-03 * x + -6.640183463236e-07 * x * x + 5.235532597676e-10 * x * x * x + -2.020362975028e-13 * x * x * x * x + 3.809807883001e-17 * x * x * x * x * x + -2.896158699016e-21 * x * x * x * x * x * x; }
Stap 11: Bestanden
Download de bestanden:
INO