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

Arduino-Druckmessung und -protokollierung

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Delkin Commercial MLC SD
× 1
Drucksensor SKU237545
× 1
Datenlogger rtc
× 1
i2c lcd
× 1
Wasserdichte transparente Abdeckung Elektronische Projektbox aus Kunststoff 158 x 90 x 60 mm
× 1
HALJIA 300Pcs M3 Nylon schwarze Sechskantschraube
× 1
ELEGOO 120er bunter Dupont-Draht
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Dieses Projekt entstand aus dem Wunsch, den in einem Reservoir eingebauten Luftdruck aufzuzeichnen, um die Effizienz eines mechanischen Kompressors zu überprüfen.

Hilfe von George Kontaxis

https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be

Display mit Datum und Druck in bar &PSI

Arduino-Manometer. 3 Drücke ablesen

Code

  • SKU237545 Drucksensor mit LCD-Echtzeituhr und Datenprotokollierung
  • Echtzeituhr einstellen
SKU237545 Drucksensor mit LCD-Echtzeituhr und DatenprotokollierungC/C++
//erstellt am 12. August 2018 Philip Blayney &Jack Davidson mit Code von George //Kontaxis für den Drucksensor SKU237545//https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be #include " LiquidCrystal_PCF8574.h"#include "RTClib.h" // Echtzeituhr#include  // SD-Karte #define LCD_ADDRESS 0x27 // Definiere LCD-Eigenschaften#define LCD_ROWS 2#define LCD_COLUMNS 16#define SCROLL_DELAY 150#define BACKLIGHT 255 // ObjektinitialisierungLiquidCrystal_PCF8574 lcdI2C;RTC_DS1307 RTC; // Definiere die Echtzeituhr objectint n =1; int-Wert; // Ein einfacher Datenlogger für die analogen Arduino-Pins #define LOG_INTERVAL 1000 // mahlt zwischen den Einträgen (reduziert, um mehr / schnellere Daten aufzunehmen) // wie viele Millisekunden, bevor die protokollierten Daten dauerhaft auf die Festplatte geschrieben werden // setze es auf LOG_INTERVAL auf Schreibe jedes Mal (am sichersten) // setze es auf 10*LOG_INTERVAL, um alle Daten alle 10 Datenlesevorgänge zu schreiben, du könntest bis zu // die letzten 10 Lesevorgänge verlieren, wenn die Stromversorgung ausfällt, aber es verbraucht weniger Strom und ist viel schneller!#define SYNC_INTERVAL 10000 // mahlt zwischen den Aufrufen von flush () - um Daten auf die Karte zu schreiben 600000 =10 minutesuint32_t syncTime =0; // Zeitpunkt der letzten Synchronisierung () const int chipSelect =10; // für das Datenprotokollierungsschild verwenden wir den digitalen Pin 10 für die SD-CS-Zeile Dateiprotokolldatei;void error (char *str) {Serial.print (F ("error:")); Serial.println (str);} Void setup (void) {Serial.begin (9600); // seriellen Port Serial.println starten (F("Druckablesung von SKU237545 SENSOR")); //F =Makrofunktion zum Speichern des dynamischen Speichers lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT); lcdI2C.print(F("SKU237545 SENSOR")); lcdI2C.setCursor(0,1); lcdI2C.print(F("bar und psi")); Verzögerung (2000); // Initialisieren Sie die SD-Karte Serial.print (F ("Initializing SD Card ...")); // Stellen Sie sicher, dass der Standard-Chipauswahl-Pin auf // Ausgang gesetzt ist, auch wenn Sie ihn nicht verwenden:pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) {// sehen, ob die Karte vorhanden ist und initialisiert werden kann:error("Karte fehlgeschlagen oder nicht vorhanden"); } Serial.println (F ("Karte initialisiert.")); char Dateiname[] ="LOGGER00.CSV"; // eine neue Datei erstellen für (uint8_t i =0; i <100; i++) { filename[6] =i/10 + '0'; Dateiname[7] =i%10 + '0'; if (! SD.exists(filename)) { // nur eine neue Datei öffnen, wenn sie nicht existiert logfile =SD.open(filename, FILE_WRITE); brechen; // Verlasse die Schleife! } } if (! logfile) { error("Datei konnte nicht erstellt werden"); } lcdI2C.clear(); lcdI2C.setCursor(0,0); lcdI2C.print(F("Datei-Nr.")); lcdI2C.print (Dateiname); Serial.print (F ( "Protokollierung bei:")); Serial.println (Dateiname); // mit RTC verbinden if (!RTC.begin()) { logfile.println("RTC fehlgeschlagen"); #if ECHO_TO_SERIAL Serial.println (F ("RTC fehlgeschlagen")); #endif //ECHO_TO_SERIAL } logfile.println("Datum / Uhrzeit, Druck, Bar, Messwert, Psi, Messwert "); Verzögerung (5000); lcdI2C.clear(); // LCD-Bildschirm löschen.} Void Schleife (void) {int sensorVal =analogRead (A1); // Serial.print ( "Sensorwert:"); // Serial.print (sensorVal); float voltage =(sensorVal * 5.0 )/1024.0; // Serial.print ("Volt:"); // Serial.print (Spannung); Schwimmerdruck_Pascal =(3,0*(((Gleit-)Spannung –0,475))*1000000,0; // hier kalibrieren Schwimmer Pressure_bar =Pressure_pascal/10e5; Schwimmerdruck_psi =Druck_bar*14,5038; Serial.print ("Druck ="); Serial.print (Druck_bar); Serial.print ( "Balken"); Serial.print ("psi"); Serial.print (Druck_psi); Serial.println(); DateTime jetzt; jetzt =RTC.now(); // Hole die Zeitverzögerung ((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL)); // Verzögerung für die gewünschte Zeit zwischen den SD-Kartenlesungen int H =now.hour (); // Holen Sie sich jetzt die Stunden und speichern Sie sie in einer Ganzzahl namens h int M =now.minute(); // Holen Sie sich jetzt die Minuten und speichern Sie sie in einer Ganzzahl namens m int S =now.second(); // Holen Sie sich die Sekunden jetzt und speichern Sie sie in einer Ganzzahl namens s logfile.print(now.year(), DEC); logfile.print("/"); logfile.print (jetzt.Monat(), DEZ); logfile.print("/"); logfile.print (jetzt.tag(), DEZ); logfile.print(" "); if (H<10){ // Füge eine Null hinzu, falls nötig, wie oben logfile.print(0); } logfile.print(now.hour(), DEC); logfile.print(":"); if (M<10){ // Füge bei Bedarf eine Null hinzu, wie oben logfile.print(0); } logfile.print(now.minute(), DEC); logfile.print(":"); if (S<10){ // Füge eine Null hinzu, falls nötig, wie oben logfile.print(0); } logfile.print(now.second(), DEC); // logfile.print ('"'); 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) {//Füge bei Bedarf eine Null hinzu, wie oben Serial.print (0); } Serial.print (now.hour (), DEC); Serial.print (":"); if (M<10) {//Füge bei Bedarf eine Null hinzu, wie oben Serial. print(0);} Serial.print(now.minute(), DEC); Serial.print(F(":")); if (S<10) {//Füge bei Bedarf eine Null hinzu, wie oben Serial .print (0); } Serial.print (now.second (), DEC); Serial.println (); lcdI2C.setCursor (0,0); lcdI2C.print (pressure_bar); // Zeichenfolge zuerst auf LCD drucken Zeile lcdI2C.print ("bar "); lcdI2C.print (pressure_psi); lcdI2C.print ("psi "); lcdI2C.setCursor(0,1); //lcdI2C.print (now.year(), DEC); // lcd hat nicht genug Platz um das Jahr anzuzeigen // lcdI2C.print("/"); lcdI2C.print(now.day(), DEC); lcdI2C.print("/"); lcdI2C.print(now .month(), DEC); lcdI2C.print(" "); if (H<10){ // Füge ggf. eine Null hinzu, wie oben lcdI2C.print(0); } lcdI2C.print (now.hour(), DEC); lcdI2C.print(":"); if (M<10){// Füge eine Null hinzu, falls erforderlich, wie oben lcdI2C.print(0); } lcdI2C.print (jetzt.minute(), DEZ); lcdI2C.print(":"); if (S<10) {// Füge eine Null hinzu, falls erforderlich, wie oben lcdI2C.print(0); } lcdI2C.print (now.second(), DEC); logfile.print(", "); logfile.print(" Druck ="); logfile.print(","); logfile.print (Druck_bar); logfile.print(","); logfile.print(" Balken "); logfile.print(","); logfile.print (Druck_psi); logfile.print(","); logfile.print("psi"); logfile.println();if ((millis() - syncTime)  
Echtzeituhr einstellenC/C++
//Code by tronixstuff#include "Wire.h"#define DS3231_I2C_ADDRESS 0x68// Konvertiert normale Dezimalzahlen in binär codiertes Dezimalbyte decToBcd(byte val){ return( (val/10*16) + (val%10) );} // Konvertieren von binär codierten Dezimalzahlen in normale Dezimalzahlenbyte bcdToDec(byte val){ return( (val/16*10) + (val%16));}void setup(){ Wire.begin(); Serial.begin (9600); // hier die Anfangszeit einstellen:// DS3231 Sekunden, Minuten, Stunden, Tag, Datum, Monat, Jahr setDS3231time(00,43,14,3,14,8,18); // hier erforderliche Zeit einstellen}void setDS3231time (Byte Sekunde, Byte Minute, Byte Stunde, Byte DayOfWeek, BytedayOfMonth, Byte Monat, Byte Jahr){ // Setzt Zeit- und Datumsdaten auf DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write(0); // nächsten Eingang setzen, um beim Sekundenregister zu beginnen Wire.write (decToBcd (second)); // Sekunden setzen Wire.write (decToBcd (Minute)); // Minuten einstellen Wire.write (decToBcd (hour)); // Stunden setzen Wire.write (decToBcd (dayOfWeek)); // Wochentag einstellen (1=Sonntag, 7=Samstag) Wire.write(decToBcd(dayOfMonth)); // Datum einstellen (1 bis 31) Wire.write (decToBcd (Monat)); // Monat setzen Wire.write (decToBcd (Jahr)); // set year (0 to 99) 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); // DS3231-Registerzeiger auf 00h setzen Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // sieben Byte Daten von DS3231 anfordern, beginnend mit Register 00h *second =bcdToDec(Wire.read() &0x7f); *Minute =bcdToDec(Wire.read()); *Stunde =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *Monat =bcdToDec(Wire.read()); *Jahr =bcdToDec(Wire.read());}void displayTime(){ Byte Sekunde, Minute, Stunde, dayOfWeek, dayOfMonth, month, year; // Daten von DS3231 abrufen readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // an den seriellen Monitor senden Serial.print (Stunde, DEC); // Konvertieren Sie die Byte-Variable in eine Dezimalzahl, wenn sie angezeigt wird Serial.print (":"); wenn (Minute <10) {Serial.print("0"); } Serial.print (Minute, DEZ); Serial.print (":"); wenn (zweite <10) {Serial.print("0"); } Serial.print (zweite, DEZ); Serial.print ( " "); Serial.print (dayOfMonth, DEC); Serial.print("/"); Serial.print (Monat, DEZ); Serial.print("/"); Serial.print (Jahr, DEZ); Serial.print("Wochentag:"); switch (dayOfWeek) {Fall 1:Serial.println ( "Sonntag"); brechen; Fall 2:Serial.println ("Montag"); brechen; Fall 3:Serial.println ("Dienstag"); brechen; Fall 4:Serial.println ("Mittwoch"); brechen; Fall 5:Serial.println ("Donnerstag"); brechen; Fall 6:Serial.println ("Freitag"); brechen; Fall 7:Serial.println ("Samstag"); brechen; }}void loop () { displayTime (); // Anzeige der Echtzeituhrdaten auf dem seriellen Monitor, Verzögerung (1000); // jede Sekunde}
LiquidCrystal_PCF8574.h
erforderliche Bibliothek, unter Skizze, Bibliothek einschließen und .zip hinzufügen, dann auswählen, wo die Zip heruntergeladen wurdehttps://github.com/mathertel/LiquidCrystal_PCF8574
RTClib.h
Bibliothek, Echtzeituhr, entpacken Sie zuerst die Zip-Datei. Fügen Sie dann die verbleibende ZIP-Datei zu Ihrer Bibliothek hinzuhttps://github.com/mechasolution/RTClib.h

Schaltpläne

A5 nach SCL
A4 nach SDA
5 Volt zu VCC
GND zu GND gelbes Kabel an A1
schwarzes Kabel an GND
rotes Kabel an 5 Volt mit dem PC verbinden und die korrekte Leistung bestätigen

Herstellungsprozess

  1. Arduino Digital Dice
  2. Arduino-Gamecontroller
  3. LCD-Animation und -Spiele
  4. Smarte Schuhe (automatische Schnürung und Stromerzeugung)
  5. BME280 Temperatur, Luftfeuchtigkeit und Druck auf dem Nextion-Display
  6. Sonar mit Arduino und Anzeige bei der Verarbeitung von IDE
  7. Pixel-Chaser-Spiel
  8. DIY Einfaches Messrad mit Drehgeber
  9. Steuerung der LED-Helligkeit mit Bolt und Arduino
  10. Pneumatische Sicherheitskomponenten und wo sie angewendet werden