Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Sensor de Pressão e Data Logger Baseado em Arduino para Monitoramento Preciso da Pressão do Ar

Componentes e Materiais

ComponenteQuantidade
Arduino UNO1
Cartão SD Delkin Commercial MLC1
Sensor de pressão SKU2375451
Data logger RTC (Relógio de Tempo Real)1
Display LCD I2C1
Caixa de projeto plástica à prova d'água 158 x 90 x 60 mm1
Parafusos sextavados M3 de nylon preto (300 unidades)1
Fios Dupont multicoloridos (120 unidades)1

Aplicativos e Serviços Online

Sobre o Projeto

Este projeto surgiu da necessidade de registrar a pressão do ar em um reservatório para verificar a eficiência de um compressor mecânico.

Ajuda de George Kontaxis: Vídeo de referência

O display mostra a data e a pressão em bar e PSI.

Medidor de Pressão Arduino – Leitura de 3 Pressões

Código

Sensor de Pressão SKU237545 com LCD, Relógio de Tempo Real e Data Logging

//criado em 12 de agosto de 2018 por Philip Blayney & Jack Davidson usando código de George Kontaxis para o Sensor de Pressão SKU237545
//https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be
#include "LiquidCrystal_PCF8574.h"
#include "RTClib.h" // relógio de tempo real
#include  // cartão SD
#define LCD_ADDRESS 0x27 // Define características do LCD
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255
// inicialização dos objetos
LiquidCrystal_PCF8574 lcdI2C;
RTC_DS1307 RTC; // define o objeto Real Time Clock
int n = 1;
int val;
// Um data logger simples para os pinos analógicos do Arduino
#define LOG_INTERVAL 1000 // milissegundos entre entradas (reduza para dados mais rápidos)
#define SYNC_INTERVAL 10000 // milissegundos entre chamadas a flush() - para gravar dados no cartão
uint32_t syncTime = 0; // tempo da última sincronização
const int chipSelect = 10; // para o shield de data logging, usamos o pino digital 10 para a linha CS do SD
File logfile;

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

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("leitura de pressão do SENSOR SKU237545"));
  lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
  lcdI2C.print(F("SENSOR SKU237545"));
  lcdI2C.setCursor(0,1);
  lcdI2C.print(F(" bar e psi "));
  delay(2000);
  // inicializa o cartão SD
  Serial.print(F("Inicializando cartão SD..."));
  pinMode(10, OUTPUT);
  if (!SD.begin(chipSelect)) {
    error("Cartão falhou ou não está presente");
  }
  Serial.println(F("cartão inicializado."));
  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("não foi possível criar arquivo");
  }
  lcdI2C.clear();
  lcdI2C.setCursor(0,0);
  lcdI2C.print(F("Arquivo Nº "));
  lcdI2C.print(filename);
  Serial.print(F("Registrando em: "));
  Serial.println(filename);
  // conecta ao RTC
  if (!RTC.begin()) {
    logfile.println("RTC falhou");
    Serial.println(F("RTC falhou"));
  }
  logfile.println("Data / Hora ,pressão ,bar ,leitura ,psi,leitura");
  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; // calibrar aqui
  float pressure_bar = pressure_pascal / 10e5;
  float pressure_psi = pressure_bar * 14.5038;
  Serial.print("Pressão = ");
  Serial.print(pressure_bar);
  Serial.print(" bars ");
  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(" Pressão = ");
  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);
}

Configuração do Relógio de Tempo Real

//Código por 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);
  // defina a hora inicial aqui:
  // DS3231 segundos, minutos, horas, dia, data, mês, ano
  setDS3231time(00,43,14,3,14,8,18); // defina a hora desejada aqui
}
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(" Dia da semana: ");
  switch(dayOfWeek){
    case 1: Serial.println("Domingo"); break;
    case 2: Serial.println("Segunda"); break;
    case 3: Serial.println("Terça"); break;
    case 4: Serial.println("Quarta"); break;
    case 5: Serial.println("Quinta"); break;
    case 6: Serial.println("Sexta"); break;
    case 7: Serial.println("Sábado"); break;
  }
}
void loop() {
  displayTime();
  delay(1000);
}

Bibliotecas Necessárias

Esquemáticos

Conexões I2C:

Conexões do sensor de pressão:

Conecte ao PC e confirme o funcionamento correto.

Processo de manufatura

  1. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  2. Controle USB para Jogos DIY com Arduino – Construa Seu Próprio Gamepad de Alto Desempenho
  3. Crie Animações e Jogos Envolventes em LCD com Arduino UNO
  4. Tênis Inteligentes com Auto-Ajuste e Colheita de Energia Integrada
  5. Exibir Temperatura, Umidade e Pressão do BME280 em Touchscreen Nextion
  6. Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
  7. Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano
  8. Roda de Medição Precisa DIY com Arduino Nano e Encoder Rotativo
  9. Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
  10. Componentes de Segurança Pneumáticos: Aplicações-Chave e Orientação de Conformidade