Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Измерение и регистрация давления в Arduino

Компоненты и расходные материалы

Arduino UNO
× 1
Delkin Commercial MLC SD
× 1
датчик давления SKU237545
× 1
регистратор данных rtc
× 1
i2c lcd
× 1
Пластиковый электронный проектный бокс с водонепроницаемой прозрачной крышкой 158 x 90 x 60 мм
× 1
HALJIA 300Pcs M3 нейлоновый черный шестигранный винт
× 1
ELEGOO 120шт разноцветные провода Dupont
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Этот проект явился результатом желания регистрировать давление воздуха в резервуаре, чтобы проверить эффективность механического компрессора.

Помощь от Джорджа Контаксиса

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

Дисплей, показывающий дату и давление в барах и фунтах на квадратный дюйм

Манометр Arduino. чтение 3 давлений

Код

  • SKU237545 Датчик давления с ЖК-часами реального времени и функцией регистрации данных.
  • установка часов реального времени
SKU237545 Датчик давления с ЖК-часами реального времени и регистрацией данных C / C ++
 // создано 12 августа 2018 г. Филипом Блейни и Джеком Дэвидсоном с использованием кода Джорджа // Kontaxis для датчика давления SKU237545 // https://www.youtube.com/watch? v =AB7zgnfkEi4 &feature =youtu.be #include " LiquidCrystal_PCF8574.h "#include" RTClib.h "// часы реального времени # include  // SD-карта #define LCD_ADDRESS 0x27 // Определение характеристик ЖК-дисплея # определение LCD_ROWS 2 # определение LCD_COLUMNS 16 # определение SCROLL_DELAY 150 # определение BACKLIGHT 255 // инициализация объекта LiquidCrystal_PCF8574 lcdI2C; RTC_DS1307 RTC; // определение объекта "Часы реального времени" int n =1; int val; // Простой регистратор данных для аналоговых выводов Arduino #define LOG_INTERVAL 1000 // фрезерование между записями (уменьшите, чтобы принимать больше / быстрее данные) // сколько миллисекунд до постоянной записи зарегистрированных данных на диск // установите LOG_INTERVAL на писать каждый раз (самый безопасный) // установите значение 10 * LOG_INTERVAL для записи всех данных каждые 10 областей данных, вы можете потерять до // последних 10 операций чтения, если пропадет питание, но он потребляет меньше энергии и работает намного быстрее! #define SYNC_INTERVAL 10000 // мельницы между вызовами flush () - для записи данных на карту 600000 =10 минут suint32_t syncTime =0; // время последней sync () const int chipSelect =10; // для экрана регистрации данных мы используем цифровой вывод 10 для строки SD cs File logfile; void error (char * str) {Serial.print (F ("error:")); Serial.println (str);} установка void (void) {Serial.begin (9600); // запускаем последовательный порт Serial.println (F ("чтение давления от ДАТЧИКА SKU237545")); // F =макрос-функция для сохранения динамической памяти lcdI2C.begin (LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT); lcdI2C.print (F ("ДАТЧИК SKU237545")); lcdI2C.setCursor (0,1); lcdI2C.print (F («бар и фунт / кв. дюйм»)); задержка (2000); // инициализируем SD-карту Serial.print (F ("Инициализация SD-карты ...")); // убедитесь, что вывод выбора микросхемы по умолчанию установлен на // вывод, даже если вы его не используете:pinMode (10, OUTPUT); if (! SD.begin (chipSelect)) {// посмотрим, присутствует ли карта и может ли быть инициализирована:error («Карта вышла из строя или отсутствует»); } Serial.println (F ("карта инициализирована.")); char filename [] ="LOGGER00.CSV"; // создаем новый файл для (uint8_t i =0; i <100; i ++) {filename [6] =i / 10 + '0'; имя файла [7] =i% 10 + '0'; if (! SD.exists (filename)) {// открывать новый файл только в том случае, если он не существует logfile =SD.open (filename, FILE_WRITE); ломать; // выход из цикла! }} if (! logfile) {error ("не удалось создать файл"); } lcdI2C.clear (); lcdI2C.setCursor (0,0); lcdI2C.print (F («Номер файла»)); lcdI2C.print (имя файла); Serial.print (F («Вход в:»)); Serial.println (имя файла); // подключаемся к RTC if (! RTC.begin ()) {logfile.println ("RTC failed"); #if ECHO_TO_SERIAL Serial.println (F («Ошибка RTC»)); #endif // ECHO_TO_SERIAL} logfile.println ("Дата / время, давление, бар, чтение, psi, чтение"); задержка (5000); lcdI2C.clear (); // Очистить ЖК-экран.} 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 (Voltage); float pressure_pascal =(3.0 * ((float) Voltage-0.475)) * 1000000.0; // калибровка здесь float pressure_bar =pressure_pascal / 10e5; float pressure_psi =давление_бар * 14,5038; Serial.print ("Давление ="); Serial.print (давление_бар); Serial.print («бары»); Serial.print ("psi"); Серийный.печать (давление_фунт / кв.дюйм); Serial.println (); DateTime now; now =RTC.now (); // получаем время задержки ((LOG_INTERVAL -1) - (millis ()% LOG_INTERVAL)); // задержка на желаемый промежуток времени между показаниями SD-карты int H =now.hour (); // Получить часы прямо сейчас и сохранить их в виде целого числа h int M =now.minute (); // Получить минуты прямо сейчас и сохранить их в виде целого числа m int S =now.second (); // Получить секунды прямо сейчас и сохранить их в виде целого числа 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) {// При необходимости добавляем ноль, как указано выше 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); // 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) {// При необходимости добавляем ноль, как указано выше 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.year (), DEC); // на ЖК-дисплее недостаточно пробелов для отображения года // lcdI2C.print ("/"); lcdI2C.print (now.day (), DEC); lcdI2C.print ("/"); lcdI2C.print (сейчас .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 ("Давление ="); logfile.print (","); logfile.print (давление_бар); logfile.print (","); logfile.print («полоса»); logfile.print (","); logfile.print (давление_пси); logfile.print (","); logfile.print ("psi"); logfile.println (); если ((millis () - syncTime)  
установка часов реального времени C / C ++
 // Код по tronixstuff # include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Преобразование обычных десятичных чисел в двоично-десятичные байты 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); // установите начальное время здесь:// DS3231 секунды, минуты, часы, день, число, месяц, год setDS3231time (00,43,14,3,14,8,18); // устанавливаем здесь необходимое время} void setDS3231time (байт-секунда, байт-минута, байтовый час, байтовый деньOfWeek, bytedayOfMonth, байтовый месяц, байтовый год) {// устанавливает данные времени и даты в DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // устанавливаем следующий ввод для начала в регистре секунд Wire.write (decToBcd (second)); // устанавливаем секунды Wire.write (decToBcd (minute)); // устанавливаем минуты Wire.write (decToBcd (hour)); // устанавливаем часы Wire.write (decToBcd (dayOfWeek)); // устанавливаем день недели (1 =воскресенье, 7 =суббота) Wire.write (decToBcd (dayOfMonth)); // устанавливаем дату (от 1 до 31) Wire.write (decToBcd (month)); // установить месяц Wire.write (decToBcd (год)); // установить год (от 0 до 99) Wire.endTransmission ();} void readDS3231time (байт * секунда, байт * минута, байт * час, байт * dayOfWeek, byte * dayOfMonth, byte * month, byte * year) {Wire. beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // устанавливаем указатель регистра DS3231 на 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // запрашиваем семь байтов данных от DS3231, начиная с регистра 00h * second =bcdToDec (Wire.read () &0x7f); * минута =bcdToDec (Wire.read ()); * час =bcdToDec (Wire.read () &0x3f); * dayOfWeek =bcdToDec (Wire.read ()); * dayOfMonth =bcdToDec (Wire.read ()); * месяц =​​bcdToDec (Wire.read ()); * год =bcdToDec (Wire.read ());} void displayTime () {байтовая секунда, минута, час, день недели, день месяца, месяц, год; // получение данных из DS3231 readDS3231time (&секунда, &минута, &час, &dayOfWeek, &dayOfMonth, &month, &year); // отправляем его на серийный монитор Serial.print (час, DEC); // преобразование байтовой переменной в десятичное число при отображении Serial.print (":"); если (минута <10) {Serial.print ("0"); } Serial.print (минута, DEC); Serial.print (":"); если (второй <10) {Serial.print ("0"); } Serial.print (второй, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (месяц, DEC); Serial.print ("/"); Серийный принт (год, DEC); Serial.print ("День недели:"); переключатель (dayOfWeek) {случай 1:Serial.println ("Воскресенье"); ломать; случай 2:Serial.println («Понедельник»); ломать; случай 3:Serial.println («вторник»); ломать; случай 4:Serial.println («среда»); ломать; случай 5:Serial.println («четверг»); ломать; случай 6:Serial.println («Пятница»); ломать; case 7:Serial.println («суббота»); ломать; }} недействительный цикл () {displayTime (); // отображаем данные часов реального времени на последовательном мониторе, delay (1000); // каждую секунду} 
LiquidCrystal_PCF8574.h
требуемая библиотека, в эскизе, включите библиотеку и добавьте .zip, затем выберите, где был загружен zip https://github.com/mathertel/LiquidCrystal_PCF8574
RTClib.h
библиотека, часы реального времени, сначала разархивируйте zip. затем добавьте оставшийся zip-файл в свою библиотеку https://github.com/mechasolution/RTClib.h

Схема

От A5 до SCL
A4 в SDA
5 вольт на VCC
GND к GND желтый провод к A1
черный провод к GND
красный провод на 5 вольт подключитесь к компьютеру и подтвердите правильность работы

Производственный процесс

  1. Цифровые игральные кости Arduino
  2. Игровой контроллер Arduino
  3. ЖК-анимация и игры
  4. Умная обувь (автоматическая шнуровка и выработка электроэнергии)
  5. BME280 Температура, влажность и давление на дисплее Nextion
  6. Сонар с использованием Arduino и отображение при обработке IDE
  7. Игра Pixel Chaser
  8. Простое измерительное колесо с поворотным энкодером, сделанное своими руками
  9. Управление яркостью светодиода с помощью Bolt и Arduino
  10. Компоненты пневматической безопасности и их применение