【脑洞大赛】第四组-52Pi团队-爆改助动车

2016-07-2415.4万
精华项目
AI 快速预览详细 收起
该项目名为“爆改助动车”,旨在解决电动车无声和尾灯昏暗的问题。团队使用了Arduino Pro Mini、MP3播放模块和8x8 RGB点阵屏等硬件,通过简单的电路改造,实现了声音提示和灯光增强功能。最终效果显著提升了骑行安全性。


比赛还在如火如荼的进行着,我们需要大家的投票哦!哈哈
怒扫下面的 二维码,为第四组52Pi团队贡献你宝贵的一票哦!
【脑洞大赛】第四组-52Pi团队-爆改助动车图34

---------------------------------------------------------------------------------------------正文-------------------------------------------------------------------------------------------------------------
Hi 大家好! 我是骑驴玩儿漂移,我们的脑洞大赛的项目内容是: 爆改助动车
由于我们的团队的老邓同学倡导绿色出行,一直都骑助动车上班(家理公司近好不好,像我得开车一个小时你试着骑一下助动车?---我的内心戏,你们别在意)。言归正传,他骑行的过程中遇到很多问题,一个就是因为是电动车,所以基本没有声音(无声的痛点), 第二个就是我有次晚上在他后面开车发现他的尾灯好昏暗,如果不仔细看都看不清楚。(灯暗)
两个痛点直接暴露了安全隐患。
1. 无声
2. 灯暗

当和他聊起这个事情的时候,他的脑洞突然出现了N次元的塌方,在我们合计后决定,爆改电动车(其实就只是获取了信号线的信号做判断而已,然后用语音播放模块按需播放即可)
我们的脑洞瞬间被打开,大家讨论的改造计划如下:
1. 利用现有的电路板实现改造,手头有很多,Arduino,树莓派,爱迪生,最后考虑到空间的问题,决定用arduino pro mini。
2. 考虑到助动车的空间所以不做大的改动,基本上利用仪表盘下方的空间。
3. 用MP3播放模块结合小喇叭的功放板来实现声音的处理。
4. 为了增强灯光的提示效果,在车辆后部的靠背部分掏空加入一个8x8的RBG点阵屏(SPI方式,用线少)
5. 由于助动车电压比较高,达到48V左右,因此一般的开发板或者单片机都不能够直接连接,所以计算了需要降压的空间,将48V降压到18V 这里需要自制线圈。如图:
【脑洞大赛】第四组-52Pi团队-爆改助动车图1

18V主要是为了给功放供电,驱动喇叭。
然后通过DCDC模块直接将18V转换到5V,给arduino供电,MP3模块,点阵模块供电。
6. 编写arduino程序,做几个判断,判断左转信号,然后用二进制编码播放MP3模块中的对应左转音频MP3(所有音频都由老邓(女优,哦,不,是声优和我联合制作完成,制作软件:garageband for Mac)。

================================过程记录,时间紧任务重,我为大家看图说话=====================================
先上一张萌宝镇楼!
【脑洞大赛】第四组-52Pi团队-爆改助动车图17

------------------------------------------------------------------------------------------------------------------------------------------------------
好了,来吧,看这里!
电路部分:
【脑洞大赛】第四组-52Pi团队-爆改助动车图5
这是信号转接板,由大熊同学手焊洞洞板

【脑洞大赛】第四组-52Pi团队-爆改助动车图6

正面列队。。。
【脑洞大赛】第四组-52Pi团队-爆改助动车图18

这是降压模块,别看洞洞板的样子,难看但是实用,我们已经过了只看外表的年纪。。哈哈
【脑洞大赛】第四组-52Pi团队-爆改助动车图19

核心控制板,arduino pro mini
【脑洞大赛】第四组-52Pi团队-爆改助动车图20

点阵屏,手工取模,各种测试后,写出了转向的代码。展示的时候,是不是很有爱。
【脑洞大赛】第四组-52Pi团队-爆改助动车图21

降压板的后背,看看风骚的走位。是不是有种醉了的感觉?
【脑洞大赛】第四组-52Pi团队-爆改助动车图22

测试时候,这个5w的小喇叭很给力,声音也不会爆音,真是物有所值。
两个游戏机按键被拿来征用了。
【脑洞大赛】第四组-52Pi团队-爆改助动车图23

测试前一定要用万用表测试电压哦。
【脑洞大赛】第四组-52Pi团队-爆改助动车图24

期间测试烧掉一个板子,连夜鸡血中,继续焊接。。
【脑洞大赛】第四组-52Pi团队-爆改助动车图27

我知道大熊内心是崩溃的。
【脑洞大赛】第四组-52Pi团队-爆改助动车图26

继续重新来。
终于,嗒哒~~
【脑洞大赛】第四组-52Pi团队-爆改助动车图28

看着这个灯,我们眼前出现了希望。。。。是不是太文艺了不太好?
【脑洞大赛】第四组-52Pi团队-爆改助动车图29

第一版测试的程序中,是个×,不停的闪,让人有种要从后面补一刀的感觉。。
你笑什么,我知道你邪恶了,这不是菊花,谢谢。
【脑洞大赛】第四组-52Pi团队-爆改助动车图30

基础测试通过后,开始爆拆老邓的助动车。
【脑洞大赛】第四组-52Pi团队-爆改助动车图31

拆开发现,我勒个去,这是盘丝洞么? 白晶晶在不在?约吗?
让他们搞线路,我去处理尾灯:
【脑洞大赛】第四组-52Pi团队-爆改助动车图32

按照点阵的大小先开个孔。
【脑洞大赛】第四组-52Pi团队-爆改助动车图33

装好了点阵就是这样咯。是不是很带感啊?
【脑洞大赛】第四组-52Pi团队-爆改助动车图25

通上电测试,恩,很不错,线缆长了记得加个电容哦。
【脑洞大赛】第四组-52Pi团队-爆改助动车图7

这不是搞基,什么叫team work? 这就是哦!
【脑洞大赛】第四组-52Pi团队-爆改助动车图8

你接线来我来调试程序。。
【脑洞大赛】第四组-52Pi团队-爆改助动车图13

一个忧伤的程序猿。。。
【脑洞大赛】第四组-52Pi团队-爆改助动车图10

动动手来动动脚,这个特殊模式按钮还是我来做吧。
【脑洞大赛】第四组-52Pi团队-爆改助动车图11

蘑菇云的工具就是多,各种钻,各种打磨。。哈哈
【脑洞大赛】第四组-52Pi团队-爆改助动车图16

装好就是这样,是不是萌萌哒?
【脑洞大赛】第四组-52Pi团队-爆改助动车图14

艾玛,盘丝洞二度开放,都难不倒我们,来来来,一起暴力组合一下。
哎,哪里怎么多出了4个螺丝?
大熊: 没事儿,多出来就丢了吧。
老邓:。。。。。。。
骑驴玩儿漂移: 老邓,骑车有风险,自己保重。。
【脑洞大赛】第四组-52Pi团队-爆改助动车图15


后面怎么样了啊?
六年级很认真的在整理后面尾灯。哈哈
【脑洞大赛】第四组-52Pi团队-爆改助动车图9

大熊微调。。。各种微调。。
【脑洞大赛】第四组-52Pi团队-爆改助动车图12

最后: 看看刹车效果:

【脑洞大赛】第四组-52Pi团队-爆改助动车图2
转向灯效果:
【脑洞大赛】第四组-52Pi团队-爆改助动车图3
前进过程中的示廓灯效果。哈哈
【脑洞大赛】第四组-52Pi团队-爆改助动车图4

是不是已经急着想要动手也做一个了?
来来来,奉上代码如下:
  1. /*
  2.    8*8点整屏幕和音效的驱动
  3.    via:井底添蛙 & 骑驴玩儿漂移
  4.    编写时间:20160723
  5. */
  6. #define CLK 13                //绿色
  7. #define MO  11                 //白色
  8. #define CS  10                  //黑色
  9. #define BUZZER  A0              //喇叭
  10. #define BREAK   A3              //刹车
  11. #define modePin       8        //模式引脚
  12. #define micA1  3               //arduino与语音模块对应的引脚
  13. #define micA2  4
  14. #define micA3  5
  15. #define micA4  6
  16. #define micA5  7
  17. int modeState = 0;               //定义模式初始状态,总共3个模式,0,1,2  分别为:静音模式, 老邓模式,逗逼模式
  18. long modeStateChangeTime = 0;    //定义模式状态变化初始值
  19. long musicPlayTime1 = 0;         //不能改,控制信号语音及时播报相关
  20. long musicPlayTime = 0;
  21. const byte interruptPin = 2;   //中断检测引脚
  22. volatile byte state = LOW;     //中断默认状态
  23. int button_all = 1;
  24. /* 点阵缓存变量 */
  25. unsigned char LED_Buffer[3][8] = {
  26.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  //RED
  27.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  //GREEN
  28.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  //BLUE
  29. };
  30. unsigned char LED_bmp[][8] = {
  31.   0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, //叉
  32.   0x18, 0x3c, 0x7e, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, //箭头
  33.   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  //停止红灯全亮
  34.   0x8, 0xC, 0xFE, 0xFF, 0xFF, 0xFE, 0xC, 0x8,
  35. };
  36. char LED_SendByte(char data)
  37. {
  38.   int x;
  39.   for (x = 0; x < 8; x++)
  40.   {
  41.     digitalWrite(MO, 0x80 & (~(data << x)));
  42.     digitalWrite(CLK, LOW);
  43.     digitalWrite(CLK, HIGH);
  44.   }
  45. }
  46. void LED_Reload() //不停的刷新LED_Buffer显示
  47. {
  48.   int x, y;
  49.   char z = 0x01;
  50.   for (y = 0; y < 30; y++)
  51.   {
  52.     for (x = 0; x < 8; x++)
  53.     {
  54.       digitalWrite(CS, LOW);
  55.       LED_SendByte(LED_Buffer[0][x]); //r
  56.       LED_SendByte(LED_Buffer[2][x]); //g
  57.       LED_SendByte(LED_Buffer[1][x]); //b
  58.       LED_SendByte(~(z << x));      //seg
  59.       digitalWrite(CS, HIGH);
  60.       delay(1);
  61.     }
  62.   }
  63. }
  64. void LED_black() //关闭显示
  65. {
  66.   digitalWrite(CS, LOW);
  67.   LED_SendByte(0x00);
  68.   LED_SendByte(0x00);
  69.   LED_SendByte(0x00);
  70.   LED_SendByte(0x00);
  71.   digitalWrite(CS, HIGH);
  72. }
  73. void LED_BufferClear() //清除Buffer
  74. {
  75.   int x, y;
  76.   LED_black();
  77.   for (x = 0; x < 3; x++)
  78.   {
  79.     for (y = 0; y < 8; y++)
  80.     {
  81.       LED_Buffer[x][y] = 0x00;
  82.     }
  83.   }
  84. }
  85. /*  模式0 为关闭,模式1 为老邓模式  模式2 为逗逼模式
  86.     歌谱里面的:
  87.     模式1
  88.     1.启动引擎
  89.     2.行驶音
  90.     3.左拐了
  91.     4.右拐了
  92.     5.刹车
  93.     6.让-让
  94.     模式2
  95. */
  96. void turn_left()                    //左拐: 左拐了  第三首歌
  97. {
  98.   digitalWrite(micA1, LOW);
  99.   digitalWrite(micA2, LOW);
  100.   delay(50);
  101.   digitalWrite(micA1, HIGH);
  102.   digitalWrite(micA2, HIGH);
  103. }
  104. void turn_right()
  105. {
  106.   digitalWrite(micA3, LOW);          //右拐: 右拐了  第四首歌
  107.   delay(50);
  108.   digitalWrite(micA3, HIGH);
  109. }
  110. void stopped()                     //刹车: 老邓哎呀妈呀  第五首歌
  111. {
  112.   digitalWrite(micA1, LOW);
  113.   digitalWrite(micA3, LOW);
  114.   delay(50);
  115.   digitalWrite(micA1, HIGH);
  116.   digitalWrite(micA3, HIGH);
  117. }
  118. void buzzer()                        //喇叭:让一让 第六首歌
  119. {
  120.   digitalWrite(micA2, LOW);
  121.   digitalWrite(micA3, LOW);
  122.   delay(50);
  123.   digitalWrite(micA2, HIGH);
  124.   digitalWrite(micA3, HIGH);
  125. }
  126. void backgroundMusic()
  127. {
  128.   digitalWrite(micA2, LOW);
  129.   delay(50);
  130.   digitalWrite(micA2, HIGH);
  131. }
  132. void musicMode()
  133. {
  134.   switch (modeState) {
  135.     case 0:
  136.       {
  137.         digitalWrite(micA1, LOW);      //第七首歌,报模式 0
  138.         digitalWrite(micA2, LOW);
  139.         digitalWrite(micA3, LOW);
  140.         delay(50);
  141.         digitalWrite(micA1, HIGH);
  142.         digitalWrite(micA2, HIGH);
  143.         digitalWrite(micA3, HIGH);
  144.       } break;
  145.     case 1:
  146.       {
  147.         digitalWrite(micA4, LOW);      //第八首歌,报模式 1
  148.         delay(50);
  149.         digitalWrite(micA4, HIGH);
  150.       } break;
  151.     case 2:
  152.       {
  153.         digitalWrite(micA1, LOW);       // 第九首歌,报模式 2
  154.         digitalWrite(micA4, LOW);
  155.         delay(50);
  156.         digitalWrite(micA1, HIGH);
  157.         digitalWrite(micA4, HIGH);
  158.       } break;
  159.     default:
  160.       break;
  161.   }
  162. }
  163. void setup() {
  164.   Serial.begin(9600); //串口初始化
  165.   //pinMode(interruptPin, INPUT_PULLUP);           //定义中断引脚,并上拉
  166.   // attachInterrupt(digitalPinToInterrupt(interruptPin), stateChange, LOW);          //初始化中断函数
  167.   pinMode(A0, INPUT_PULLUP);  //定义控制信号引脚
  168.   pinMode(A1, INPUT_PULLUP);
  169.   pinMode(A2, INPUT_PULLUP);
  170.   pinMode(A3, INPUT_PULLUP);
  171.   pinMode(modePin, INPUT_PULLUP);         //初始化模式控制引脚
  172.   pinMode(CLK, OUTPUT);                  //初始化点阵控制引脚
  173.   pinMode(MO, OUTPUT);
  174.   pinMode(CS, OUTPUT);
  175.   digitalWrite(CS, HIGH);
  176.   digitalWrite(CLK, HIGH);
  177.   digitalWrite(MO, HIGH);
  178.   LED_black();                        // 初始化8x8点阵
  179.   for (int m = 3; m <= 7; m++)        //初始化音乐播放引脚
  180.   {
  181.     pinMode(m, OUTPUT);
  182.     digitalWrite(m, HIGH);
  183.   }
  184.   delay(1000);                      //语音模块开机需要1秒,等待它一下
  185.   digitalWrite(micA1, LOW);             //开机声音
  186.   delay(50);
  187.   digitalWrite(micA1, HIGH);
  188.   delay(5000);
  189. }
  190. void loop() {
  191.   if ((digitalRead(modePin) == 0) & ((millis() - modeStateChangeTime) >= 3000))  //判断模式
  192.   {
  193.     modeStateChangeTime = millis();
  194.     modeState++;
  195.     if (modeState > 2)modeState = 0;
  196.     Serial.print("modeStateChange =");
  197.     Serial.println(modeState);
  198.     // musicMode();
  199.   }
  200.   if ((millis() - musicPlayTime) >= 2600 )
  201.   {
  202.     backgroundMusic();  //背景音乐 突突突
  203.     musicPlayTime = millis();
  204.     Serial.println("backgroundMusic !");
  205.   }
  206.   LED_BufferClear();
  207.   for (int x = 0; x < 8; x++)
  208.   {
  209.     LED_Buffer[2][x] = LED_bmp[3][x];
  210.   }
  211.   LED_Reload();
  212.   LED_black();
  213.   delay(200);
  214.   while (analogRead(A0) < 300)   //如果低电平,喇叭就响了
  215.   {
  216.     Serial.println("A0 !");
  217.     if ((millis() - musicPlayTime1) >= 5000 )
  218.     {
  219.       musicPlayTime1 = millis();
  220.       buzzer();
  221.     }
  222.   }
  223.   while (analogRead(A1) < 300)   // 左转状态,左转灯,左拐了音效
  224.   {
  225.     Serial.println("A1 !");
  226.     if ((millis() - musicPlayTime1) >= 5000 )
  227.     {
  228.       musicPlayTime1 = millis();
  229.       turn_left();
  230.     }
  231.     LED_BufferClear();
  232.     delay(200);
  233.     for (int x = 0; x < 8; x++)
  234.     {
  235.       LED_Buffer[1][x] = LED_bmp[1][7 - x];
  236.     }
  237.     LED_Reload();
  238.   }
  239.   while (analogRead(A2) < 300)    //右转状态,左转灯, 右拐了音效
  240.   {
  241.     Serial.println("A2 !");
  242.     if ((millis() - musicPlayTime1) >= 5000 )
  243.     {
  244.       musicPlayTime1 = millis();
  245.       turn_right();   //右转先放音乐
  246.     }
  247.     LED_BufferClear();
  248.     delay(200);
  249.     for (int x = 0; x < 8; x++)    //然后刷点阵buffer
  250.     {
  251.       LED_Buffer[1][x] = LED_bmp[1][x];
  252.     }
  253.     LED_Reload();
  254.   }
  255.   while (analogRead(A3) < 300 )    //刹车
  256.   {
  257.     Serial.println("A3 !  ");
  258.     if ((millis() - musicPlayTime1) >= 3000 )
  259.     {
  260.       musicPlayTime1 = millis();
  261.       stopped();
  262.     }
  263.     LED_BufferClear();
  264.     delay(200);
  265.     for (int x = 0; x < 8; x++)
  266.     {
  267.       LED_Buffer[0][x] = LED_bmp[2][x];
  268.     }
  269.     LED_Reload();
  270.   }
  271.   musicPlayTime1 = 0;
  272.   LED_black();
  273. }
复制代码

好了,赶紧去DFrobot买好模块,开创你的脑洞吧!!!哈哈
技术问题可以和我们52pi团队交流哦!知无不言,言无不尽哈!
我是骑驴玩儿漂移,一个集好基友于一身的重口味脑洞小清新。。。来猛戳下面的链接看视频介绍哈!!!
------------------------------------------------------------------------------------------------------------------------------
大家可以拿出你的手机,怒刷下面的二维码帮忙我们投票哦!
我们是四号52Pi 团队哦!





42A32FE6B7ABDB93792F72C243722288.jpg (80.88 KB, 下载次数: 10791)

爆改助动车 · Arduino Pro Mini_image_3.webp

IMG_5761.JPG (86.46 KB, 下载次数: 10653)

爆改助动车 · Arduino Pro Mini_image_6.webp

IMG_5787 2.JPG (92.65 KB, 下载次数: 10899)

爆改助动车 · Arduino Pro Mini_image_9.webp

IMG_5787(1).jpg (92.65 KB, 下载次数: 10874)

爆改助动车 · Arduino Pro Mini_image_12.webp

605ED114F6786696A1C9210E72240486.jpg (103.28 KB, 下载次数: 10690)

爆改助动车 · Arduino Pro Mini_image_15.webp

7306316DF244AFBE2ABE61B8F47F83C3.jpg (133.18 KB, 下载次数: 10674)

爆改助动车 · Arduino Pro Mini_image_18.webp

电路图.jpg (87.83 KB, 下载次数: 10653)

爆改助动车 · Arduino Pro Mini_image_21.webp

AE949E8422D7D31ABD6769BCDCC54F22.jpg (95.64 KB, 下载次数: 10741)

爆改助动车 · Arduino Pro Mini_image_24.webp

E6F64FDE1E7E9BCA1DF373AC8A7C226F.jpg (96.41 KB, 下载次数: 10835)

爆改助动车 · Arduino Pro Mini_image_27.webp

EE2010B92EAEF4B5963BF7B2F16FAA73.jpg (100.8 KB, 下载次数: 10883)

爆改助动车 · Arduino Pro Mini_image_30.webp

FD3BBF619AA467F4AF6BD7575058FAF5.jpg (130.27 KB, 下载次数: 10689)

爆改助动车 · Arduino Pro Mini_image_33.webp

FF7EC352E9C78F870E460DC2F37F450F.jpg (131.27 KB, 下载次数: 10725)

爆改助动车 · Arduino Pro Mini_image_36.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(12)
王子麒
王子麒
。。。。
yoyojacky
yoyojacky
作者

各种拉票啊!继续拉!
yoyojacky
yoyojacky
作者
再推广一次。
yoyojacky
yoyojacky
作者
我就发了12个2000人的qq大群,没想到这个病毒扩散效应这么猛。。。哈哈
其实最屌的还是美拍上兄弟给力啊。。。哈哈
TaterLi
TaterLi

微信扫描上车投第四个
accura
accura
我们两支队一起熬得夜,哈哈!记得赛前收集采访素材的时候我就说过喜欢蘑菇云第一的是这帮能用心动手做事的朋友,包含DF的朋友们和会员朋友们,这个朋友圈很赞;设备和环境排在第二车上那个黄按钮眼熟:lol
一起加油啊~
yoyojacky
yoyojacky
作者
回复accura
哈哈,是啊,三个队在熬夜哦。
还有梦立方的齐天大圣机器猫
哈哈
微笑的rockets
微笑的rockets
浏览量不决定比赛成绩的……
井底添蛙
井底添蛙
回复楼上reaprouu:
首先,很感谢您的评论,您发出这种评论说明您也是参赛成员,但我觉得您的评论是非常不负责的。
1、想必您并未仔细看参赛手册,或者您认为我们没有仔细看参赛手册,论坛帖子访问量似乎并不作为比赛计分参考;
2、我们并未刷浏览量,只是我们自己都觉得我们的作品很好玩,所已只是转发到了几十个群里分享了一下而已,好玩的东西不值得分享吗?至于浏览量,我们其实也很惊讶,如果真有疑问,麻烦去问问DF的IT,究竟访问量是如何来的;
3、作为参赛项目,我们只做我们能力范围内的,虽然中途遇到了不少问题,但我们留守了一夜调试直到问题解决,最后也按时完成了,因此对您的评论我个人很不满意。
4、这是我加入52Pi第一次参加比赛活动,我们团队每个人都很优秀,对于您的评论,呵呵。
reaprouu
reaprouu
只会刷分的有屌用
TaterLi
TaterLi回复reaprouu
...
yoyojacky
yoyojacky
作者
回复reaprouu
我们根本没有必要刷这个分,这个分数也不是评分标准,别激动。。。
微笑的rockets
微笑的rockets
我想说这个项目是最让人吃惊的了,本来觉得没有什么的项目,演示效果感人。
yoyojacky
yoyojacky
作者
回复微笑的rockets
哈哈,是不是我们声优的刹车声效太魔性?哈哈
楼上是二哈
楼上是二哈
卖不卖 100元包车卖不卖
yoyojacky
yoyojacky
作者
回复楼上是二哈
出门左转,他家99包邮。
yoyojacky
yoyojacky
作者
占个楼,回答问题
- 没有更多了 -