查看: 4374|回复: 0

[项目] 送女友:来用树莓派打造一个魔镜吧!

[复制链接]
  • TA的每日心情
    开心
    2014-1-27 10:34
  • 签到天数: 67 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2017-11-21 09:22:43 | 显示全部楼层 |阅读模式
    分享到:
    该魔镜是一个双面镜,后面是一台由树莓派驱动的显示器。你可以在黑色网页上增加一些小组件,通过镜面反射后看起来就像魔法一样。目前版本支持的组件,可以显示天气预报和日期时间,以及一句随机生成的问候语(比如,你今天太帅了)。你不需要底层硬件的黑客知识,只需要一些木工活和一些我已经整合好了的代码。

    7cc829d3gw1ezzyrtvubrj21kw2t44ii.jpg

    6941baebgw1ezy79gl6j9j20mv14on6k.jpg

    6941baebjw1ezy79hsr32j21kw0w0gyf.jpg

    所需材料:

    一台显示器
    一面和显示器大小相匹配的双面镜
    一些 2 x 4 大小的木条,用来包裹显示器
    一些细木用来搭建镜子的框架,我用的是1/8 x 3的板子
    一块树莓派以及相关组件,比如电源、HDMI 线、无线 USB 适配器、以及一个进行初始化设置的键盘。
    常用的木工工具,比如锯子、砂纸和螺丝刀
    螺丝和液体钉(译者注:液体钉是粘合力极强的多功能建筑结构强力胶。干后不会收缩下限,可填缝,可油漆。适合于:木材、石膏板等各种建材。)

    选择显示器

    镜子的大小取决于你选择显示器的大小。我想要一个尽可能大的显示器,而且有一个可以拆卸的支架,可以装到一个外壳中。另一个重要的方面是要确保显示器的输入,在中间的位置而不是靠边。

    我尽量不去选择输入在顶部或者边上的显示器,因为那样很难与边框和树莓派的 HDMI 线相匹配。我最终选择了BenQ GL2760H,这台27 英寸的显示器。结果证明它是非常适合的。

    6941baebjw1ezy79jhya6j215o0whjws (1).jpg

    准备镜子

    镜子绝对是整个工作中最重要的部分。但是我之前并不知道,这些双面镜实际上透明又像塑料一样。它们比实际的镜子有更强的可塑性,你可以用多种不同的方式切割它们,以满足你的需要。所以订一个和你需要的尺寸相近的镜子吧(这个尺寸仅指屏幕显示部分,不要包括边边角角)。别担心如果买大了怎么办,你可以自己切割它。

    我从 TAPPlastics.com 上订购镜子,你也可以从其他在线供应商那里订购。这就是我买的镜子。

    6941baebgw1ezy79cdsatj21kw0w0ang.jpg

    去掉显示器的边框(可选)

    为了让外壳更加贴合显示器,我决定去掉显示器的塑料边框。这是个明智的决定,因为我一开始就没有考虑盒子的厚度,用于容纳所有的连线。我用一把刮漆铲翘起显示器的边框并把它分离出来。

    分离显示器控制的时候千万要小心。它们的电路非常薄,必须保证它完好无损,否则你就没法打开和调整显示屏了。
    6941baebgw1ezy79dlm5aj21kw0w017e.jpg

    6941baebgw1ezy79ef9a5j21kw0w04d2.jpg

    7cc829d3gw1ezy8h9xhyqj21kw0w0dvv.jpg

    7cc829d3gw1ezy8h64d7aj21kw0w0tm8.jpg

    打造外壳

    这个过程没有什么特别的。我只是切割了 4 个 4 x 2 的边条,来包裹新的 Jenny Craig’d 显示器。接下来我用夹子固定住边条的位置,用螺丝把他们拧在一起。这样你就可以让外壳和显示器匹配,而且很容易把显示器从外壳中取出来。

    7cc829d3gw1ezy8gn3orxj21kw0w0tqp.jpg


    顺便一提,我还在外壳的顶部和底部用螺丝打了孔。这样是为了给树莓派一点点空气流动。你不会希望电脑在一个完全密闭的空间里把自己烤干的。

    最后再提一句,记得在外壳底部弄一个大一点的洞以便电源线通过。当你为显示器和树莓派的电源布线的时候,就用得着了。我最终在外壳上用直锯捣了个适合电线通过的洞。

    制作镜框

    起先,我想要做一个酷炫的折角为 45 度圆弧的镜框。注意关键词:起先。还记得我说过我不是个专业的工匠吗?是啊,这对我来说有那么一点点难度。我没能成功做出圆弧的折角。相反,我记得说过我是个“极简抽象派艺术家”,只想要做个 90 度的折角。

    不过另一个障碍是,我原本打算使用kreig jeg(译:不知道这个是神马)钻几个小洞的,不过嘛,3/8 薄的木板,就像圣战组织(jihadst应该是拼错了,应该为jihadist)一样,遇到一点点压力就会胆怯而易碎。不过幸运的是,一个来自家得宝的工程师告诉我有这么一个棒呆了的工具,帮了我大忙:
    6941baebjw1ezy79k9vdcj209v09vmx5.jpg
    现在我可以使用一些液体钉来固定连接处了,这个工具可以帮助我把木头固定住好几个小时,以便让液体钉变干。不需要螺丝啦。我唯一遗憾的是没有买俩,这样我在这部分的进度就可以加快一倍了。
    7cc829d3gw1ezy8grxyv0j21kw0w0tph.jpg

    连接镜框和外壳

    这部分是我考虑最少的,如果我再做一次的话,我一定会换个方式。基本上来说我遇到了一点小麻烦,因为镜子和镜框不匹配,导致外壳和镜框之间有了间隙。幸运的是切割双面镜是件很容易的事情。你可以换着法子切割,TAPPlastics 上有全套教程。

    我恰好有个带锯能用。这一步我唯一的建议来自『Will it Blend?』:“别把它吸进去” 。 我的意思是指那些塑料粉尘。
    7cc829d3gw1ezy8gk91jbj21kw0w04ca.jpg

    现在镜框和外壳可以匹配了。
    7cc829d3gw1ezy8gq2oylj21kw0w07ih.jpg

    我犯的另一个错误是没有把镜子粘在镜框和外壳中间之前,分别给镜框和外壳着色。这里我没拍照片,不过我最终使用胶带覆盖了镜子并着色了边缘。

    但是天哪快看!一个可以发光的镜子。目前这只是显示器的自检信息,不过这也是进步呀!

    7cc829d3gw1ezy8heer93j21kw0w07i0.jpg

    安装树莓派

    现在有趣的部分来啦。理想的情况是只从外壳底部拉出来一根电源线。利用电子或焊接等其它手段,可以让一根电源线供电……不过我的选择很简单,我买了个两路电源分流器:
    6941baebjw1ezy79k20jmj20dw08p74k.jpg


    然后左右组件都用胶带固定好:
    7cc829d3gw1ezy8glzk5xj21kw0w0awk.jpg


    现在你可以通过一根线同时给显示器和树莓派供电啦。简单地把树莓派连接到显示器上,连上网。我不会很详细地讲解如何安装 Raspian(树莓派的官方 linux 发行版),否则这个指南就没有用处了。

    一旦你完成了 NOOBS 的安装步骤,就可以看到树莓派的启动信息啦:
    7cc829d3gw1ezy8h2j5c6j21kw0w0twf.jpg

    把树莓派改为“ Kiosk ”

    (译者:Kiosk,一种面对系统管理员的全屏模式,是一种功能受限的浏览器模式,比如图书馆的电脑浏览器经常如此)

    让一个镜子显示树莓派的桌面不太合适。有好几种方法可以让树莓派工作起来像是“ Kiosk ”,不过我的做法如下。

    安装谷歌浏览器

    如果 Raspblian 版本不对,那你可能会遇到麻烦,反正我是遇到了。这镜子后面的树莓派运行的是 Jessie 版 Raspblian 系统。很明显它 对原始的 Raspblian 版本进行了一些改动,包括移除谷歌浏览器,用它可以很容易设置为 Kiosk 模式。

    你可以自己谷歌一下,不过我通过以下命令成功安装了它:
    1. wget http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u3_armhf.deb

    2. wget http://launchpadlibrarian.net/218525709/chromium-browser_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb

    3. wget http://launchpadlibrarian.net/218525711/chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb

    4. sudo dpkg -i libgcrypt11_1.5.0-5+deb7u3_armhf.deb

    5. sudo dpkg -i chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb

    6. sudo dpkg -i chromium-browser_45.0.2454.85-0ubuntu0.14.04.1.1097_armhf.deb
    复制代码
    开机运行谷歌浏览器

    现在谷歌浏览器安装好了,你可以把它设置为开机启动并全屏:

    打开开机启动设置:
    1. sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
    复制代码
    注释掉下面这行以关闭屏保:
    1. @xscreensaver -no-splash
    复制代码
    增加以下这几行:
    1. @xset s off @xset -dpms @xset s noblank /usr/bin/chromium --noerrdialogs --kiosk --incognito "http://localhost"
    复制代码
    退出并保存。现在你关闭了屏保,关闭了电源管理设置,并且把谷歌浏览器设置为了开机启动的本地 Kiosk 模式。
    使用无线网络
    有很多教程教你怎么让树莓派连上无线网。这就像编辑你的 wpa_supplicant 文件一样简单:
    1. sudo nano /etc/network/interfaces
    复制代码
    然后编辑网络设置:
    1. network={ ssid="Network name here" psk="password" }
    复制代码
    我确信你很聪明,也没有使用古老又不安全的 WEP 路由协议。
    现在用以下两个命令重启你的wifi:
    1. ifdown wlan0 ifup wlan0
    复制代码
    如果看到奇怪的报错,别担心,我也遇到过。你可以试试以下命令判断你跑成功了没:
    1. ifconfig
    复制代码
    如果你的 wlan0 设备分配到了一个 IP 地址,那你就可以断开以太网链接并安装镜子背面了。我仅仅用了一些便宜的面板,用四根螺丝固定住而已。

    7cc829d3gw1ezy8hbh7eej21kw0w0tqf.jpg

    设置网页
    现在我们有了个多功能 Kiosk 啦。就缺个真实的网页了。我自己写了个应用,你可以随便修改或者直接用它。
    我决定使用 PHP 的微架构 Lumen 以及一些 jQuery 和 MomentJs。
    安装网页服务
    要操作网页你首先得安装网页服务,要跑 Lumen 你首先得安装 php :
    1. sudo apt-get update sudo apt-get install nginx php5-fpm php5-cli php5-mcrypt git
    复制代码
    这需要一点时间,不过你需要知道 MirrorMirror 网页安装在哪里,以便配置 nginx :
    1. sudo nano /etc/nginx/sites-available/mirror.conf
    复制代码
    把以上配置复制到配置文件中:
    1. server { listen 80; server_name localhost; root /home/pi/projects/MirrorMirror/public;

    2. index index.html index.htm index.php;

    3. charset utf-8;

    4. location / {
    5.     try_files $uri $uri/ /index.php?$query_string;
    6. }

    7. location = /favicon.ico { access_log off; log_not_found off; }
    8. location = /robots.txt  { access_log off; log_not_found off; }

    9. access_log off;
    10. error_log  /var/log/nginx/myapp-error.log error;

    11. sendfile off;

    12. client_max_body_size 100m;

    13. location ~ .php$ {
    14.     fastcgi_split_path_info ^(.+.php)(/.+)$;
    15.     fastcgi_pass unix:/var/run/php5-fpm.sock;
    16.     fastcgi_index index.php;
    17.     include fastcgi_params;
    18.     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    19.     fastcgi_intercept_errors off;
    20.     fastcgi_buffer_size 16k;
    21.     fastcgi_buffers 4 16k;
    22. }

    23. location ~ /.ht {
    24.     deny all;
    25. } }
    复制代码
    然后激活这些配置:
    1. sudo ln -s /etc/nginx/sites-available/mirror.conf /etc/nginx/sites-enabled/mirror.conf sudo service nginx reload
    复制代码
    现在你的派里有了适用php的网页服务了!
    安装 MirrorMirror
    这是最后一步了,安装真实的网页。在 /home/pi 里建一个文件夹并进入:
    1. mkdir /home/pi/projects cd /home/pi/projects
    复制代码
    用下面的命令克隆 MirrorMirror 网页应用:
    1. git clone https://github.com/ctrlaltdylan/MirrorMirror.git
    复制代码
    安装配置器以便安装 Lumen 的相关依赖:
    1. curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
    复制代码
    使用配置器安装 Lumen 的依赖,启动 MirrorMirror 并运行:
    1. cd MirrorMirror composer install
    复制代码
    进入 http://localhost 就可以看到你的 MirrorMirror 的版本以及运行结果啦!
    目前的功能:
    • 显示天气预报以及萌萌的气象图案。
    • 显示日期和时间。
    • 显示一句随机的问候语,目前只有一句,不过计划会加更多啦。
    当然为了更简单的安装和定制化还需要更多的工作,不过我已经在思考怎么改善它了。希望你像我一样享受建造和使用你自己的魔镜。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-10 17:24 , Processed in 0.131181 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.