咕叽大虾 发表于 2020-10-31 13:36:45

给万圣节的“恶作剧”加点料-用M0和屏幕结合测距做个APPLE II

一直以来我都是一个不经吓的人,我很清楚但也都坦然接受了(主动锻炼一下胆量?不存在的不存在的),直到有一天在办公室,我正专心盯着屏幕工作着,一个同事突然站在我旁边讲话,把我吓得弹跳一下,差点原地升天,我就知道是时候做点什么努力了。于是,接下来两天我很慎重的思考了一下去鬼屋的可行性,结果当然是打死不去了!那该怎么办呢,后来我灵机一动,或许可以给自己设计一个小装置用来提醒我有人正在接近,而我也需要它能不动声色的提醒我却不被来人发现,或许如果有人真的想在万圣节这样的节日给我一个“惊喜”,那么就不要怪我皮一下啦,我可以给他介绍一下我的新玩具,引导它近距离观察装置,当距离小到一定范围内时,我的装置也可以”惊
对了,或许有朋友知道1977年推出的Apple II个人电脑吗,虽然和后来大名鼎鼎的有“白雪公主设计语言”的Apple IIC比起来它似乎存在感不那么强,但它的推出确实掀起了个人电脑革命, Apple II的设计和当时别的电脑的设计非常不同,它看起来更像家用电器,拆箱即可使用,因此无论是办公还是家用都很合适。我第一次在设计史的课堂上见到它就印象深刻,像这样的具有传奇色彩的产品,一直以来都在我的梦想产品清单里。正好这次要DIY”惊喜“机,于是结合我手里有的一些器件我决定给自己设计一个迷你APPLE II-”惊喜“机,算是了了两个心愿,快乐值加倍!朋友们也可以动手做起来哦,简单有用还有趣,文末可以感受到我安利的诚意。那接下来简要介绍一下这次的小应用思路,如图: 好的,那么开始之前先看一下成品图!


一、硬件准备

1 Firebeetle Board-M0(V1.0) 1
2 8” 320x240 IPS TFT 电阻触摸显示屏 1
3 Gravity:URM09-模拟量超声波测距传感器 1
4 四脚按键开关 1
5 220欧电阻 1
6 杜邦线 若干
7 Gravity 3P线 1
8 GDI连接线 长度最好选择20cm或30cm的 1
9 type-c线 1
序号名称 数量


如图: 二、软件准备
序号 名称
1 Arduino IDE
2 Img2Lcd(将图片转换为代码信息)

三、具体操作1.硬件连接(如图)
将排针焊在M0上,这里需要用到一个模拟引脚一个数字引脚(我这里数字引脚是3,和按钮连接在一起;模拟引脚是A3,和测距传感器连接在一起)(垃圾焊接技术轻喷,我会继续好好练习的,如果你有什么焊接小技巧,欢迎评论区留言)。如图为我的M0焊接情况:     如图为我的按钮焊接情况:其中,在焊接接地杜邦线前焊接了一个220欧电阻。 2. 处理图片    如图为我下载的一个表情图片以及一张万圣节图片,于是我得到了7张新图(将图片全部裁剪成4:3后旋转90°)命名为1-7。如图: 打开软件Img2Lcd,百度一下即可下载。导入图片,如图设置(此处我将图片设定为60*80)后,得到7个c类文件。如图:3.下载GDL库文件(屏幕的库文件)
    链接如下。   https://wiki.dfrobot.com.cn/2.8_ ... h_Touch_SKU_DFR0665    下载解压后将库加载到Arduino的库中。4.梳理代码    依据前文提到的设计思路,只需要在合适的距离s时调用正确对应的图片显示即可。整理代码如下(复制即可使用):    1)将图片信息复制到代码开始的位置,如图表示即可(由于图片信息代码量太大,此处示意):       2)主体代码
#include "SPI.h"
#include <DFRobot_GDL.h>
#include "DFRobot_GDL.h"

#define screen_CS         5
#define screen_DC         7
#define screen_LED      0
#define screen_RST      6

//DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
//DFRobot_ST7789_240x320_HW_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
//DFRobot_ILI9341_240x320_HW_SPIscreen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
//DFRobot_ILI9488_320x480_HW_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
/* M0 mainboard DMA transfer */
//DFRobot_ST7789_240x240_DMA_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
//DFRobot_ST7789_240x320_DMA_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
DFRobot_ILI9341_240x320_DMA_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);
//DFRobot_ILI9488_320x480_DMA_SPI screen(/*dc=*/screen_DC,/*cs=*/screen_CS,/*rst=*/screen_RST);

long time3;      
int sensorPin=A3;
int buttonPin=3;
int sensorValue=0;
int buttonState;
int lastButtonState = LOW;
int n=0;

const unsigned char *c={
gImage_1,
gImage_2,
gImage_3,
gImage_4,
gImage_5,
gImage_6,
gImage_7
};

void setup() {
// put your setup code here, to run once:
pinMode(buttonPin,INPUT);
Serial.begin(9600);
screen.begin();
time3 = millis();
Serial.println(millis()-time3);
}



void loop() {
// put your main code here, to run repeatedly:
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
int reading = digitalRead(buttonPin);
if(sensorValue>300){
    if(n>0){
      for(int i=n;i>0;i--){
          screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=0;
}
else if(sensorValue>250){
    if(n>1){
      for(int i=n;i>1;i--){
          screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
   }
   else if(n<1){
      for(int i=n;i<1;i++){
      screen.zoomPicture((void*)c<i>,2);
      delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=1;
}
else if(sensorValue>200){
    if(n>2){
      for(int i=n;i>2;i--){
          screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
   }
   else if(n<2){
      for(int i=n;i<2;i++){
      screen.zoomPicture((void*)c<i>,2);
      delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=2;
}
elseif(sensorValue>150){
    if(n>3){
      for(int i=n;i>3;i--){
          screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
   }
   else if(n<3){
      for(int i=n;i<3;i++){
      screen.zoomPicture((void*)c<i>,2);
      delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=3;
}
elseif(sensorValue>100){
    if(n>4){
      for(int i=n;i>4;i--){
          screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
   }
   else if(n<4){
      for(int i=n;i<4;i++){
      screen.zoomPicture((void*)c<i>,2);
      delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=4;
}
elseif(sensorValue>50){
    if(n>5){
      for(int i=n;i>5;i--){
         screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
   }
   else if(n<5){
      for(int i=n;i<5;i++){
      screen.zoomPicture((void*)c<i>,2);
      delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=5;
}
else{
      buttonState = reading;   
      if (buttonState == HIGH){
      if(n<6){
         for(int i=n;i<6;i++){
      screen.zoomPicture((void*)c<i>,2);
      delay(100);
      }
   }
   else{
      screen.zoomPicture((void*)c,2);
      delay(100);
   }
   n=6;}
   else{
      if(n<6){
      for(int i=n;i<=5;i++){
          screen.zoomPicture((void*)c<i>,2);
          delay(100);
      }
      }
       n=5;
   }

   lastButtonState= buttonState;
}
}</i></i></i></i></i></i></i></i></i></i></i></i></i>
5.设计外壳以及切割图纸:如图为模型图片: 如图为切割图纸,单位:mm 6.切割后的板材以及组装后效果如图: 7.烧录代码以及显示效果如图: 串口数据如图:
视频示意:https://www.bilibili.com/video/BV1JD4y1R7Cc好了,以上就是本次DIY的全部内容,相关文件都在这里了,欢迎大家和我一起DIY属于自己的APPLE II-惊喜机。 注意:由于我最后决定使用2mm(实际为1.8mm)的亚克力板作为搭建材料,所以图纸中凹凸的部分尺寸均为1.8mm,朋友你可以根据你实际要使用的板材厚度重新计算得到新的图纸。



hnyzcj 发表于 2020-10-31 17:18:41

流弊

咕叽大虾 发表于 2020-11-2 09:06:43

hnyzcj 发表于 2020-10-31 17:18
流弊

{:5_126:}谢谢认可

BoBo 发表于 2020-11-3 09:57:52

外观不错,感觉除了给人万圣节惊喜,还可以做为一个桌面摆件完成其他的惊喜任务。

咕叽大虾 发表于 2020-11-4 12:15:50

BoBo 发表于 2020-11-3 09:57
外观不错,感觉除了给人万圣节惊喜,还可以做为一个桌面摆件完成其他的惊喜任务。 ...

嗯嗯!有戏!{:5_179:}

针不戳 发表于 2020-11-8 22:14:14

哇塞,辛苦辛苦

咕叽大虾 发表于 2020-11-11 17:57:44

针不戳 发表于 2020-11-8 22:14
哇塞,辛苦辛苦

哈哈做好玩的事情不辛苦{:5_146:}

DFHkhQxFRtP 发表于 2020-11-15 18:25:35

强无敌{:5_131:}

咕叽大虾 发表于 2020-11-16 11:42:36

DFHkhQxFRtP 发表于 2020-11-15 18:25
强无敌

{:5_179:}哈哈

DFHkLLPkvkd 发表于 2021-2-5 13:11:41

大佬最强666666666666666666666666666666666666666666666

jfMTScEaoh0s 发表于 2022-2-13 11:47:36

搞两个GDL.h干哈?
页: [1]
查看完整版本: 给万圣节的“恶作剧”加点料-用M0和屏幕结合测距做个APPLE II