Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Capteur de pression et enregistreur de données Arduino pour une surveillance précise de la pression atmosphérique

Composants et fournitures

Arduino UNO × 1
Carte SD Delkin Commercial MLC × 1
Capteur de pression SKU237545 × 1
Module RTC pour enregistreur de données × 1
Écran LCD I2C × 1
Boîtier de projet étanche transparent 158 × 90 × 60 mm × 1
Vis hexagonales M3 en nylon noir (lot de 300) × 1
Fils Dupont multicolores ELEGOO (120 pièces) × 1

Applications et services en ligne

Arduino IDE

À propos du projet

Ce projet est né de la nécessité d'enregistrer la pression de l'air dans un réservoir afin de vérifier l'efficacité d'un compresseur mécanique. Un grand merci à George Kontaxis pour son aide.

Lien vers la vidéo de démonstration : YouTube

L'affichage indique la date et la pression en bar et en PSI.

Manomètre Arduino – Lecture de 3 pressions

Code

Capteur de pression SKU237545 avec LCD, horloge temps réel et journalisation des données

// Créé le 12 août 2018 par Philip Blayney & Jack Davidson
// Utilise le code de George Kontaxis pour le capteur SKU237545
// 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("erreur : "));
  Serial.println(str);
}

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("Lecture pression capteur SKU237545"));
  
  lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
  lcdI2C.print(F("CAPTEUR SKU237545"));
  lcdI2C.setCursor(0,1);
  lcdI2C.print(F(" bar et psi "));
  delay(2000);
  
  Serial.print(F("Initialisation carte SD..."));
  pinMode(10, OUTPUT);
  if (!SD.begin(chipSelect)) {
    error("Carte échouée ou absente");
  }
  Serial.println(F("carte initialisée."));
  
  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("impossible de créer le fichier");
  }
  
  lcdI2C.clear();
  lcdI2C.setCursor(0,0);
  lcdI2C.print(F("Fichier No "));
  lcdI2C.print(filename);
  Serial.print(F("Journalisation vers : "));
  Serial.println(filename);
  
  if (!RTC.begin()) {
    logfile.println("RTC échoué");
    Serial.println(F("RTC échoué"));
  }
  
  logfile.println("Date / Heure, pression, bar, lecture, psi, lecture");
  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("Pression = ");
  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();
  
  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);
  
  Serial.println();
  Serial.print(now.year(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  if (H < 10) Serial.print(0);
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  if (M < 10) Serial.print(0);
  Serial.print(now.minute(), DEC);
  Serial.print(F(":"));
  if (S < 10) Serial.print(0);
  Serial.print(now.second(), DEC);
  Serial.println();
  
  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(" Pression = ");
  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);
}

Réglage de l'horloge temps réel

// Code par 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);
  // Régler l'heure initiale ici :
  // DS3231 secondes, minutes, heures, jour, date, mois, année
  setDS3231time(00, 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 readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) {
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

void displayTime() {
  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(" Jour de la semaine : ");
  switch(dayOfWeek) {
    case 1: Serial.println("Dimanche"); break;
    case 2: Serial.println("Lundi"); break;
    case 3: Serial.println("Mardi"); break;
    case 4: Serial.println("Mercredi"); break;
    case 5: Serial.println("Jeudi"); break;
    case 6: Serial.println("Vendredi"); break;
    case 7: Serial.println("Samedi"); break;
  }
}

void loop() {
  displayTime();
  delay(1000);
}

Bibliothèques requises

Schémas de câblage

Connexions I2C (LCD et RTC) :

Capteur de pression :

Connecter à l'ordinateur et vérifier le bon fonctionnement via le moniteur série.

Processus de fabrication

  1. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  2. Manette de jeu USB Arduino DIY – Construisez votre propre gamepad haute performance
  3. Créer des animations et jeux sur LCD avec Arduino UNO
  4. Chaussures auto-laçantes intelligentes avec récupération d'énergie piézoélectrique
  5. Afficher Température, Humidité et Pression BME280 sur Écran Tactile Nextion
  6. Mesure de distance en temps réel par sonar Arduino et visualisation Processing
  7. Pixel Chaser : Jeu LED interactif à une touche avec Arduino Nano
  8. Construire une roue de mesure précise avec Arduino Nano et encodeur rotatif
  9. Composants de sécurité pneumatiques : Applications clés et guide de conformité