热门
IPE排气阀门遥控器改到中控台按键
1 4 发布于 2021-07-24 00:47:46 只看楼主 热门标准
点击查看热门标准,热门算法维度通过账号健康度、浏览、评论、点赞、收藏、转发、反作弊等进行综合评判
修改帖子
买了遥控器控制的ipe排气, 用了一段时间发现遥控器很不方便, 想开的时候找不见, 想关的时候也摸不着, 反正就是不方便..

后来我就在小黄鱼上搜索了一下改阀门按键到中控台按键, 价格在600~1500不等, 大致侧面打听了一下, 就是需要吧原车的中控按键+遥控器发过去, 那边改完再邮回来, 总之挺麻烦, 而且还有个问题就是这个方案其实可能并不完美, 因为按键直接控制遥控器的时候, 遥控器发出去的射频解析出错导致阀门没开/关成功怎么办? 那到底是开了还是没开呢...
所以带着这个问题我就想了一下解决方案, 总结如下

1. 将控制盒上面LED的状态实时反馈到中控按钮的状态灯上 (这样可以直观的看到阀门状态)
2. 中控按键选个按钮来开关阀门 (具体就是让他模拟遥控器按键)
3. 既然是遥控器了, 肯定要解决供电问题, 
4. 中控按键状态灯貌似是5v, 电压需要一致才行 (为啥说是貌似呢, 因为我根本没去查资料...)

不知道怎么在帖子里面发视频, 我就发一些过程图片吧, 也没怎么拍照, 凑合看一下, 结合arduino源码看就懂了, 要是不懂可别乱搞... 搞坏了我可不赔哈, 我看看回头补个视频上来

材料&工具:
   烙铁+焊锡+松香... 
   arduino nano板*1
   公母头线*n
   蜂鸣器*1
   车载12v转5v转换电源*1
   可能还需要准备绝缘胶带 (或者热塑管, 因人而异, 反正保证不短路就行了)
   中控按键总成 (个人实在小黄鱼买的, 头铁的可以直接改原车的效果一样...)
   5v转3.3v ams原件*1 (用于遥控器供电)
   
--------------------------------------------------------------
测量了电磁阀:
蓝+, 黑-,11.45v

根据观察可得如下控制盒led状态指示:
开机红1亮
开阀门绿2亮
auto黄3亮


arduino nano 源码:
/*
 Name:ipeControl_arduino_nano.ino
 Created:2021/6/9 5:06:12
 Author:秋刀鱼
*/

#include <avr/wdt.h>

// 定义引脚
#define Btn_state13
#define Btn_CTL_on3
#define Btn_CTL_off5
#define Btn_CTL_auto4
#define _ADC_A1A1
#define light_2
#define _BUZZERA5

unsigned longg_t;
intg_OldState;
boolg_LastONorOFF;// 1 ON,2 OFF
boolg_bLongPressBeep;// 长按提醒

// the setup function runs once when you press reset or power the board
void setup () {
// 初始化串口,9600 波特率
Serial.begin (9600);
// 把按键引脚设置为输入
pinMode (Btn_state, INPUT);

// 把几个控制引脚设置为输出
pinMode (Btn_CTL_on, OUTPUT);
pinMode (Btn_CTL_off, OUTPUT);
pinMode (Btn_CTL_auto, OUTPUT);
pinMode (light_, OUTPUT);
pinMode (_ADC_A1, INPUT);
pinMode (_BUZZER, OUTPUT);
digitalWrite (_BUZZER, HIGH);

// 打印结果到串口
Serial.println ("setup end");
g_t = millis ();
g_OldState = 0;
g_LastONorOFF = false;
g_bLongPressBeep = false;

wdt_enable (WDTO_2S);
}

void buzzer_Di (unsigned long ms) {
digitalWrite (_BUZZER, LOW);
delay (ms);
digitalWrite (_BUZZER, HIGH);
}

// the loop function runs over and over again until power down or reset
void loop () {
// 读取输入引脚的值
int  State = digitalRead (Btn_state);
int nPressType = 0;// 1切换, 2长按

int value = 0;            //定义值为0,也可以在程序一开始定义
value = analogRead (_ADC_A1);  //使模拟信号输入的值为value
float val = value * (5.0 / 1023.0);   //由于模拟信号输入的值为0到1023的值,即为0到5v的值,这里可以转换一下
// Serial.println (val);    //输出该点的电平是多少

// 这里根据输入电压值来判断当前是否需要亮灯 和 当前阀门状态
// 其实这里只是简单的识别了阀门 开/关, auto并没有做额外的处理
if (val > 1) {
g_LastONorOFF = true;
digitalWrite (light_, HIGH);
} else {
g_LastONorOFF = false;
digitalWrite (light_, LOW);
}

// 长按时滴一声提醒
if ( State == 1 && g_t != 0 && g_bLongPressBeep == false) {
// 比较按下的时间
if (millis () - g_t > 1000) {
g_bLongPressBeep = true;
buzzer_Di (80); // 滴一声
Serial.println ("Long Press Beep");
}
}

// 得到一次成功的按键操作
if ( State == 1 && g_t == 0) {
// 记录按下的时间
g_t = millis ();
} else if ( State == 0 && g_t != 0) {
// 记录抬起的时间
if (millis () - g_t > 1000) {
nPressType = 2;
} else {
nPressType = 1;
}
g_t = 0;
g_bLongPressBeep = false;
}

// 根据按键类型进行操作
if (nPressType != 0) {
if (nPressType == 1) {
g_LastONorOFF = !g_LastONorOFF;
if (g_LastONorOFF == true) {
Serial.println ("on");
digitalWrite (Btn_CTL_on, HIGH);
buzzer_Di (30); // 滴一声
delay (200);
digitalWrite (Btn_CTL_on, LOW);
buzzer_Di (30); // 滴一声
} else {
Serial.println ("off");
digitalWrite (Btn_CTL_off, HIGH);
delay (200);
digitalWrite (Btn_CTL_off, LOW);
buzzer_Di (30); // 滴一声
}
}

if (nPressType == 2) {
Serial.println ("auto");
digitalWrite (Btn_CTL_auto, HIGH);
buzzer_Di (30); // 滴一声
delay (200);
digitalWrite (Btn_CTL_auto, LOW);
buzzer_Di (30); // 滴一声
delay (200);
buzzer_Di (30); // 滴一声
}
}
delay (10);
wdt_reset (); //复位
}



















  • 用车感受
最后编辑于2021-07-24 01:46:58
很抱歉,该主帖尚未满足精华帖15张图片要求,不能予以精华,更多精华标准点击此处查看
修改主帖
内容系网友发布,涉及安全和抄袭问题属于网友个人行为,不代表汽车之家观点,可联系客服删除。
举报
IP
回复
返回列表
1
前往
/1页
确认

更多> 精选帖子

更多> 精选视频

扫码下载
汽车之家APP

随时获取
最新汽车资讯