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
- LiquidCrystal_PCF8574.h – Bibliothèque pour écran LCD I2C. Disponible sur GitHub. Installer via Croquis > Inclure une bibliothèque > Ajouter la bibliothèque .ZIP.
- RTClib.h – Bibliothèque pour horloge temps réel. Disponible sur GitHub. Décompresser d'abord, puis ajouter le fichier .zip restant à vos bibliothèques.
Schémas de câblage
Connexions I2C (LCD et RTC) :
- A5 → SCL
- A4 → SDA
- 5V → VCC
- GND → GND
Capteur de pression :
- Fil jaune → A1
- Fil noir → GND
- Fil rouge → 5V
Connecter à l'ordinateur et vérifier le bon fonctionnement via le moniteur série.
Processus de fabrication
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Manette de jeu USB Arduino DIY – Construisez votre propre gamepad haute performance
- Créer des animations et jeux sur LCD avec Arduino UNO
- Chaussures auto-laçantes intelligentes avec récupération d'énergie piézoélectrique
- Afficher Température, Humidité et Pression BME280 sur Écran Tactile Nextion
- Mesure de distance en temps réel par sonar Arduino et visualisation Processing
- Pixel Chaser : Jeu LED interactif à une touche avec Arduino Nano
- Construire une roue de mesure précise avec Arduino Nano et encodeur rotatif
- Composants de sécurité pneumatiques : Applications clés et guide de conformité