7173| 6
|
[项目] 懒人逗猫激光笔 |
本帖最后由 kevinzhang19701 于 2019-3-15 15:21 编辑 猫猫们越来越胖啦,为了这几只毛孩纸老夫我操碎了心。离前回帖子的发布已经沉寂好几年了,乘此机会,做个懒人逗猫激光笔,也为地府罗卜头筑个楼。老夫爱来此晃悠,看看新鲜东西,激发灵感。YouTube直接搜Arduino也能找到一些不错的创意。 一般某宝逗猫激光笔是酱紫滴: 更科技感一点,是酱紫滴: 前一种需要人不停逗弄,后一种只有一种兜圈模式。比较乏味,大约一二分钟后,会停下来。所以,老夫就动手做一个,把那几个毛孩纸累趴下,半夜就不会乱叫唤了。 先准备零部件(均来自地府商城,非广告帖): 1. DFRduino UNO R3,78元。 2. IO 传感器扩展板 V7.1, 55元。 3. 数字白色LED发光模块,10元。 4. DMS-MG90 金属9g舵机 (1.8Kg) x2, 56元。 5. 多孔原型钣金板(圆形), 60元 6. L型支架, 10元。 老夫买错了两件东西。一件是6节5号电池盒,本以为6节电池足够两个舵机运转了,事实上通电后,舵机只会稍微动一动就重启了。没弄明白什么原因,求大神答疑解难。后来也不想拆了,安装在钣金板上,插了6节电池权当是配重。 还有一件是25mW 激光头,这东西好贵,48元。当个宝似地买回来,接了5V后发现光点细小得几乎看不见。以后想想做个什么项目用掉她。 后来在淘宝上发现,原来应该买这个: 在淘宝买了一个5块钱的激光笔,还真不错,有红点,有手电白光,还带验钞的紫光,真正是物美价廉,关键还包邮。 把东西一件件都组装起来...... 比较麻烦的是固定舵机,用上了热熔胶枪,不过好像不太牢,所以又用绝缘胶布绷了几道。 硬件安装,基本完成。两个舵机90度粘在一起,等于一个简易云台,分别连在Uno的pin9和pin6。LED灯连在pin2。 测试一下舵机活动情况。 装上激光笔(直接将舵机配的扭臂缠在激光笔上),大功一半告成。 接下来上代码,一共搞了四种晃动模式,外加一个随机模式。五个function随机调用。 [mw_shl_code=c,true]#include <Servo.h> Servo myservo9; Servo myservo6; int pos9 = 0; int pos6 = 0; long randNumber; void setup() { pinMode(2, OUTPUT); digitalWrite(2, HIGH); delay(100); digitalWrite(2, LOW); delay(100); digitalWrite(2, HIGH); delay(100); digitalWrite(2, LOW); delay(400); digitalWrite(2, HIGH); delay(25); myservo9.attach(9); myservo6.attach(6); myservo9.write(90); myservo6.write(90); delay(2000); } void loop() { int x; randNumber = random(1,6); switch (randNumber) { case 1: for(x=0; x<3; x++) {my01();} break; case 2: for(x=0; x<3; x++) {my02();} break; case 3: for(x=0; x<3; x++) {my03();} break; case 4: for(x=0; x<3; x++) {my04();} break; case 5: for(x=0; x<5; x++) {my05();} break; } } void my01() { for (pos9 = 135; pos9 >= 45; pos9 -= 8) { myservo9.write(pos9); delay(25); } for (pos9 = 45; pos9 <= 135; pos9 += 8) { myservo9.write(pos9); delay(25); } } void my02() { for (pos9 = 135, pos6 = 135; pos9 >= 45; pos9 -= 8, pos6 -= 8) { myservo9.write(pos9); myservo6.write(pos6); delay(30); } for (pos9 = 45, pos6 = 45; pos9 <= 135; pos9 += 8, pos6 += 8) { myservo9.write(pos9); myservo6.write(pos6); delay(30); } } void my03() { for (pos9 = 135, pos6 = 45; pos9 >= 45; pos9 -= 8) { myservo9.write(pos9); myservo6.write(pos6); delay(30); } for (pos9 = 45, pos6 = 45; pos6 <= 135; pos6 += 8) { myservo9.write(pos9); myservo6.write(pos6); delay(30); } for (pos9 = 45, pos6 = 135; pos9 <= 135; pos9 += 8) { myservo9.write(pos9); myservo6.write(pos6); delay(30); } for (pos9 = 135, pos6 = 135; pos6 >= 45; pos6 -= 8) { myservo9.write(pos9); myservo6.write(pos6); delay(30); } } void my04() { for (pos9 = 180, pos6 = 135; pos9 >= 45; pos9 -= 5) { myservo9.write(pos9); myservo6.write(pos6); delay(35); //pos6 = 45; } for (pos9 = 45, pos6 = 45; pos9 <= 180; pos9 += 5) { myservo9.write(pos9); myservo6.write(pos6); delay(35); //pos6 = 135; } } void my05() { long randNumber9 = random(45, 135); long randNumber6 = random(45, 135); int ca9 = myservo9.read(); int ca6 = myservo6.read(); if(randNumber9 <= ca9) { for(pos9 = ca9; pos9 > randNumber9; pos9 -= 5) { if(randNumber6 <= ca6) { for(pos6 = ca6; pos6 > randNumber6; pos6 -= 5) { myservo9.write(pos9); myservo6.write(pos6); delay(40); } } else { for(pos6 = ca6; pos6 < randNumber6; pos6 += 5) { myservo9.write(pos9); myservo6.write(pos6); delay(40); } } } } else { for(pos9 = ca9; pos9 < randNumber9; pos9 += 5) { if(randNumber6 <= ca6) { for(pos6 = ca6; pos6 > randNumber6; pos6 -= 5) { myservo9.write(pos9); myservo6.write(pos6); delay(40); } } else { for(pos6 = ca6; pos6 < randNumber6; pos6 += 5) { myservo9.write(pos9); myservo6.write(pos6); delay(40); } } } } }[/mw_shl_code] 试运行一下。 明天拿给猫猫们试一下,希望他们都喜欢。哈哈哈。 |
本帖最后由 kevinzhang19701 于 2019-3-15 15:24 编辑 效果真是有点尴尬。晃动的角度看来还要缩小,延迟也可以再加大点。现在这个样,摆动太大,猫猫们根本跟不上。 |
本帖最后由 kevinzhang19701 于 2019-3-15 15:26 编辑 看上去,他们对神器本身,比红点更感兴趣。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed