Arduino 大理石迷宫迷宫
组件和用品
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
| ||||
|
应用和在线服务
|
关于这个项目
我将向您展示如何制作 Arduino 控制的大理石迷宫迷宫棋盘游戏,该游戏制作起来非常简单有趣。最好的部分是它是用纸板制成的。
游戏的思路是通过迷宫导航到最后的传送门来赢得游戏。
当然还有很多想法可以改进这个游戏,让它变得更有趣,比如在最后放一些传感器,在玩的时候蜂鸣器发出声音,甚至在迷宫本身上捏一些洞。
想法
电子游戏玩腻了,说要搜索体能游戏,所以找到了迷宫,很喜欢。
什么是迷宫 ?
迷宫 是一种体力游戏,由一个顶部有迷宫的盒子和一个钢弹珠组成。游戏的目标是尝试倾斜游戏场地以将大理石引导到迷宫的尽头,而不会让它掉入任何孔中。某些版本的游戏具有在两个轴上旋转的悬浮迷宫表面,每个轴都由一个旋钮控制。出售小型手持版游戏,盒子完全封闭,顶部有透明盖。该游戏由瑞典的 BRIO 开发,并于 1946 年在瑞典首次发布。
设计
我开始使用 Sketch up pro 设计我自己的迷宫迷宫,以想象这款游戏的外观。我很小心地给它合适的大小,让它变得很容易,因为孩子们也可能开始建造自己的迷宫。
设计文件可供下载,只需 1 小时即可用纸板制作您自己的游戏。
工具和材料
· 纸板3mm
· 热胶
·锋利的刀
·标尺
·铅笔
组件
Arduino(任何板类型)
迷你面包板
跳线
2X伺服电机9g
摇杆模块
2 个螺丝和螺母 12mm x 3mm
剪出形状
图> 图> 图> 图> 图>
打印附件并按照以下说明剪纸板:
1. 切出一个 20 厘米 x 20 厘米的正方形作为迷宫的底部。
2. 为迷宫的侧面剪出两个 14 cm x 16 cm 的等腰梯形。
3. 伺服电机(X轴)在这两块之一上开一个矩形孔。
4.在另一块正中间钻一个3mm的孔,靠在另一侧(X轴)的伺服轴上。
5. 接下来,您需要切出四个 14 cm x 4 cm 的矩形作为迷宫内部的支撑。
6.在另一块正中间钻一个3mm的孔,靠在另一侧(Y轴)的伺服轴上。
7. 为伺服电机(Y轴),在中间打一个矩形孔,如图所示。
8.从文章中的附件中选择自己的迷宫,然后剪出12cm×12cm的正方形作为迷宫。
9. 提示*粘贴纸迷宫作为您的向导。
10. 您需要为迷宫中的墙壁切出至少 8 个 1.5 厘米 x 12 厘米的矩形。接下来,您需要将它们切割成合适的尺寸并且可以放入您的迷宫中。
11. 按照指引线,然后将碎片粘在原位,成为迷宫的墙壁。
12. 将伺服电机粘贴到如图所示的位置。
13.将伺服电机喇叭粘在矩形块上。
接线
如图所示连接舵机和操纵杆的电线
Arduino Pin 8 到伺服 1(X 轴)中的黄线
Arduino Pin 9 到伺服 1(Y 轴)中的黄线
连接面包板的红色和棕色电线。
Arduino 引脚 A0 到操纵杆引脚 VRx
Arduino 引脚 A1 到操纵杆引脚 VRy
操纵杆 VCC 和 GND 到面包板。
Arduino 5V 和 GND 到面包板。
代码
使用 USB 电缆将 Arduino 板连接到 PC。
打开Arduino IED
将代码复制粘贴到新的草图中
点击工具菜单>板>选择活动串口
确定串口名称点击上方圆形按钮上传代码。
完成消息后,您就可以开始了。
代码
- 用操纵杆控制迷宫
用操纵杆控制迷宫Arduino
#includeServo myServoX; // 定义 X 轴伺服电机 myServoY; // 定义 Y 轴的伺服电机 int ServoXPin =8; // 定义 X 轴 pinint ServoYPin =9; // 定义 Y 轴 pinint ServoXHomePos =90; //设置servosint的起始位置 ServoYHomePos =90; int ServoXPos =103;int ServoYPos =135; int XAxlePin =A0; // 定义摇杆的 X 轴引脚控制 A0int YAxlePin =A1; // 定义摇杆的 Y 轴引脚控制 A1int XAxleValue =0; // 为操纵杆设置启动值int YAxleValue =0;int Direction =0;int range =12; // X 或 Y 运动的输出范围int center =range/2; // 静止位置 valueint threshold =range/4; // 静止阈值无效 setup(){myServoX.attach(ServoXPin); // 附加舵机 X myServoY.attach(ServoYPin); // 附加伺服 YServoXPos =ServoXHomePos; // 更新 ServoXPos 的起始位置为 startupServoYPos =ServoYHomePos; // 更新 ServoYPos 的起始位置为 startupmyServoX.write(ServoXPos);myServoY.write(ServoYPos);Serial.begin(9600);}void loop(){XAxleValue =readAxis(XAxlePin);YAxleValue =readAxis(YAxlePin);Serial .print(XAxleValue,DEC);Serial.print(" - ");Serial.println(YAxleValue,DEC);// 检查摇杆的数值并缓慢移动舵机,延迟100毫秒if (XAxleValue>0) { ServoXPos++; myServoX.write(ServoXPos);延迟(100*(7-XAxleValue)); }if (XAxleValue<0) { ServoXPos--; myServoX.write(ServoXPos);延迟(100*(7+XAxleValue)); }if (YAxleValue>0) { ServoYPos++; myServoY.write(ServoYPos);延迟(100*(7-YAxleValue)); }if (YAxleValue<0) { ServoYPos--; myServoY.write(ServoYPos);延迟(100*(7+YAxleValue)); }if (ServoXPos>ServoXHomePos+20) { ServoXPos=ServoXHomePos+20; }if (ServoXPos ServoYHomePos+20) { ServoYPos=ServoYHomePos+20; }if (ServoYPos
定制零件和外壳
示意图
制造工艺