• Электронный манометр собственного производства 5 1
Текущий рейтинг:  

Электронный манометр собственного производства

Автор Тема: Электронный манометр собственного производства  (Прочитано 5744 раз)

0 Пользователей и 1 Гость просматривают эту тему.

ELECTRONOOB

  • Постоялец
  • ***
  • Сообщений: 151
  • Fujitsu - mhi - mdv
« Topic Start: 02 Декабря 2018, 19:52:01 »
 :) Так как занимаюсь по роду своей деятельности ремонтом плат от кондиционеров, манометричку с собой не ношу: занимает место в рюкзаке. Но часто возникает необходимость проверить давление в контуре, поэтому пришла идея сделать для себя небольшой приборчик с датчиками давления.


датчики давления NSK-BD050I-197 (макс измеряемое давление 50 Bar);
2 датчика температуры ds18b20 (привязаны по адресам!);
контроллер arduino pro mini (china clone естественно  8) ), oled дисплей i2c;

программный код для arduino:




#include <DallasTemperature.h>
#include "U8glib.h"
#include <OneWire.h>

OneWire oneWire(7); //вход датчиков температуры
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer1 = {0x28, 0xFF, 0x1C, 0x54, 0xA0, 0x16, 0x04, 0x12 };  // адрес датчика 1
DeviceAddress Thermometer2 = {0x28, 0xFF, 0xBF, 0x63, 0xA0, 0x16, 0x03, 0x22 }; // адрес датчика 2

//U8GLIB_SSD1306_128X64 u8g(10, 9,8); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11) Инициализация Дисплея
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI
  float p1;
  float p2;
  float hps=0;
  float lps=0;
  float temp1C=0;
  float temp2C=0;
 int x=0;
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here 
  //u8g.setFont(u8g_font_unifont);
  u8g.setFont(u8g_font_6x10);
 // u8g.setFont();
  //u8g_font_blipfest_07;
  u8g.setPrintPos(0,10);
  u8g.print("Temp/Pressure Device");
  u8g.drawLine(0,15,127,15);
  u8g.setPrintPos(0,30);
  u8g.print("Temperature1=");
  u8g.print(temp1C);
  u8g.write(176);
  u8g.setPrintPos(0,40);
  u8g.print("Low Pressure=");
  u8g.print(hps);
  u8g.print("Ba");
  u8g.setPrintPos(0,50);
  u8g.print("Temperature2=");
  u8g.print( temp2C);
  u8g.write(176);
  u8g.setPrintPos(0,60);
  u8g.print("High Pressure=");
  u8g.print(lps);
  u8g.print("Ba");
 
 }

void setup(void) {

  // flip screen, if required
  // u8g.setRot180();
 
  // set SPI backup if required
  //u8g.setHardwareBackup(u8g_backup_avr_spi);

  // assign default color value
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
 
 
}
void loop(void) {
  // picture loop
  u8g.firstPage();
  p1=analogRead(A0);
  p2=analogRead(A1);
  lps=12.5*((p1*5.0)/1023)-6.25;
  hps=12.5*((p2*5.0)/1023)-6.25;
  if (lps <= 0)
  lps=0;
  if (hps<=0)
  hps=0;
  sensors.requestTemperatures();
  temp1C=sensors.getTempC(Thermometer1);
  temp2C=sensors.getTempC(Thermometer2);
 
  do {
   
   
    draw();
  } while( u8g.nextPage() );
 
  // rebuild the picture after some delay
  //delay(50);
}

 это первый вариант прибора которым на данный момент пользуюсь я , далее коллегам делал варианты с TFT дисплеем 1.8'' цветным, выложу код и геребер файл на плату чуть позже)
Питание прибора организовано от «кроны» через линейный стабилизатор 78l05 ; в случае с TFT дисплеем требуется 3.3v ( питание подсветки ) то есть требуется ещё один стабилизатор на 3.3v ,использую ams1117




Код программы под  TFT дисплей

Добавил во вложение библиотеку для работы с TFT , строчку в коде UTFT myGLCD(ST7735_ALT, 11, 10, 9, 8, 12); //SDA;SCK;CS;RESET;A0 изменил на верную

#include <UTFT.h>
#include <DallasTemperature.h>
#include <OneWire.h>
OneWire oneWire(3); //вход датчиков температуры
DallasTemperature sensors(&oneWire);

DeviceAddress Thermometer1 = {0x28, 0xFF, 0x86, 0xD8, 0x31, 0x17, 0x04, 0x94 };  // адрес датчика 1
DeviceAddress Thermometer2 = {0x28, 0xFF, 0xF9, 0xA3, 0x31, 0x17, 0x03, 0x29 }; // адрес датчика 2

extern uint8_t BigFont[];
//extern uint8_t SevenSegNumFont[];


UTFT myGLCD(ST7735_ALT, 11, 13, 10, 8, 9); //SDA;SCK;CS;RESET;A0 // Remember to change the model parameter to suit your display module!


float p1;
float p2;
float hps = 0.0;
float lps = 0.0;
int x = 0;
int temp1C = 0;
int temp2C = 0;

void setup()
{
  myGLCD.InitLCD(PORTRAIT);
  myGLCD.setFont(BigFont );
  myGLCD.clrScr();

}
void draw(void)
{
 
  myGLCD.setColor(0, 255, 255);
  myGLCD.drawLine(1, 1, 127, 1);
  myGLCD.drawLine(1, 1, 1, 159);
  myGLCD.drawLine(127, 1, 127, 159);
  myGLCD.drawLine(1, 159, 127, 159);
  myGLCD.drawLine(1, 84, 127, 84);
  myGLCD.drawLine(1, 86, 127, 86);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.setColor(255, 0, 0);
  myGLCD.print("HP:", LEFT, 10);
  myGLCD.printNumF(hps, 1, RIGHT, 10, '.', 4);
  myGLCD.setColor(0, 255, 255 );
  myGLCD.print("LP:", LEFT, 50);
  myGLCD.printNumF(lps, 1, RIGHT, 50, '.', 4);
  myGLCD.setColor(0, 255, 0);
  myGLCD.print("T1", 7, 100);
  myGLCD.printNumI(temp1C, 50, 100, 4);
  myGLCD.setColor(255, 255, 0);
  myGLCD.print("T2", 7, 130);

  myGLCD.printNumI(temp2C, 50, 130, 4);

}
void loop()
{

  p1 = analogRead(A1);
  p2 = analogRead(A0);
  lps = 12.5 * ((p1 * 5.0) / 1023) - 6.25;
  hps = 12.5 * ((p2 * 5.0) / 1023) - 6.25;
  if (lps <= 0)
    lps = 0;
  if (hps <= 0)
    hps = 0;
  sensors.requestTemperatures();
  temp1C = sensors.getTempC(Thermometer1);
  temp2C = sensors.getTempC(Thermometer2);
  draw();
}

gerber во вложении

Cхема c TFT (jp1 дисплей, jp2 крона 9V , jp3 датчики температуры ds18b20, jp4 датчики давления)


 контроллер

Ремонт кондиционеров