喵星人对于激光发射器发出的光点有着天生、难以抗拒的执着。它们就像一个个职业杀手一样直接的扑向那个小小的红色激光点。对于猫咪们来说狩猎是一项很好的运动。看着萌宠们发起攻击的样子,作为铲屎官的你会不会觉得是一件饶有兴趣的事情呢!通常你只要拿起你的激光发射器就可以做到,但是你总会预先知道激光点的方向。让我们给这个游戏制造一些混乱元素——可以平面移动或改变仰角的激光炮塔,并让它可以周期性地随机移动
第一步:准备项目组件清单它需要用你惯用的任何舵机来配合驱动塔楼。这里有两种方案:
RobotGeek云台:
如果你喜好添加一个摄像头或者附加一个的自带钓鱼杆的逗猫玩具,这款将是一个好的选择。
RobotGeek云台和舵机
镭射激光发射器和固定配件
Geekduino或者其他兼容ArduinoUNO开发板
传感器模块(推荐,可简化接线)
7V5A电源
Mini云台:
不错的低成本选择,但是9G的舵机输出的力量有限。
Mini云台套件
9G舵机x2
镭射激光发射器和固定配件
Geekduino或者其他兼容ArduinoUNO开发板
传感器模块(推荐,可使简化接线)
6V2A电源
第二步:组装炮塔
如果你使用的是RobotGeek云台,安装说明可以在这找到。
如果你使用的是Mini云台,安装说明可以在这找到。
拿上激光发射器,让我们把它连接起来。
设备引脚类型引脚编号
平移舵机数字10
仰角舵机数字11
激光发射器数字2
确保设定的输入电压能供更大的伺服7v运行。对于9G的伺服系统,你可以用5V或6V的电源。真的是超级简单的接线。赶紧编码起来吧!
第四步:编程上传以下代码到你的Arduino主板上。
//;//includetheservolibraryforworkingwithservoobjects//DefinesconstintPAN=10;//PanServoDigitalPinconstintTILT=11;//TiltServoDigitalPinconstintLASER=2;//LaserDigitalPinconstintPAN_MIN=40;//minimumpanservorange,valueshouldbebetween0and180andlowerthanPAN_MAXconstintPAN_MAX=140;//maximumpanservorange,valueshouldbebetween0and180andmorethanPAN_MINconstintTILT_MIN=60;//minimumtiltservorange,valueshouldbebetween0and180andlowerthanTILT_MAXconstintTILT_MAX=100;//maximumtiltservorange,valueshouldbebetween0and180andmorethanTILT_MINconstintSPEED_MIN=10;//minimuminterpolationspeed(lessthan5notrecommed)constintSPEED_MAX=10;//maximuminterpolationspeed(LowerSPEED_MAXvaluesmeanthattheprogramwillcyclemorequickly,_MAXaccordingly)constintROLL_MAX=40;//=morefrequentpauses,highervalue=lessfrequentpausesconstintPAUSE_MIN=500;//=1secondconstintPAUSE_MAX=1500;//,tiltServo;//createservoobjectstocontrolthepanandtiltservoslongdazer_speed;intdazer_pause_roll;intpause_length=1;intpanValue=90;//=90;//_goal;bytetilt_goal;//StateVariablesintlaserState=LOW;//Thecurrentstateofthelasermodule//TimingvariableslonglastDebounceTime=0;//'long'becauseitmayneedtoholdmanymilliseconds,anda'long'willaffordmorespacethanan'int'intdebounceDelay=50;//theamountoftimethatthatabuttonmustbeheld,forareadingtoregister(inmilliseconds)voidsetup(){//(PAN);//attaches/(TILT);//attaches/activatesthetiltservoonpinTILT//initalizedigitalpinspinMode(LASER,OUTPUT);//settheLASERPintoanoutput//writeinitialservopositionstosettheservosto'home'(panValue);//setsthepanservopositiontothedefault'home'(tiltValue);//setsthetiltservopositiontothedefault'home'valuerandomSeed(analogRead(0));//setabasisfortherandom()engine,basedoffofanalog0whichwillbearandomnumberbecausenothingisattacheddigitalWrite(LASER,HIGH);}voidloop(){dazer_pause_roll=random(1,ROLL_MAX);//pickarandomnumberbetween1andROLL_MAXpause_length=random(PAUSE_MIN,PAUSE_MAX);//pickarandomnumberbetweenPAUSE_MINandPAUSE_MAXdelay(pause_length);//usetherandomnumbertopauseforpause_lengthmillisecondspan_goal=random(PAN_MIN,PAN_MAX);tilt_goal=random(TILT_MIN,TILT_MAX);dazer_speed=random(SPEED_MIN,SPEED_MAX);//perfomtheloopwhilethecurrentpositionsaredifferentfromthegoalpositions//ifthepan_goalislargerthanthepanposition,movethepanpositionupif(pan_goalpanValue){panValue=panValue++;}//ifthepan_goalissmallerthanthepanposition,movethepanpositiondownelseif(pan_goalpanValue){panValue=panValue--;}//ifthetilt_goalislargerthanthetiltposition,movethepanpositionupif(tilt_goaltiltValue){tiltValue=tiltValue++;}//ifthetilt_goalissmallerthanthetiltposition,movethepanpositiondownelseif(tilt_goaltiltValue){tiltValue=tiltValue--;}(pan_goal);//(tilt_goal);//setstheservopositionaccordingtothescaledvaluedelay(dazer_speed);//waitsforarandomdelaybeforethenextloop}//loop()把你的猫咪萌宠抓过来,开启它吧!(当然是开启你的塔楼啦,而不是你的猫咪啦!)你的萌宠可是自带电源的哦!可不要尝试给你的猫咪充电哦!
第五步:Done!就是这么完美!现在铲屎的你只需坐下来,看着你的猫咪追逐和攻击那个“邪恶”的小红点啦!
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系