Так как занимаюсь по роду своей деятельности ремонтом плат от кондиционеров, манометричку с собой не ношу: занимает место в рюкзаке. Но часто возникает необходимость проверить давление в контуре, поэтому пришла идея сделать для себя небольшой приборчик с датчиками давления.
датчики давления NSK-BD050I-197 (макс измеряемое давление 50 Bar);
2 датчика температуры ds18b20 (привязаны по адресам!);
контроллер arduino pro mini (china clone естественно
), 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 датчики давления)
контроллер