该项目可用于监控油温和压力、水温、电压、燃油液位。通过nextion显示器或诺基亚lcd显示,以让你更直观的了解自己爱车的各项数值。
这次的项目中我们使用了一辆旧车,一辆toyotamr21990。
由于没有obd端口,并且需要测量油温和压力并报警异常值,因此我们决定使用arduinouno和诺基亚显示器从安装在汽车上的电阻传感器获取数据。
接下来是arduino输入板:op=油压;ot=油温;wt水温;v=伏特
再是用于lcd显示的程序:
#include u8glib.h
#define backlight_pin 9
int piezopin = 8; //8 digital pin the piezo buzzer is attached for alarm.
const int oiltemppin = a1; //analog pin
const int oilpressurepin = a2; //oil spacer temp and pressure
const int watertemppin = a3; // fitted in water hose after thermostat
const int voltpin = a4; // from acc
const int fuelpin = a5; //from dash fuel gauge
;
int ta = 130; //oiltmp alarm level over 130
float oa = 1.5; //oilpres alarm level under 1.5
int wa = 100; //watertmp alarm level over 100
float va = 12.0; //volts alarm under 12.0v
float fa = 5; //fuel alarm under 10
u8glib_pcd8544 u8g(13,11, 7, 5, 6); // clk=13, din=11, ce=7, dc=5, rst=6
void draw(void) {
float oiltempres = analogread(oiltemppin);//resistance value (432.667-resistance)/1.75
double oiltemp = (432.667 - oiltempres) /1.80;// 50c=347ohm 60=324 70=312 80c= 95c= 110= 120=
float watertempres = analogread(watertemppin);//resistance value (350.124-resistance)/1.25
double watertemp = (350.124 - watertempres) /1.25;// 40c=297ohm 50=287 60=276 70=263 80=250 90=233 fan on
float oilpresres = analogread(oilpressurepin);// 1= 2= 2.5=170 3=195 4=227 5=258 6=280 12.1v
float oilpressure = (98.5 - oilpresres) / -31.098; //
if (oilpressure ta) {u8g.drawstr(50, 8, # );tone(piezopin, 500,3000);analogwrite(backlight_pin,250);} //tone(pin,freq,duration)
u8g.setprintpos(55, 17);
u8g.print(oilpressure, 1);
u8g.drawstr(80, 17, % );
if ((oilpressure 13.0)) {u8g.drawstr(50, 17, # );tone(piezopin, 1000,3000);analogwrite(backlight_pin,250);}
u8g.setprintpos(55, 26);
u8g.print(watertemp, 0);
u8g.drawstr(80, 26, c );
if (watertemp > wa) {u8g.drawstr(50, 26, # );tone(piezopin, 1500,3000);analogwrite(backlight_pin,250);}
u8g.setprintpos(55, 35);
u8g.print(volts, 1);
u8g.drawstr(80, 35, v );
if (volts < va) {u8g.drawstr(50, 35, # );tone(piezopin, 2500,3000);analogwrite(backlight_pin,250);}
u8g.setprintpos(55, 44);
u8g.print(fuel, 0);
u8g.drawstr(80, 44, l );
if ((fuel 1)) {u8g.drawstr(50, 44, # );tone(piezopin, 3000,1000);analogwrite(backlight_pin,250);}
//used for testing only
//u8g.setprintpos(60, 44);
//u8g.print(fuel, 0);
//u8g.setprintpos(30, 44);
//u8g.print(oilpresres, 1);
//u8g.setprintpos(5, 44);
// u8g.print(watertempres, 0);
}
void setup(void) {
analogwrite(backlight_pin,20); /* set the backlight intensity */
}
void loop(void) {
u8g.firstpage();
do {
draw();
} while( u8g.nextpage() );
delay(1000); // update every 1000 = 1 sec
}
由于诺基亚显示屏变亮(灰色阴影)的问题,导致显示屏连接不良。最终我决定升级到nextion显示器,结果看起来也更好。
由于uno只有一个hardwareserial端口(引脚0/1),并且它与usb-serialuart共享,因此使用nextion显示器调试项目很痛苦,所以我们转到链接中的页面并按照说明进行操作,然后我们串行连接在引脚10,11上。
我的nextionhid的硬件连接:
+5v(红色):来自arduino板的5v
tx(蓝色):引脚10(softwareserialrx)
rx(黄色):引脚11(软件串行tx)
gnd(黑色):uno的gnd。
颜色是显示器附带的颜色,它带有一个微型分线板上的微型usb连接器。
nextion显示屏图片
超远距离传输,超低功耗,安信可LoRa全系列产品如何选购?
多传感器时空标定
核心网通过引入SCEF可以满足5G多样化业务的需求
都逃不过“真香定律”!搭载144Hz竞速屏的iQOO Neo3你猜多少钱
广东联通携手华为已完成了智能城域网综合业务承载的功能验证
如何利用NX4024K实现汽车警报监控系统的设计
社交应用程序ParlerCEO:禁令后所有供应商都放弃其公司
谈谈中国激光的技术升级之路
从入门到高手,电子工程师必备的15款工具!
《2019物联网行业100强》榜单新鲜出炉,SIMBOSS荣登100强
电池指示电路图解
钠离子电池制备上面临哪些挑战
讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题
3种常用的单片机晶振电路原理和作用图解
工信部:我国将加快无线通信网络业务创新应用
直流电机的功率如何增大
中国最优秀的IC设计企业TOP100最新名单出炉!(含传感器10强企业)
关于PCB各层的含义你都知道吗
模式带宽在光纤测试中的用途
通信基站是否会对信号屏蔽器的效果造成影响