Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino-basierter Drucksensor & Datenlogger für präzise Luftdrucküberwachung

Komponenten und Zubehör

KomponenteMenge
Arduino UNO1
Delkin Commercial MLC SD-Karte1
Drucksensor SKU2375451
Datenlogger RTC (Echtzeituhr)1
I2C LCD-Display1
Wasserdichtes Gehäuse (158 × 90 × 60 mm)1
M3 Nylon-Schrauben (300 Stück)1
Dupont-Kabel (120 Stück, farbig)1

Apps und Online-Dienste

Projektbeschreibung

Dieses Projekt entstand aus dem Wunsch, den Luftdruck in einem Reservoir aufzuzeichnen, um die Effizienz eines mechanischen Kompressors zu überprüfen. Besonderer Dank gilt George Kontaxis für seine Unterstützung.

Video-Demonstration auf YouTube

Das Display zeigt Datum und Druck in Bar sowie PSI an.

Arduino-Druckmessgerät – Messung von 3 Druckwerten

Programmcode

Hauptprogramm: Drucksensor mit LCD, Echtzeituhr und Datenlogging

// Erstellt am 12. August 2018 von Philip Blayney & Jack Davidson
// Basierend auf Code von George Kontaxis für den SKU237545 Drucksensor
// https://www.youtube.com/watch?v=AB7zgnfkEi4

#include "LiquidCrystal_PCF8574.h"
#include "RTClib.h"
#include 

#define LCD_ADDRESS 0x27
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255

LiquidCrystal_PCF8574 lcdI2C;
RTC_DS1307 RTC;

int n = 1;
int val;

#define LOG_INTERVAL 1000
#define SYNC_INTERVAL 10000
uint32_t syncTime = 0;
const int chipSelect = 10;
File logfile;

void error(char *str) {
  Serial.print(F("Fehler: "));
  Serial.println(str);
}

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("Druckmessung am SKU237545 SENSOR"));
  
  lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
  lcdI2C.print(F("SKU237545 SENSOR"));
  lcdI2C.setCursor(0,1);
  lcdI2C.print(F(" bar und psi "));
  delay(2000);

  Serial.print(F("Initialisiere SD-Karte..."));
  pinMode(10, OUTPUT);
  
  if (!SD.begin(chipSelect)) {
    error("Karte fehlgeschlagen oder nicht vorhanden");
  }
  Serial.println(F("Karte initialisiert."));

  char filename[] = "LOGGER00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (!SD.exists(filename)) {
      logfile = SD.open(filename, FILE_WRITE);
      break;
    }
  }
  
  if (!logfile) {
    error("Datei konnte nicht erstellt werden");
  }
  
  lcdI2C.clear();
  lcdI2C.setCursor(0,0);
  lcdI2C.print(F("Datei Nr. "));
  lcdI2C.print(filename);
  Serial.print(F("Logge in: "));
  Serial.println(filename);

  if (!RTC.begin()) {
    logfile.println("RTC fehlgeschlagen");
    Serial.println(F("RTC fehlgeschlagen"));
  }
  
  logfile.println("Datum / Zeit, Druck, Bar, Rohwert, PSI, Rohwert");
  delay(5000);
  lcdI2C.clear();
}

void loop(void) {
  int sensorVal = analogRead(A1);
  float voltage = (sensorVal * 5.0) / 1024.0;
  float pressure_pascal = (3.0 * (voltage - 0.475)) * 1000000.0;
  float pressure_bar = pressure_pascal / 10e5;
  float pressure_psi = pressure_bar * 14.5038;

  Serial.print("Druck = ");
  Serial.print(pressure_bar);
  Serial.print(" bar ");
  Serial.print("psi ");
  Serial.print(pressure_psi);
  Serial.println();

  DateTime now = RTC.now();
  delay((LOG_INTERVAL - 1) - (millis() % LOG_INTERVAL));

  int H = now.hour();
  int M = now.minute();
  int S = now.second();

  // In Datei schreiben
  logfile.print(now.year(), DEC);
  logfile.print("/");
  logfile.print(now.month(), DEC);
  logfile.print("/");
  logfile.print(now.day(), DEC);
  logfile.print(" ");
  
  if (H < 10) logfile.print(0);
  logfile.print(now.hour(), DEC);
  logfile.print(":");
  if (M < 10) logfile.print(0);
  logfile.print(now.minute(), DEC);
  logfile.print(":");
  if (S < 10) logfile.print(0);
  logfile.print(now.second(), DEC);

  logfile.print(", ");
  logfile.print("Druck = ");
  logfile.print(",");
  logfile.print(pressure_bar);
  logfile.print(",");
  logfile.print(" bar ");
  logfile.print(",");
  logfile.print(pressure_psi);
  logfile.print(",");
  logfile.print("psi");
  logfile.println();

  // LCD anzeigen
  lcdI2C.setCursor(0,0);
  lcdI2C.print(pressure_bar);
  lcdI2C.print("bar ");
  lcdI2C.print(pressure_psi);
  lcdI2C.print("psi ");
  
  lcdI2C.setCursor(0,1);
  lcdI2C.print(now.day(), DEC);
  lcdI2C.print("/");
  lcdI2C.print(now.month(), DEC);
  lcdI2C.print(" ");
  if (H < 10) lcdI2C.print(0);
  lcdI2C.print(now.hour(), DEC);
  lcdI2C.print(":");
  if (M < 10) lcdI2C.print(0);
  lcdI2C.print(now.minute(), DEC);
  lcdI2C.print(":");
  if (S < 10) lcdI2C.print(0);
  lcdI2C.print(now.second(), DEC);

  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();
  logfile.flush();
  delay(10);
}

Echtzeituhr einstellen (DS3231)

// Code von tronixstuff
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68

byte decToBcd(byte val) { return (val/10*16) + (val%10); }
byte bcdToDec(byte val) { return (val/16*10) + (val%16); }

void setup() {
  Wire.begin();
  Serial.begin(9600);
  // Zeit hier einstellen: Sekunden, Minuten, Stunden, Tag, Datum, Monat, Jahr
  setDS3231time(0, 43, 14, 3, 14, 8, 18);
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek,
                   byte dayOfMonth, byte month, byte year) {
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(dayOfWeek));
  Wire.write(decToBcd(dayOfMonth));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.endTransmission();
}

void loop() {
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  
  Serial.print(hour, DEC); Serial.print(":");
  if (minute < 10) Serial.print("0");
  Serial.print(minute, DEC); Serial.print(":");
  if (second < 10) Serial.print("0");
  Serial.print(second, DEC); Serial.print(" ");
  Serial.print(dayOfMonth, DEC); Serial.print("/");
  Serial.print(month, DEC); Serial.print("/");
  Serial.print(year, DEC); Serial.print(" Wochentag: ");
  
  const char* days[] = {"", "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};
  Serial.println(days[dayOfWeek]);
  delay(1000);
}

Benötigte Bibliotheken

Schaltplan

I2C-Verbindungen (LCD & RTC):

Drucksensor (SKU237545):

Anschließend an PC anschließen und Funktion prüfen.

Herstellungsprozess

  1. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  2. DIY Arduino USB Gaming Controller – Bauen Sie Ihren eigenen High-Performance Gamepad
  3. LCD-Animationen & Spiele mit Arduino UNO erstellen
  4. Intelligente selbstschnürende Schuhe mit integrierter Energiegewinnung
  5. BME280 Temperatur, Luftfeuchte & Druck auf Nextion Touchscreen anzeigen
  6. Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
  7. Pixel Chaser: Interaktives One-Tap-LED-Spiel mit Arduino Nano
  8. Präzises DIY-Messrad mit Arduino Nano und Drehgeber
  9. Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
  10. Pneumatische Sicherheitskomponenten: Wichtige Anwendungen und Compliance-Richtlinien