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

Medição e registro de pressão do Arduino

Componentes e suprimentos

Arduino UNO
× 1
Delkin Commercial MLC SD
× 1
sensor de pressão SKU237545
× 1
data logger rtc
× 1
i2c lcd
× 1
Caixa de plástico para projeto eletrônico de capa transparente à prova d'água 158 x 90 x 60 mm
× 1
Parafuso sextavado preto HALJIA 300Pcs M3 Nylon preto
× 1
ELEGOO 120pcs Multicolored Dupont Wire
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Este projeto foi o resultado de se querer registrar a pressão do ar construída em um reservatório para verificar a eficiência de um compressor mecânico.

Ajuda de George Kontaxis

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

Display mostrando data e pressão em bar e PSI





Medidor de pressão Arduino. lendo 3 pressões

Código

  • SKU237545 Sensor de pressão com relógio lcd em tempo real e registro de dados
  • acertando o relógio em tempo real
SKU237545 Sensor de pressão com relógio lcd em tempo real e registro de dados C / C ++
 // criado em 12 de agosto de 2018 Philip Blayney e Jack Davidson usando o 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 em tempo real # include  // cartão SD # define LCD_ADDRESS 0x27 // Define as características do LCD # define LCD_ROWS 2 # define LCD_COLUMNS 16 # define SCROLL_DELAY 150 # define BACKLIGHT 255 // inicialização do objetoLiquidCrystal_PCF8574 lcdI2C; RTC_DS1307 RTC; // define o objeto Real Time Clockint n =1; int val; // Um ​​registrador de dados simples para os pinos analógicos do Arduino #define LOG_INTERVAL 1000 // moe entre as entradas (reduza para obter mais / dados mais rápidos) // quantos milissegundos antes de gravar os dados registrados permanentemente no disco // defina-o como LOG_INTERVAL para escreva cada vez (mais seguro) // defina-o para 10 * LOG_INTERVAL para escrever todos os dados a cada 10 cabeças de dados, você pode perder até // as últimas 10 leituras se houver falta de energia, mas usa menos energia e é muito mais rápido! #define SYNC_INTERVAL 10000 // moinhos entre chamadas para flush () - para gravar dados no cartão 600000 =10 minutesuint32_t syncTime =0; // hora da última sincronização () const int chipSelect =10; // para o escudo de registro de dados, usamos o pino digital 10 para a linha SD cs File logfile; void error (char * str) {Serial.print (F ("error:")); Serial.println (str);} configuração de vazio (vazio) {Serial.begin (9600); // inicia a porta serial Serial.println (F ("leitura de pressão desligada SENSOR SKU237545")); // F =função macro para salvar memória dinâmica lcdI2C.begin (LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT); lcdI2C.print (F ("SKU237545 SENSOR")); lcdI2C.setCursor (0,1); lcdI2C.print (F ("bar e psi")); atraso (2000); // inicializa o cartão SD Serial.print (F ("Inicializando o cartão SD ...")); // certifique-se de que o pino de seleção de chip padrão está configurado para // saída, mesmo se você não o usar:pinMode (10, OUTPUT); if (! SD.begin (chipSelect)) {// veja se o cartão está presente e pode ser inicializado:erro ("O cartão falhou ou não está presente"); } Serial.println (F ("cartão inicializado.")); nome do arquivo char [] ="LOGGER00.CSV"; // cria um novo arquivo para (uint8_t i =0; i <100; i ++) {nome do arquivo [6] =i / 10 + '0'; nome do arquivo [7] =i% 10 + '0'; if (! SD.exists (filename)) {// só abre um novo arquivo se ele não existir logfile =SD.open (filename, FILE_WRITE); pausa; // saia do loop! }} if (! arquivo de log) {erro ("não foi possível criar o arquivo"); } lcdI2C.clear (); lcdI2C.setCursor (0,0); lcdI2C.print (F ("Arquivo No")); lcdI2C.print (nome do arquivo); Serial.print (F ("Registro em:")); Serial.println (nome do arquivo); // conectar ao RTC if (! RTC.begin ()) {logfile.println ("RTC falhou"); #if ECHO_TO_SERIAL Serial.println (F ("RTC falhou")); #endif // ECHO_TO_SERIAL} logfile.println ("Data / Hora, pressão, bar, leitura, psi, leitura"); atraso (5000); lcdI2C.clear (); // Limpar tela LCD.} Void loop (void) {int sensorVal =analogRead (A1); // Serial.print ("Sensor Value:"); // Serial.print (sensorVal); float voltage =(sensorVal * 5.0 ) /1024.0; // Serial.print ("Volts:"); // Serial.print (tensão); float pressure_pascal =(3,0 * ((flutuante) voltagem-0,475)) * 1000000,0; // calibre aqui float pressure_bar =pressure_pascal / 10e5; float pressure_psi =pressure_bar * 14.5038; Serial.print ("Pressão ="); Serial.print (pressure_bar); Serial.print ("barras"); Serial.print ("psi"); Serial.print (pressure_psi); Serial.println (); DateTime agora; agora =RTC.now (); // busca o atraso de tempo ((LOG_INTERVAL -1) - (millis ()% LOG_INTERVAL)); // atrasar a quantidade de tempo que queremos entre as leituras do cartão SD int H =now.hour (); // Obtenha as horas agora e armazene-as em um inteiro chamado h int M =now.minute (); // Obtenha os minutos agora e armazene-os em um inteiro chamado m int S =now.second (); // Pega os segundos agora e armazena-os em um inteiro chamado s logfile.print (now.year (), DEC); logfile.print ("/"); logfile.print (now.month (), DEC); logfile.print ("/"); logfile.print (now.day (), DEC); logfile.print (""); if (H <10) {// Adicione um zero, se necessário, como acima logfile.print (0); } logfile.print (now.hour (), DEC); logfile.print (":"); if (M <10) {// Adicione um zero, se necessário, como acima logfile.print (0); } logfile.print (now.minute (), DEC); logfile.print (":"); if (S <10) {// Adicione um zero, se necessário, como acima 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) {// Adicione um zero, se necessário, como acima Serial.print (0);} Serial.print (now.hour (), DEC); Serial.print (":"); if (M <10) {// Adicione um zero, se necessário, como acima Serial. print (0);} Serial.print (now.minute (), DEC); Serial.print (F (":")); if (S <10) {// Adicione um zero, se necessário, como acima Serial .print (0);} Serial.print (now.second (), DEC); Serial.println (); lcdI2C.setCursor (0,0); lcdI2C.print (pressure_bar); // Imprimir string no LCD primeiro linha lcdI2C.print ("bar"); lcdI2C.print (pressure_psi); lcdI2C.print ("psi"); lcdI2C.setCursor (0,1); //lcdI2C.print (now.year (), DEC); // lcd não tem espaços de caracteres suficientes para mostrar o ano // lcdI2C.print ("/"); lcdI2C.print (now.day (), DEC); lcdI2C.print ("/"); lcdI2C.print (agora .month (), DEC); lcdI2C.print (""); if (H <10) {// Adicione um zero, se necessário, como acima lcdI2C.print (0); } lcdI2C.print (now.hour (), DEC); lcdI2C.print (":"); if (M <10) {// Adicione um zero, se necessário, como acima lcdI2C.print (0); } lcdI2C.print (now.minute (), DEC); lcdI2C.print (":"); if (S <10) {// Adicione um zero, se necessário, como acima lcdI2C.print (0); } lcdI2C.print (agora.segundo (), 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)  
configuração do relógio em tempo real C / C ++
 // Código por tronixstuff # include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Converter números decimais normais em decToBcd decToBcd (byte val) {return ((val / 10 * 16) + (val% 10) );} // Converter decimal codificado em binário em números decimais normais byte bcdToDec (byte val) {return ((val / 16 * 10) + (val% 16));} void setup () {Wire.begin (); Serial.begin (9600); // definir a hora inicial aqui:// DS3231 segundos, minutos, horas, dia, data, mês, ano setDS3231time (00,43,14,3,14,8,18); // definir a hora necessária aqui} void setDS3231time (byte segundo, byte minuto, byte hora, byte dayOfWeek, bytedayOfMonth, byte mês, byte ano) {// define data e hora para DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // define a próxima entrada para começar no registro de segundos Wire.write (decToBcd (second)); // definir segundos Wire.write (decToBcd (minuto)); // definir minutos Wire.write (decToBcd (hora)); // definir horas Wire.write (decToBcd (dayOfWeek)); // definir o dia da semana (1 =Domingo, 7 =Sábado) Wire.write (decToBcd (dayOfMonth)); // definir data (1 a 31) Wire.write (decToBcd (mês)); // definir o mês Wire.write (decToBcd (ano)); // definir ano (0 a 99) Wire.endTransmission ();} void readDS3231time (byte * segundo, byte * minuto, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * mês, byte * ano) {Wire. beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // define o ponteiro de registro DS3231 para 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // solicita sete bytes de dados do DS3231 a partir do registro 00h * segundos =bcdToDec (Wire.read () &0x7f); * minuto =bcdToDec (Wire.read ()); * hora =bcdToDec (Wire.read () &0x3f); * dayOfWeek =bcdToDec (Wire.read ()); * dayOfMonth =bcdToDec (Wire.read ()); * mês =bcdToDec (Wire.read ()); * ano =bcdToDec (Wire.read ());} void displayTime () {byte segundo, minuto, hora, dayOfWeek, dayOfMonth, month, year; // recuperar dados do DS3231 readDS3231time (&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // envia para o monitor serial Serial.print (hora, DEC); // converte a variável de byte em um número decimal quando exibida Serial.print (":"); if (minuto <10) {Serial.print ("0"); } Serial.print (minuto, DEC); Serial.print (":"); if (segundo <10) {Serial.print ("0"); } Serial.print (segundo, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (mês, DEC); Serial.print ("/"); Serial.print (ano, DEC); Serial.print ("Dia da semana:"); switch (dayOfWeek) {case 1:Serial.println ("Sunday"); pausa; caso 2:Serial.println ("segunda-feira"); pausa; caso 3:Serial.println ("terça-feira"); pausa; caso 4:Serial.println ("quarta-feira"); pausa; caso 5:Serial.println ("quinta-feira"); pausa; caso 6:Serial.println ("Friday"); pausa; caso 7:Serial.println ("sábado"); pausa; }} void loop () {displayTime (); // exibe os dados do relógio em tempo real no Monitor Serial, delay (1000); // a cada segundo} 
LiquidCrystal_PCF8574.h
biblioteca necessária, em esboço, inclua a biblioteca e adicione .zip, em seguida, selecione onde o zip foi baixadohttps://github.com/mathertel/LiquidCrystal_PCF8574
RTClib.h
biblioteca, relógio em tempo real, descompacte o zip primeiro. em seguida, inclua o arquivo zip restante em sua bibliotecahttps://github.com/mechasolution/RTClib.h

Esquemas

A5 para SCL
A4 para SDA
5 volts para VCC
GND para GND fio amarelo para A1
fio preto para GND
fio vermelho para 5 volts conecte ao pc e confirme o desempenho correto

Processo de manufatura

  1. Dados digitais Arduino
  2. Controlador de jogo Arduino
  3. Animação de LCD e jogos
  4. Sapatos inteligentes (com laço automático e geração de eletricidade)
  5. BME280 Temperatura, Umidade e Pressão na Tela Nextion
  6. Sonar usando arduino e exibição no IDE de processamento
  7. Jogo Pixel Chaser
  8. Roda de medição simples DIY com codificador rotativo
  9. Controle de brilho do LED usando Bolt e Arduino
  10. Componentes de segurança pneumática e onde aplicá-los