本帖最后由 yoyojacky 于 2016-7-26 10:37 编辑
比赛还在如火如荼的进行着,我们需要大家的投票哦!哈哈
怒扫下面的 二维码,为第四组52Pi团队贡献你宝贵的一票哦!
---------------------------------------------------------------------------------------------正文-------------------------------------------------------------------------------------------------------------
Hi 大家好! 我是骑驴玩儿漂移,我们的脑洞大赛的项目内容是: 爆改助动车
由于我们的团队的老邓同学倡导绿色出行,一直都骑助动车上班(家理公司近好不好,像我得开车一个小时你试着骑一下助动车?---我的内心戏,你们别在意)。言归正传,他骑行的过程中遇到很多问题,一个就是因为是电动车,所以基本没有声音(无声的痛点), 第二个就是我有次晚上在他后面开车发现他的尾灯好昏暗,如果不仔细看都看不清楚。(灯暗)
两个痛点直接暴露了安全隐患。
1. 无声
2. 灯暗
当和他聊起这个事情的时候,他的脑洞突然出现了N次元的塌方,在我们合计后决定,爆改电动车(其实就只是获取了信号线的信号做判断而已,然后用语音播放模块按需播放即可)
我们的脑洞瞬间被打开,大家讨论的改造计划如下:
1. 利用现有的电路板实现改造,手头有很多,Arduino,树莓派,爱迪生,最后考虑到空间的问题,决定用arduino pro mini。
2. 考虑到助动车的空间所以不做大的改动,基本上利用仪表盘下方的空间。
3. 用MP3播放模块结合小喇叭的功放板来实现声音的处理。
4. 为了增强灯光的提示效果,在车辆后部的靠背部分掏空加入一个8x8的RBG点阵屏(SPI方式,用线少)
5. 由于助动车电压比较高,达到48V左右,因此一般的开发板或者单片机都不能够直接连接,所以计算了需要降压的空间,将48V降压到18V 这里需要自制线圈。如图:
18V主要是为了给功放供电,驱动喇叭。
然后通过DCDC模块直接将18V转换到5V,给arduino供电,MP3模块,点阵模块供电。
6. 编写arduino程序,做几个判断,判断左转信号,然后用二进制编码播放MP3模块中的对应左转音频MP3(所有音频都由老邓(女优,哦,不,是声优和我联合制作完成,制作软件:garageband for Mac)。
================================过程记录,时间紧任务重,我为大家看图说话=====================================
先上一张萌宝镇楼!
------------------------------------------------------------------------------------------------------------------------------------------------------
好了,来吧,看这里!
电路部分:
这是信号转接板,由大熊同学手焊洞洞板
正面列队。。。
这是降压模块,别看洞洞板的样子,难看但是实用,我们已经过了只看外表的年纪。。哈哈
核心控制板,arduino pro mini
点阵屏,手工取模,各种测试后,写出了转向的代码。展示的时候,是不是很有爱。
降压板的后背,看看风骚的走位。是不是有种醉了的感觉?
测试时候,这个5w的小喇叭很给力,声音也不会爆音,真是物有所值。
两个游戏机按键被拿来征用了。
测试前一定要用万用表测试电压哦。
期间测试烧掉一个板子,连夜鸡血中,继续焊接。。
我知道大熊内心是崩溃的。
继续重新来。
终于,嗒哒~~
看着这个灯,我们眼前出现了希望。。。。是不是太文艺了不太好?
第一版测试的程序中,是个×,不停的闪,让人有种要从后面补一刀的感觉。。
你笑什么,我知道你邪恶了,这不是菊花,谢谢。
基础测试通过后,开始爆拆老邓的助动车。
拆开发现,我勒个去,这是盘丝洞么? 白晶晶在不在?约吗?
让他们搞线路,我去处理尾灯:
按照点阵的大小先开个孔。
装好了点阵就是这样咯。是不是很带感啊?
通上电测试,恩,很不错,线缆长了记得加个电容哦。
这不是搞基,什么叫team work? 这就是哦!
你接线来我来调试程序。。
一个忧伤的程序猿。。。
动动手来动动脚,这个特殊模式按钮还是我来做吧。
蘑菇云的工具就是多,各种钻,各种打磨。。哈哈
装好就是这样,是不是萌萌哒?
艾玛,盘丝洞二度开放,都难不倒我们,来来来,一起暴力组合一下。
哎,哪里怎么多出了4个螺丝?
大熊: 没事儿,多出来就丢了吧。
老邓:。。。。。。。
骑驴玩儿漂移: 老邓,骑车有风险,自己保重。。
后面怎么样了啊?
六年级很认真的在整理后面尾灯。哈哈
大熊微调。。。各种微调。。
最后: 看看刹车效果:
转向灯效果:
前进过程中的示廓灯效果。哈哈
是不是已经急着想要动手也做一个了?
来来来,奉上代码如下:
- /*
- 8*8点整屏幕和音效的驱动
- via:井底添蛙 & 骑驴玩儿漂移
- 编写时间:20160723
-
- */
-
- #define CLK 13 //绿色
- #define MO 11 //白色
- #define CS 10 //黑色
- #define BUZZER A0 //喇叭
- #define BREAK A3 //刹车
- #define modePin 8 //模式引脚
- #define micA1 3 //arduino与语音模块对应的引脚
- #define micA2 4
- #define micA3 5
- #define micA4 6
- #define micA5 7
-
- int modeState = 0; //定义模式初始状态,总共3个模式,0,1,2 分别为:静音模式, 老邓模式,逗逼模式
- long modeStateChangeTime = 0; //定义模式状态变化初始值
- long musicPlayTime1 = 0; //不能改,控制信号语音及时播报相关
- long musicPlayTime = 0;
-
- const byte interruptPin = 2; //中断检测引脚
- volatile byte state = LOW; //中断默认状态
- int button_all = 1;
-
- /* 点阵缓存变量 */
- unsigned char LED_Buffer[3][8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //RED
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //GREEN
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //BLUE
- };
- unsigned char LED_bmp[][8] = {
- 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, //叉
- 0x18, 0x3c, 0x7e, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, //箭头
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, //停止红灯全亮
- 0x8, 0xC, 0xFE, 0xFF, 0xFF, 0xFE, 0xC, 0x8,
-
- };
-
- char LED_SendByte(char data)
- {
- int x;
- for (x = 0; x < 8; x++)
- {
- digitalWrite(MO, 0x80 & (~(data << x)));
- digitalWrite(CLK, LOW);
- digitalWrite(CLK, HIGH);
- }
- }
-
- void LED_Reload() //不停的刷新LED_Buffer显示
- {
- int x, y;
- char z = 0x01;
- for (y = 0; y < 30; y++)
- {
- for (x = 0; x < 8; x++)
- {
- digitalWrite(CS, LOW);
- LED_SendByte(LED_Buffer[0][x]); //r
- LED_SendByte(LED_Buffer[2][x]); //g
- LED_SendByte(LED_Buffer[1][x]); //b
- LED_SendByte(~(z << x)); //seg
- digitalWrite(CS, HIGH);
- delay(1);
- }
- }
- }
-
- void LED_black() //关闭显示
- {
- digitalWrite(CS, LOW);
- LED_SendByte(0x00);
- LED_SendByte(0x00);
- LED_SendByte(0x00);
- LED_SendByte(0x00);
- digitalWrite(CS, HIGH);
- }
-
- void LED_BufferClear() //清除Buffer
- {
- int x, y;
- LED_black();
- for (x = 0; x < 3; x++)
- {
- for (y = 0; y < 8; y++)
- {
- LED_Buffer[x][y] = 0x00;
- }
- }
- }
- /* 模式0 为关闭,模式1 为老邓模式 模式2 为逗逼模式
- 歌谱里面的:
- 模式1
- 1.启动引擎
- 2.行驶音
- 3.左拐了
- 4.右拐了
- 5.刹车
- 6.让-让
- 模式2
- */
- void turn_left() //左拐: 左拐了 第三首歌
- {
- digitalWrite(micA1, LOW);
- digitalWrite(micA2, LOW);
- delay(50);
- digitalWrite(micA1, HIGH);
- digitalWrite(micA2, HIGH);
- }
-
- void turn_right()
- {
- digitalWrite(micA3, LOW); //右拐: 右拐了 第四首歌
- delay(50);
- digitalWrite(micA3, HIGH);
- }
-
- void stopped() //刹车: 老邓哎呀妈呀 第五首歌
- {
- digitalWrite(micA1, LOW);
- digitalWrite(micA3, LOW);
- delay(50);
- digitalWrite(micA1, HIGH);
- digitalWrite(micA3, HIGH);
- }
-
- void buzzer() //喇叭:让一让 第六首歌
- {
- digitalWrite(micA2, LOW);
- digitalWrite(micA3, LOW);
- delay(50);
- digitalWrite(micA2, HIGH);
- digitalWrite(micA3, HIGH);
- }
-
- void backgroundMusic()
- {
- digitalWrite(micA2, LOW);
- delay(50);
- digitalWrite(micA2, HIGH);
- }
-
- void musicMode()
- {
- switch (modeState) {
- case 0:
- {
- digitalWrite(micA1, LOW); //第七首歌,报模式 0
- digitalWrite(micA2, LOW);
- digitalWrite(micA3, LOW);
- delay(50);
- digitalWrite(micA1, HIGH);
- digitalWrite(micA2, HIGH);
- digitalWrite(micA3, HIGH);
- } break;
- case 1:
- {
- digitalWrite(micA4, LOW); //第八首歌,报模式 1
- delay(50);
- digitalWrite(micA4, HIGH);
- } break;
- case 2:
- {
- digitalWrite(micA1, LOW); // 第九首歌,报模式 2
- digitalWrite(micA4, LOW);
- delay(50);
- digitalWrite(micA1, HIGH);
- digitalWrite(micA4, HIGH);
- } break;
- default:
- break;
- }
- }
-
- void setup() {
- Serial.begin(9600); //串口初始化
-
- //pinMode(interruptPin, INPUT_PULLUP); //定义中断引脚,并上拉
- // attachInterrupt(digitalPinToInterrupt(interruptPin), stateChange, LOW); //初始化中断函数
-
- pinMode(A0, INPUT_PULLUP); //定义控制信号引脚
- pinMode(A1, INPUT_PULLUP);
- pinMode(A2, INPUT_PULLUP);
- pinMode(A3, INPUT_PULLUP);
-
- pinMode(modePin, INPUT_PULLUP); //初始化模式控制引脚
-
- pinMode(CLK, OUTPUT); //初始化点阵控制引脚
- pinMode(MO, OUTPUT);
- pinMode(CS, OUTPUT);
- digitalWrite(CS, HIGH);
- digitalWrite(CLK, HIGH);
- digitalWrite(MO, HIGH);
-
- LED_black(); // 初始化8x8点阵
-
- for (int m = 3; m <= 7; m++) //初始化音乐播放引脚
- {
- pinMode(m, OUTPUT);
- digitalWrite(m, HIGH);
- }
-
- delay(1000); //语音模块开机需要1秒,等待它一下
- digitalWrite(micA1, LOW); //开机声音
- delay(50);
- digitalWrite(micA1, HIGH);
- delay(5000);
- }
- void loop() {
-
- if ((digitalRead(modePin) == 0) & ((millis() - modeStateChangeTime) >= 3000)) //判断模式
- {
- modeStateChangeTime = millis();
- modeState++;
- if (modeState > 2)modeState = 0;
-
- Serial.print("modeStateChange =");
- Serial.println(modeState);
-
- // musicMode();
- }
-
- if ((millis() - musicPlayTime) >= 2600 )
- {
- backgroundMusic(); //背景音乐 突突突
- musicPlayTime = millis();
- Serial.println("backgroundMusic !");
- }
-
- LED_BufferClear();
- for (int x = 0; x < 8; x++)
- {
- LED_Buffer[2][x] = LED_bmp[3][x];
- }
- LED_Reload();
- LED_black();
- delay(200);
-
-
-
-
- while (analogRead(A0) < 300) //如果低电平,喇叭就响了
- {
- Serial.println("A0 !");
-
- if ((millis() - musicPlayTime1) >= 5000 )
- {
- musicPlayTime1 = millis();
- buzzer();
- }
- }
-
- while (analogRead(A1) < 300) // 左转状态,左转灯,左拐了音效
- {
- Serial.println("A1 !");
-
- if ((millis() - musicPlayTime1) >= 5000 )
- {
- musicPlayTime1 = millis();
- turn_left();
- }
-
- LED_BufferClear();
- delay(200);
- for (int x = 0; x < 8; x++)
- {
- LED_Buffer[1][x] = LED_bmp[1][7 - x];
- }
- LED_Reload();
- }
-
- while (analogRead(A2) < 300) //右转状态,左转灯, 右拐了音效
- {
- Serial.println("A2 !");
-
- if ((millis() - musicPlayTime1) >= 5000 )
- {
- musicPlayTime1 = millis();
- turn_right(); //右转先放音乐
- }
-
- LED_BufferClear();
- delay(200);
- for (int x = 0; x < 8; x++) //然后刷点阵buffer
- {
- LED_Buffer[1][x] = LED_bmp[1][x];
- }
- LED_Reload();
- }
-
- while (analogRead(A3) < 300 ) //刹车
- {
- Serial.println("A3 ! ");
-
- if ((millis() - musicPlayTime1) >= 3000 )
- {
- musicPlayTime1 = millis();
- stopped();
- }
-
- LED_BufferClear();
- delay(200);
- for (int x = 0; x < 8; x++)
- {
- LED_Buffer[0][x] = LED_bmp[2][x];
- }
- LED_Reload();
- }
- musicPlayTime1 = 0;
- LED_black();
- }
复制代码
好了,赶紧去DFrobot买好模块,开创你的脑洞吧!!!哈哈
技术问题可以和我们52pi团队交流哦!知无不言,言无不尽哈!
我是骑驴玩儿漂移,一个集好基友于一身的重口味脑洞小清新。。。来猛戳下面的链接看视频介绍哈!!!
------------------------------------------------------------------------------------------------------------------------------
大家可以拿出你的手机,怒刷下面的二维码帮忙我们投票哦!
我们是四号52Pi 团队哦!
|