149456浏览
查看: 149456|回复: 18

[2018参赛作品] 【脑洞大赛】第四组-52Pi团队-爆改助动车

[复制链接]
本帖最后由 yoyojacky 于 2016-7-26 10:37 编辑

比赛还在如火如荼的进行着,我们需要大家的投票哦!哈哈
怒扫下面的 二维码,为第四组52Pi团队贡献你宝贵的一票哦!
1B55EB6AFA88252C23DF0689D810A36C.png

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

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

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

================================过程记录,时间紧任务重,我为大家看图说话=====================================
先上一张萌宝镇楼!
IMG_5790.JPG

------------------------------------------------------------------------------------------------------------------------------------------------------
好了,来吧,看这里!
电路部分:
IMG_5656.JPG
这是信号转接板,由大熊同学手焊洞洞板

IMG_5657.JPG

正面列队。。。
3D5AA2B81C884E0D6D25CB893D226E7D.jpg

这是降压模块,别看洞洞板的样子,难看但是实用,我们已经过了只看外表的年纪。。哈哈
4A2C375ABDF0BC062DB88ED2CC055FEF.jpg

核心控制板,arduino pro mini
4BC100AB474C73F5043AB27F1BB05C3B.jpg

点阵屏,手工取模,各种测试后,写出了转向的代码。展示的时候,是不是很有爱。
6D5AECEE258397E9870550B0C1BC7DA8.jpg

降压板的后背,看看风骚的走位。是不是有种醉了的感觉?
8BDF0ADDDA76FCD6099E0F81CABC1D06.jpg

测试时候,这个5w的小喇叭很给力,声音也不会爆音,真是物有所值。
两个游戏机按键被拿来征用了。
9A0600B43DE58AA654571409773BF0FB.jpg

测试前一定要用万用表测试电压哦。
78F8E4355415218CCEAD3A77A1D3DA7E.jpg

期间测试烧掉一个板子,连夜鸡血中,继续焊接。。
9751B783A05BCA502F58D01BE50CB707.jpg

我知道大熊内心是崩溃的。
805B03B07F530096D391AA7067C4A3A4.jpg

继续重新来。
终于,嗒哒~~
30843545C82C4063902BBD3CB700969D.jpg

看着这个灯,我们眼前出现了希望。。。。是不是太文艺了不太好?
98777957581FDE9FCAF8F85F8441BFB5.jpg

第一版测试的程序中,是个×,不停的闪,让人有种要从后面补一刀的感觉。。
你笑什么,我知道你邪恶了,这不是菊花,谢谢。
BEE7D377AD61D4A95B162D018F60FFC6.jpg

基础测试通过后,开始爆拆老邓的助动车。
thumb_IMG_5304_1024.jpg

拆开发现,我勒个去,这是盘丝洞么? 白晶晶在不在?约吗?
让他们搞线路,我去处理尾灯:
thumb_IMG_5306_1024.jpg

按照点阵的大小先开个孔。
thumb_IMG_5307_1024 2.jpg

装好了点阵就是这样咯。是不是很带感啊?
87B2068C8153756B77BAF5430A1DEB60.jpg

通上电测试,恩,很不错,线缆长了记得加个电容哦。
IMG_5666.JPG

这不是搞基,什么叫team work? 这就是哦!
IMG_5717.JPG

你接线来我来调试程序。。
IMG_5784.JPG

一个忧伤的程序猿。。。
IMG_5727.JPG

动动手来动动脚,这个特殊模式按钮还是我来做吧。
IMG_5732.JPG

蘑菇云的工具就是多,各种钻,各种打磨。。哈哈
IMG_5789.JPG

装好就是这样,是不是萌萌哒?
IMG_5787.JPG

艾玛,盘丝洞二度开放,都难不倒我们,来来来,一起暴力组合一下。
哎,哪里怎么多出了4个螺丝?
大熊: 没事儿,多出来就丢了吧。
老邓:。。。。。。。
骑驴玩儿漂移: 老邓,骑车有风险,自己保重。。
IMG_5788.JPG


后面怎么样了啊?
六年级很认真的在整理后面尾灯。哈哈
IMG_5726.JPG

大熊微调。。。各种微调。。
IMG_5771.JPG

最后: 看看刹车效果:

42A32FE6B7ABDB93792F72C243722288.jpg
转向灯效果:
4234F0EB2D501D761B3C19EB0E86FA94.jpg
前进过程中的示廓灯效果。哈哈
B2770759DAA7CA7938BBF13D689B0890.jpg

是不是已经急着想要动手也做一个了?
来来来,奉上代码如下:
  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
IMG_5761.JPG
IMG_5787 2.JPG
IMG_5787(1).jpg
605ED114F6786696A1C9210E72240486.jpg
7306316DF244AFBE2ABE61B8F47F83C3.jpg
电路图.jpg
AE949E8422D7D31ABD6769BCDCC54F22.jpg
E6F64FDE1E7E9BCA1DF373AC8A7C226F.jpg
EE2010B92EAEF4B5963BF7B2F16FAA73.jpg
FD3BBF619AA467F4AF6BD7575058FAF5.jpg
FF7EC352E9C78F870E460DC2F37F450F.jpg

reaprouu  学徒

发表于 2016-7-25 15:24:19

只会刷分的有屌用
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-24 16:18:36

占个楼,回答问题
回复

使用道具 举报

楼上是二哈  学徒

发表于 2016-7-25 10:04:02

卖不卖  100元包车卖不卖
回复

使用道具 举报

Rockets  NPC

发表于 2016-7-25 10:46:23

我想说这个项目是最让人吃惊的了,本来觉得没有什么的项目,演示效果感人。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-25 17:01:09

reaprouu 发表于 2016-7-25 15:24
只会刷分的有屌用

我们根本没有必要刷这个分,这个分数也不是评分标准,别激动。。。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-25 17:01:50

Rockets 发表于 2016-7-25 10:46
我想说这个项目是最让人吃惊的了,本来觉得没有什么的项目,演示效果感人。 ...

哈哈,是不是我们声优的刹车声效太魔性?哈哈
回复

使用道具 举报

井底添蛙  学徒

发表于 2016-7-25 17:07:40

本帖最后由 井底添蛙 于 2016-7-25 18:21 编辑

回复楼上reaprouu:
首先,很感谢您的评论,您发出这种评论说明您也是参赛成员,但我觉得您的评论是非常不负责的。
1、想必您并未仔细看参赛手册,或者您认为我们没有仔细看参赛手册,论坛帖子访问量似乎并不作为比赛计分参考;
2、我们并未刷浏览量,只是我们自己都觉得我们的作品很好玩,所已只是转发到了几十个群里分享了一下而已,好玩的东西不值得分享吗?至于浏览量,我们其实也很惊讶,如果真有疑问,麻烦去问问DF的IT,究竟访问量是如何来的;
3、作为参赛项目,我们只做我们能力范围内的,虽然中途遇到了不少问题,但我们留守了一夜调试直到问题解决,最后也按时完成了,因此对您的评论我个人很不满意。
4、这是我加入52Pi第一次参加比赛活动,我们团队每个人都很优秀,对于您的评论,呵呵。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-25 17:23:07

楼上是二哈 发表于 2016-7-25 10:04
卖不卖  100元包车卖不卖

出门左转,他家99包邮。
回复

使用道具 举报

TaterLi  学徒

发表于 2016-7-25 18:52:38

reaprouu 发表于 2016-7-25 15:24
只会刷分的有屌用

...
回复

使用道具 举报

Rockets  NPC

发表于 2016-7-25 18:58:35

浏览量不决定比赛成绩的……
回复

使用道具 举报

accura  见习技师

发表于 2016-7-26 02:33:04

我们两支队一起熬得夜,哈哈!记得赛前收集采访素材的时候我就说过喜欢蘑菇云第一的是这帮能用心动手做事的朋友,包含DF的朋友们和会员朋友们,这个朋友圈很赞;设备和环境排在第二车上那个黄按钮眼熟:lol
一起加油啊~
回复

使用道具 举报

TaterLi  学徒

发表于 2016-7-26 09:59:59

QQ图片20160726095912.jpg 微信扫描上车投第四个

回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-26 10:35:14

accura 发表于 2016-7-26 02:33
我们两支队一起熬得夜,哈哈!记得赛前收集采访素材的时候我就说过喜欢蘑菇云第一的是这帮能用心动手做事的 ...

哈哈,是啊,三个队在熬夜哦。
还有梦立方的齐天大圣机器猫
哈哈
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-26 10:55:12

我就发了12个2000人的qq大群,没想到这个病毒扩散效应这么猛。。。哈哈
其实最屌的还是美拍上兄弟给力啊。。。哈哈
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-27 14:13:01

再推广一次。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-27 14:45:43

aa.png
各种拉票啊!继续拉!
回复

使用道具 举报

王子麒  初级技师

发表于 2016-10-9 17:53:49

。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail