1.apsheduler missçåå
2.Windows经典「三维弹球」现实版,CAD建模、Arduino编程、数控机床打造,硬核致敬童年
3.树莓派实战:微信机器人(itchat实现)
4.Django实现crontab远程任务管理系统
apsheduler missçåå
å¯ä»¥éè¿è¿½è¸ªæºç ï¼è¿è¡è°è¯å¨æ§è¡å¨ä¸æ²¡æåç°é®é¢ï¼å¨è°åº¦å¨ä¸åç°æ¯æ¬¡è°åº¦å¨å建任å¡åç°è°åº¦é»è¾ï¼ç±äºå¨èªå·±çè°åº¦ä»£ç ä¸æ·»å äº ï¼ç¨äºè¶ æ¶åç¨ä»»å¡æ¶é´ï¼ï¼ä»ä»¬ä¸¤ä¸ªé æå²çªï¼å¯¼è´ä»»å¡æ§è¡å°ç¨åº2æ¶æ²¡æè¿åçå¾ æ¶é´ï¼å¨æåæ§è¡å¨ä»»å¡æ§è¡å®ä¹åæè¿åï¼æ以导è´ç¬¬äºæ¬¡ä»»å¡å«éè¿
APScheduleræ¯ä¸ä¸ªå°å·§è强大çPythonç±»åºï¼éè¿å®ä½ å¯ä»¥å®ç°ç±»ä¼¼Unixç³»ç»cronjob类似çå®æ¶ä»»å¡ç³»ç»ã使ç¨ä¹ä½ï¼é 读ä¸ä¸æºç ï¼ä¸æ¹é¢æå©äºæ´å¥½ç使ç¨å®ï¼å¦ä¸æ¹é¢ï¼ä¸ªäººè®¤ä¸ºapsçæ¶æ设计质éå¾é«ï¼é 读å®å¯¹äºæå软件å¼åçsenseå¾æ帮å©ã
Windows经典「三维弹球」现实版,CAD建模、淘宝源码分享Arduino编程、数控机床打造,硬核致敬童年
在二十年前,电脑还是大背头的时代,Windows的「休闲小游戏」是我们的回忆。纸牌、扫雷、空当接龙……满满的回忆。然而,最近,来自美国肯尼索州立大学的四位小哥,用开源电子原型平台Arduino从零开始复现了另一款Windows经典小游戏——三维弹球 (3D Pinball)。从3D建模、代码编写到动手施工,他们以最专业的方式向童年致敬。
其中一位小哥说:建造这样一个项目,是我的童年梦想。不仅如此,他们还提供了打造现实版「三维弹球」的教程,只需9步,你也可以打造一台属于自己的三维弹球。
首先,我们回忆一下这款经典的Windows小游戏。开局,球会从右下角的管道被弹出,然后在桌面自由滚动,碰到不同的障碍物会拿到不同的分数,只要保证它不从底部中间的缝隙掉出去就可以。
那么,四位小哥打造的「三维弹球」,长啥样呢?模型是这样的,实物则是完美复现了小游戏中的场景——从管道的位置,到障碍物的布局,各种细节栩栩如生。
实际手玩耍又是种什么体验呢?近距离视角下,简直一模一样!这台机器还有更厉害的天天指标源码地方——全自动、多球。
看到这里,是不是也想拥有一台呢?别着急,四位小哥提供了超详细的教程,手把手教你如何打造现实版「三维弹球」。
「三维弹球」的主要功能模块包括追踪得分系统、多球弹珠机、还有自主启动开关。上方有一个USB摄像头,在自动运行模式下会持续地监测弹球的位置,并根据球的位置指挥击打器。
用到的工具和材料清单包括:数控机床或激光切割机、Dremel和砂纸、烙铁、3D打印机、Linux计算机、USB摄像头、大量的/ AWG线、大量的热缩线、3/4英寸的胶合板(波罗的海桦木)、一个电源、降压转换器、弹球组件、左右翻转器组件、2个翻转式击打器、2个翻转按钮、2个叶子开关、保险杠总成、2个弹弓组件、至少6个星柱的弹弓、至少2个2英寸的橡皮筋、发射器机制、号刺刀式灯、场地中的障碍、掷球器、翻转开关。
以下是9步打造现实版「三维弹球」的步骤:
Step 1:纸面设计和低成本试错
设计中最可能出现的问题可能就是游戏机本身的尺寸限制和内部结构的安排,一些预想的弹球击打方式实验时才发现无法实现,所以需要先画出设计草图,然后在此基础上不断改进。团队在确定最终的游戏场地设计之前,经历了多次设计的麻豆源码后门修改和优化,每一次改进,都在便宜的胶合板上做一个模型来测试,一步步靠近最终的设计。
一些经验教训包括进行模块化设计,不同功能组件要能随意放置和取消。不要自己设计滑轮,借鉴成熟的弹球游戏的场地设计,这样能少走很多弯路。
Step 2:在SolidWorks上进行设计建模
弹球机的设计由两个主要的子部分组成,运动场和支架。球场是标准尺寸——. x英寸2,由3/4英寸厚度的波罗的海桦木胶合板制成。游戏场地包括一个由直径为2英寸的亚克力管和3D打印的适配器组合而成的第二层。第二层有两个主要功能。首先,第二层作为介质,将球从上层球场直接输送到左翻板内侧。球下落位置的可预测性,使得第二层成为一个的通道,此通道便于多球运动,这是其第二大功能。
当坡道和左内线上的翻转开关背对背地触发时,舵机会释放出两个球,这些球会下滚到第二层上方的两个管子中的一个,与坡道射出的球发生碰撞。因此,在多球模式下,这些管子将球会送入第二层,进入入左边的内管。
3/4英寸胶合板厚度的选择是为了给工程提供足够的刚性,并允许在承重接头处有更大的紧固件啮合。选用波罗的海桦木作材料,因为它的质量高,杂质少,属于硬木,不易损坏,易于使用激光雕刻,一般来说,对于较重的木制结构是首选。
支架是游戏场地的安装装置,并容纳了定制的电子装置。电子装置直接固定在底板上,黄飞鸿指标源码延伸的延伸到游戏面板底部。通过观察窗可以看到电子装置在支架的两侧。此外,该支架还可以通过侧面的可拆卸的插销对球场进行间距调节。游戏台倾斜角度范围为0-8度,每两度设置一个调节档位。更高的球道坡度可以使游戏节奏更快,难度更高。
Step 3:用数控机床或激光雕刻制作主体
尽管你可以手工切削出游戏台的整体结构,但这样误差交大,后续安装连接多有不便,浪费材料。这几个美国小哥用一台大型5轴数控机床进行铣削,最后再用木楔进行细节调整。
Step 4:电子器件和电源选择
大多数弹球机的 “高压 “在V-V的范围,这取决于你买的电磁铁的品牌,同时你要选择一个能支持这种磁铁线圈的电源。其次,你需要考虑到 “低电压 “的电源,用于给灯或其他较小的电器元件等东西供电。我们选择的低电压是6.3v的电压,但这不一定是一成不变的。这要看你买的是什么LED,以及你是否用这个电源给其他的电器东西供电。一般6.3V应该就可以满足需要。如果没有低压电源,那还需要一个降压转换器将高电压(如V)降到小元件的额定电压。此外,使用的元件的电阻大小,决定了电流大小。所以,电源总功率要视情况而定。如果你的组件没有达到正确的功耗额定值,这些元件在很短的时间内产生很大的电流。在这种情况下,单个击打器内部线圈可能会产生3-4安电流,两个加起来8安培左右,会导致元件烧毁。你应当计算出 “最坏的情况下 “的电流大小,然后给出一个合理的安全范围,挑出一个对应的电源。
Step 5:建立I/O接口电路
开关输入部分:开关输入板负责将所有的简洁寄售源码值从游戏场地中读入到Arduino。这个单独的电路非常简单,但需要对很多输入进行放大处理。因为Arduino有一个内部的上拉电阻,所以你可以如上图那样接线。这里最大的问题是要确保每个开关都有连接器,以防有一个开关因为某种原因单独取出调试。这个项目中使用了标准针脚连接,可以很容易地将所有的东西同时插入到Arduino中。
灯光控制部分:电路由一个BJT晶体管(2n)、几个电阻和LED组成。晶体管作为一个数字 “开关”,可以打开或关闭,把它这个连接到前面提到的6.3v电源上,就得到了一个光源和单独可寻址的LED。不能直接将LED直接连接到Arduino上的原因是,Arduino无法提供多个LED要求的额定电流。正确的办法是把Arduino作为一个数字开关,控制BJT。这样就可以将LED的数量扩大到我们需要的数量。
电磁控制部分:总体思路与LED板相同:从Arduino发送一个信号,能够打开/关闭任何一个电磁铁(翻板、弹弓、弹出式保险杠)。因为这些元件比LED功率更大,所以需要一些更大的晶体管:MOSFET。电路元件清单包括1k电阻、k电阻、电阻、IRFV MOSFET、1N二极管、微法电容。电磁铁需要连接到V的电压才会启动。因为电感不能瞬间改变电流,这就带来了一个问题。工作时,线圈会通过很高电流,而关闭时,如果没有一个地方分散电流,可能会破坏元件,非常危险。这里使RC缓冲器电路和二极管来解决这个问题。要使它们覆盖尽量多的电磁控制并联支路。
击打器和其他线圈的电路略有不同。这是因为,在弹球游戏中,玩家有时会按住按钮,以保持击打器长时间启动。如果要用同样的功率线圈,很快就会烧毁。在此电路中的第二个线圈可以实现快速第一次翻转。一旦翻转完成,一个机械机构会打开EOS开关,迫使电流通过两个线圈。
Step 6:组装所有元件
根据游戏场地的大小,焊接时间或长或短。这个项目花了大约两天的时间焊接,并把所有器件安装到位。最终有5种连接器插到板子上:高功率的螺线管电源、与电磁铁专用开关的连接、与LED的连接、与开关的连接、一些辅助电源(5V、V等)。所有这些都插到了一个3D打印的连接板上,里面封装了所有电路设备。当需要开盖检测故障的时候,只需要拔掉5个大的连接器,然后把整个装置举起来。
Step 7:安装Arduino软件驱动
在这台机器上,需要在与Arduino相连的计算机上安装以下依赖项:ROS rosserial_arduino ROS package、OpenCV (c++)、Tkinter、Apscheduler。整个软件系统依靠ROS架构作为后端来回传递消息。四个主要节点在弹珠机运行在自主模式下时,进行异步通信,以控制弹珠机的流程。这些节点分别是Input_Output.ino、track_metal.cpp、run_low_level.py和GUI.py。当不在自主模式下运行时,可以省略track_metal.cpp节点。源代码和详细解释在本项目的Github主页放出。
Step 8:更改Pin、将代码上传到Arduino、更新USB摄像头
如果你自己动手制作弹球机,并使用了本项目的源码,要注意的是,你的Arduino的Pin需要更新两处:Arduino/Input_Ouptut/ Input_Ouptut.io,以及src/Classes/playfield.py。此外还需要调整脚本,删除对开关和LED的调用。playfield.py会记录有多少个项目,需要手动设置每个项目的Pin。之后就可以将代码上传到Arduino中。此步骤必须安装上一步中提到的rosserial_arduino,并正确设置Arduino IDE与ROS绑定。最后,要做的是更新代码中你自己使用的摄像头名称。只需在 src/Track/track_metal.cpp 中找到 “std::::string camera_metal.cpp “这一行:“std::::string camera_string = “/dev/v4l/by-id/usb-d_Logitech_Webcam_Ce_6D6BFE5E-video-index0”;”将字符串更新为摄像机的名称,可能是”/dev/v4l/by-id/“
所有步骤完成后,重新编译才可以工作。
Step 9:玩起来吧!
如果一切正常,那么找到到 “启动”目录,然后输入 “roslaunch automatic_pinball_c.report”。这行代码启动所有与弹球机相关的节点,包括GUI节点和跟踪球的位置的节点。此外,你可以使用’roslaunch manual_pinball.report’不运行任何自主部分,只体验手动模式。
四位来自KSU的“造梦者”是何许人也?Kevin Kamperman,今年毕业于KSU,目前正在佐治亚理工学院研究所实习,从事无人机相关的研究。春季毕业的时候,Kevin Kamperman还被KSU评为今年的“荣誉毕业生”。Cody Meier,同样也是今年毕业于KSU,主修的专业是机械电子、机器人和自动化工程。Omar Salazar和上一位小哥是同专业,也是主修机械电子、机器人和自动化工程。他在采访视频中表示,这个项目加强了他在团队合作方面的能力。最后一位叫Tyler Gragg的小哥,可谓是“机器人制造”的狂热爱好者,在个人介绍文字中,还特意写道“Let’s Make Robots”,参与不少机器人项目。Tyler也荣登了学校“光荣榜”。嗯,是四位非常优秀的“造梦者”了。
那些年,经典的Windows小游戏,纸牌、扫雷、空当接龙……这些至今仍然拥有众多粉丝。然而,微软如今把这些经典游戏放在了WindowsStore中,「三维弹球」就没有那么幸运了。其实,从Win7开始,微软团队将原先的软件全部移植到位系统中。然而,「三维弹球」却出现了严重bug,为了节省时间,微软直接放弃了这个游戏。但四位小哥的这个项目,却赋予了这款经典之作新的生命。这个星球有趣的人可真多啊。
更多细节和教程请参考以下链接:
现实版「三维弹球」项目地址: instructables.com/id/Ar...
Github源代码地址: github.com/Tdoe/Aut...
通用弹球游戏设计制作教程: howtobuildapinballmachine.wordpress.com
树莓派实战:微信机器人(itchat实现)
本文介绍如何利用树莓派和开源库itchat构建微信机器人,实现自动回复、AI聊天、定时发送天气预报以及控制摄像头等实用功能。树莓派作为小时在线的server,使得微信机器人的应用范围更加广泛。
itchat是一个用于微信个人号接口的开源库,通过少量代码(不足行)即可实现微信机器人功能。其原理是模拟微信网页版客户端,通过HTTP协议进行通信。具体实现细节可以参考github上的源码。
首先,实现自动回复功能。注册消息处理函数以应对不同类型的微信消息,包括文本、、语音、视频等。默认处理单聊消息,同时可以扩展处理群聊消息。程序启动后,通过扫描二维码登录,然后自动运行。为避免发送消息给自己无效,可以通过发送消息给文件传输助手filehelper实现相同效果。
接下来,实现AI聊天功能。结合AI本地库或在线API,如青云客,可实现基于关键字命令的对话功能。对于自由对话可能效果不佳。在实现AI聊天功能的基础上,可以进一步获取天气预报信息,通过AI请求传递特定地点的天气查询。
定时发送天气预报功能需要解决定时任务执行和消息发送问题。Python库apscheduler可实现定时任务调度,而itchat提供便捷的API来搜索特定群。
控制摄像头功能则包括通过USB接口连接摄像头、使用fswebcam进行拍照以及使用linphone进行视频通话。fswebcam是用于拍照的命令行工具,而linphone是一个开源的IP电话客户端,适合在树莓派上使用。
完整代码已上传至GitHub,提供实用示例和详细的实现步骤。除了上述功能,还增加了健身打卡、睡觉打卡等实用功能,使得微信机器人的功能越来越丰富。
参考itchat提供的教程文档,可以找到更多关于微信机器人功能的实现和扩展。通过利用树莓派和itchat,开发微信机器人成为了可能,为自动化和智能化应用提供了新的途径。
Django实现crontab远程任务管理系统
在之前的文章中,我们已经探讨了如何使用 django-crontab 和 apscheduler 在Django应用内部管理定时任务,这些模块主要用于处理应用自身的任务调度。 然而,本文将转向一个不同的场景,类似于Java的xxl-job,我们构建了一个系统,能够通过Ansible API,远程管理不同Java项目中Task的定时任务。这个系统是ansible cron模块的可视化界面,允许你便捷地在Django后台添加、修改和删除Linux主机上的crontab任务。 核心技术实现涉及创建一个crontab模型,并将其集成到Django Admin中。每当模型发生变化时,会触发post_save信号,进而通过celery执行Task。这个Task调用ansible-runner的playbook接口,将crontab命令发送到指定主机。 模型设计和celery task的ansible-playbook执行是关键部分。在编写Task函数时,我们注意到增加了一个未实际使用的update_time参数,以确保每次更新都会生成新的Task实例。同时,使用mark_safe函数处理crontab命令中的特殊字符,render_to_string用于根据模型数据动态生成playbook模板,os.environ设置ansible的环境变量。 配置celery和信号处理,包括celery任务注册、异步任务日志独立存放以及信号机制的理解,都构成了技术栈的一部分。同时,我们还讨论了logging配置,以及在Django Admin后台记录操作的问题,特别是关于用户身份识别的挑战。 源代码已发布在gitee上,dj_cronjobs[6],并提供了详细的Readme.md指南供读者参考。如果你觉得这个系统有用,请通过我的个人公众号(搜索全栈运维 或者 DailyJobOps)获取更多信息,也可以直接在公众号中找到Django获取当前登录用户的方法[5]。 相关链接如下:[6] dj_cronjobs: gitee.com/colin/dja...