懒人逗猫激光笔
本帖最后由 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。
测试一下舵机活动情况。
http://116.236.162.186/a02.mp4
装上激光笔(直接将舵机配的扭臂缠在激光笔上),大功一半告成。
接下来上代码,一共搞了四种晃动模式,外加一个随机模式。五个function随机调用。
#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);
}
}
}
}
}
试运行一下。
http://116.236.162.186/a01.mp4
明天拿给猫猫们试一下,希望他们都喜欢。哈哈哈。
不错,顶起来 这个厉害了哈
本帖最后由 kevinzhang19701 于 2019-3-15 15:24 编辑
效果真是有点尴尬。晃动的角度看来还要缩小,延迟也可以再加大点。现在这个样,摆动太大,猫猫们根本跟不上。
http://116.236.162.186/a03.mp4 本帖最后由 kevinzhang19701 于 2019-3-15 15:26 编辑
看上去,他们对神器本身,比红点更感兴趣。
http://116.236.162.186/a04.mp4
http://116.236.162.186/a05.mp4 kevinzhang19701 发表于 2018-8-31 16:33
看上去,他们对神器本身,比红点更感兴趣。
哈哈哈,可以把神器藏起来 20060606 发表于 2020-8-10 05:28
哈哈哈,可以把神器藏起来
啊呀呀。。。视频文件误删了
页:
[1]