查看: 537|回复: 4

[项目] 树莓派魔法盒——让你的圣诞礼物摇起来!

[复制链接]
本帖最后由 347945801 于 2020-12-29 14:18 编辑

一年一度的圣诞节又要到了,你的圣诞礼物都备好了吗!反正我是还没有。给人挑礼物有时真的挺伤脑筋。我在网上找了很久,一无所获。后来想想,这次整个有趣的活,我打算在圣诞盒子上花点心思,做一个摇动开锁打开的盒子,就算是给圣诞礼物加点料吧,哈哈。
WedDecember-202012238260..png WedDecember-202012233739..png
我们需要的材料:
礼物小盒
小礼物
一些填充物
一个树莓派
一个能给树莓派供电的5V电源
BMX160传感器180度舵机
一个振动电机模块

需要注意的是:
1、这个盒子不需要太大,比你准备的礼物大一点就好,但一定要好看。
2、你的礼物可以是玩偶这种比较结实的物品,太脆弱易碎不太适合咱们的设计
3、这个树莓派我使用的是4B版本,如果你是一个树莓派上的新手,你可以在网上找到许多教程,我们要用到的是简单的python脚本

第一步、获取传感器的库
将树莓派上电,通过以下指令获取BMX160库
  1. git clone https://github.com/DFRobot/DFRobot_BMX160
复制代码
这是一个包含Arduino和Python的库,我们只需要用它的Python部分

第二步、编写程序
这是一个可以感受加速度的传感器,我们为其设计摇动密码,完成我们设计的摇动密码,我们就能打开礼物盒了
  1. import sys
  2. sys.path.append('../')
  3. import time
  4. from DFRobot_BMX160 import BMX160
  5. import RPi.GPIO as GPIO
  6. import signal  
  7. import atexit
  8. up = 1
  9. down = 2
  10. left = 3
  11. right = 4
  12. atexit.register(GPIO.cleanup)  
  13. servopin = 22
  14. motorpin = 11
  15. GPIO.setmode(GPIO.BCM)
  16. GPIO.setup(servopin,GPIO.OUT)
  17. GPIO.setup(motorpin,GPIO.OUT)
  18. angle=GPIO.PWM(servopin,50)
  19. angle.start(0)
  20. bmx = BMX160(1)
  21. while not bmx.begin():
  22.     time.sleep(2)
  23. bmx.set_accel_range(bmx.AccelRange_2G)
  24. password = [up,down,up,down,left,right,left,right]
  25. def check():
  26.     data= bmx.get_all_data()
  27.     if data[7]<-8 and data[8]>-4:
  28.         return 1
  29.     elif data[7]>8 and data[8]>-4:
  30.         return 2
  31.     elif data[6]<-8 and data[8]>-4:
  32.         return 3
  33.     elif data[6]>8 and data[8]>-4:
  34.         return 4
  35.     else:
  36.         return 0
  37.    
  38. TIMEOUT=20000    #Set Timeout period, unit(mm)
  39. def main():
  40.   index=0
  41.   pd_len = len(password)
  42.   print("password length=%d"%pd_len)
  43.   start_timestamp = time.time()
  44.   print("please input the %d gesture"%(index+1))
  45.   correct = False
  46.   while(correct == False):
  47.     now = time.time()
  48.     if(now - start_timestamp >= TIMEOUT):
  49.         start_timestamp = now
  50.         index = 0
  51.         print("timeout,input again")
  52.         print("please input the %d gesture"(index+1))
  53.     gesture = check()
  54.     #print("**get gesture=%d"%gesture)   
  55.     if(gesture == 0):
  56.       continue;
  57.    
  58.     elif(gesture == password[index]):
  59.       index = index + 1
  60.       GPIO.output(motorpin,GPIO.HIGH)
  61.       time.sleep(0.5)
  62.       GPIO.output(motorpin,GPIO.LOW)
  63.       print("please input the %d gesture"%(index + 1))
  64.     if(index == pd_len):
  65.       correct = True
  66.   
  67.   print("Unlock all gestures successfully, you have entered the system")
  68.   print("To enter the gesture password, you have spent %d seconds"%((time.time()-start_timestamp)/1000))
  69.   angle.ChangeDutyCycle(float(90)/18+2.5)
  70.   time.sleep(20)
  71.   angle.ChangeDutyCycle(float(0)/18+2.5)
  72. if __name__ == "__main__":
  73.   while True:
  74.     main()
复制代码


第三步、将这个程序设计为开机启动
具体方法如下
1、切换到root账户
  1. sudo su
复制代码
2、修改rc.local文件
  1. sudo nano /etc/rc.local
复制代码
在exit 0前添加命令
  1. sudo python /xx/xx/text.py
复制代码


第四步、安装传感器
我们需要将BMX160传感器固定在盒子中的一角,需要准确的按方向固定
WedDecember-202012237459..png
第五步、安装舵机和振动电机
我们需要将舵机固定在盒子开口附近,并与盒子的开关做一个联动,我们需要用舵机来作为盒子的锁
安装振动电机的目的是为了每完成一个密码获得一个反馈
WedDecember-202012239706..png WedDecember-202012236410..png
第六步、连接硬件
将树莓派和电源固定在盒子底部,连接上传感器和舵机,就可以完成我们的礼物盒了
TueDecember-202012299718..png WedDecember-202012238366..png
第七步、放入礼物
我们用一些填充物遮住电路元件,再放入我们的礼物,就可以将盒子盖起来了
WedDecember-202012233433..png
第八步、做一些小小的装饰
一个外表空荡荡的盒子肯定不符合圣诞节欢乐的气氛,我们用一些包装纸将他做的好看一点
WedDecember-202012232321..png
最后

在送给别人之前,我们来试验一下我们的礼物能打开吗我们按照事先设定好的摇动顺序(密码是上下上下左右左右)就可以打开盒子了


以上就是我们的新奇礼物了,当然可能这个盒子比你装在里面的礼物还贵,但不妨碍你把这个盒子也作为礼物的一部分送给你亲爱的朋友
最后祝你圣诞快乐




gray6666  初级技神

发表于 2020-12-23 21:42:22

if __name__ == "__main__":这句能去掉吗?
回复

使用道具 举报

347945801  中级技师
 楼主|

发表于 2020-12-29 09:44:54

gray6666 发表于 2020-12-23 21:42
if __name__ == "__main__":这句能去掉吗?

理论上可以去掉,这算是我的编程习惯
回复

使用道具 举报

gray6666  初级技神

发表于 2020-12-30 11:35:19

347945801 发表于 2020-12-29 09:44
理论上可以去掉,这算是我的编程习惯

刚刚又问了度娘,您这个习惯很好,学习了
回复

使用道具 举报

pATAq  版主

发表于 2021-1-3 08:44:00

感谢分享
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail