Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino-gebaseerde Druksensor & Datalogger voor Nauwkeurige Luchtdrukmonitoring

Onderdelen en Benodigdheden

OnderdeelAantal
Arduino UNO1
Delkin Commercial MLC SD-kaart1
Druksensor SKU2375451
Datalogger RTC (Real Time Clock)1
I2C LCD-scherm1
Waterdichte kunststof projectbehuizing (158 x 90 x 60 mm)1
HALJIA 300 stuks M3 nylon zwarte zesklopschroeven1 set
ELEGOO 120 stuks gekleurde Dupont-draden1 set

Apps en Online Services

  • Arduino IDE

Over dit Project

Dit project ontstond uit de wens om de luchtdruk in een reservoir te registreren om de efficiëntie van een mechanische compressor te controleren. Met dank aan George Kontaxis voor de hulp.

Bekijk de videodemonstratie

Display met Datum en Druk in Bar & PSI

De Arduino-drukmeetset meet drie verschillende drukwaarden en toont deze realtime op het LCD-scherm samen met datum en tijd.

Code

Hoofdprogramma: SKU237545 Druksensor met LCD, Realtime Clock en Datalogging

De onderstaande code leest de analoogwaarde van de sensor (A1), converteert deze naar spanning, en berekent vervolgens de druk in Pascal, bar en PSI. De metingen worden met een tijdstempel opgeslagen op de SD-kaart in CSV-formaat.

// Aangemaakt 12 augustus 2018 door Philip Blayney & Jack Davidson
// Gebruikt code van George Kontaxis voor de SKU237545 Druksensor
#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("error: "));
  Serial.println(str);
}

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

  Serial.print(F("SD-kaart initialiseren..."));
  pinMode(10, OUTPUT);
  if (!SD.begin(chipSelect)) {
    error("Kaart mislukt of niet aanwezig");
  }
  Serial.println(F("kaart geïnitialiseerd."));

  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("kon bestand niet aanmaken");
  
  lcdI2C.clear();
  lcdI2C.setCursor(0,0);
  lcdI2C.print(F("Bestand Nr "));
  lcdI2C.print(filename);
  Serial.print(F("Loggen naar: "));
  Serial.println(filename);

  if (!RTC.begin()) {
    logfile.println("RTC mislukt");
    Serial.println(F("RTC mislukt"));
  }
  
  logfile.println("Datum / Tijd ,druk ,bar ,waarde ,psi,waarde");
  delay(5000);
  lcdI2C.clear();
}

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

  Serial.print("Druk = ");
  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();

  // Schrijf naar SD-kaart
  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);

  // LCD weergave
  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);

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

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

RTC Instellen (DS3231)

// Code door 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);
  // Stel initiële tijd in: seconden, minuten, uren, dag, datum, maand, jaar
  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() {
  // Tijd uitlezen en tonen op Serial Monitor
  delay(1000);
}

Benodigde Bibliotheken

Schema's en Aansluitschema

I2C LCD & RTC:

  • A5 → SCL
  • A4 → SDA
  • 5V → VCC
  • GND → GND

Druksensor (SKU237545):

  • Gele draad → A1
  • Zwarte draad → GND
  • Rode draad → 5V

Sluit de Arduino aan op de PC en controleer de correcte werking via de Serial Monitor.

Productieproces

  1. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  2. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  3. Bouw Boeiende LCD Animaties & Games met Arduino UNO
  4. Slimme Zelfzittende Schoenen met Ingebouwde Energie-opwekking
  5. BME280 Temperatuur, Vochtigheid & Druk Weergeven op Nextion Touchscreen
  6. Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
  7. Pixel Chaser: Interactieve één-tik LED-spel met Arduino Nano
  8. Een nauwkeurig meetwieltje bouwen met Arduino Nano en draaiencoder
  9. Naadloze LED-dimmer met Bolt IoT en Arduino UNO
  10. Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
  11. Pneumatische Veiligheidscomponenten: Sleuteltoepassingen en Naleidingsrichtlijnen