墙壁绘画机器人 ||arduino & processing

墙壁绘画机器人 ||arduino & processing

这里写图片描述
最近出现了许多新的画画机器人,能够看到他们将虚拟的东西转成现实实体的感觉真是太好了。对于我来说,我能够非常容易得制作出趣味编程的、跨界的、混搭的,具有虚拟体验的数字作品,但我认为它们意义并不是很大,因为它们并不具备实体性。试想,你可以在一天之中运行一百次,一千次,甚至百万次得去更新一些变化。画出来的东西是一次性的,我很难去看到里面的价值,体会到自己动手的乐趣。
因此,3D打印机和一些其他的制作工具、技术已经变得越来越受到大众普遍的欢迎,我们对于这种现实实体的,物理化的,可以用手感触的,甚至可以去闻味的数字作品的渴望、渴求,从心底得,真的很难去估量。
事先申明,它并不是我原创的,让我们看下先前的那些艺术创作,会给你带来更多的灵感:
Hektor—所有悬挂式画画机器人的鼻祖
Der Kritzler—目前为止最smartest的(在窗上作画)
As220Drawbot—我做的画画机器人就是基于他的
SADBot—Instructable上的一种自动画画机器人,材料与我的大致相同

2. 组成

这里写图片描述
我没有能够找到能适配带有珠子的窗帘绳的链轮齿。应该有这样的卷帘机械结构,但还没有一种可以简单使用的结构。于是我自己设计了一个,并且3D打印了出来。JoneAbella设计了一个可调参数的链轮齿文件图,它可以适配其他尺寸珠子的窗帘绳。如果你拥有3D打印机,那你在家就可以自己打印出来了。将链轮齿推入到步进电机的5mm直径轴上。
4.电机
这里写图片描述
去找一个大的硬板或者其他类似的来做你的画板。画板每边都应该比你最大的画纸的每边至少长150mm。
你也可以尝试去用一面墙来作为你的画板,当然前提是你能够在墙上固定步进电机。但我总是有不好的预感,马克笔会在墙上乱画,这样我的女房东会对我产生不好的印象。
用硬板作为你的画板意味着你可以让画板轻微倾斜得靠着墙,这非常好,因为这样的话贡多拉的重量就可以使画笔去压触画纸了。如果画板是完全垂直的话,则画笔很难有力得去压触画纸—画出来的笔画会非常细小。
我自己去逛了我们当地的DIY商店,清理了边料箱,尝试着去做一个大画板,可以正好放入我的车里。但我已经做出了一个以最大的宜家Ribba相片框为基础的画板。这意味着我以后就可以直接把它作为画框了,太棒了!我们平常用到的白板也是一个非常好的选择,因为你可以轻松擦除画面,这样你就可以快速得测试,当然你用其他的平整硬板也可以。我第一次使用的是只有A3纸大小的画纸,效果也不错,所以画纸没必要很大。
6.边缘固定
这里写图片描述
这是我已经采用的固定电机方法,表面上看起不是很简洁,但是它对你的画板要求不是很高,事实上它可以固定在任意画板上,其中包括墙和其他巨大的画板。
我自己设计一个可用激光雕刻加工的3mm厚、木板材质的电机固定装置,这本身没有什么聪明之处只是用螺丝连接起来,这样电机部分就可以很容易得拆装,而主要的固定板还是放置在原地方。我使用Ponoko网上一块P1大小的硬木板制作出了一个装置,你需要做两套这样的装置。
Der Kritzler的设计使用吸盘,是一种可以固定在窗上的装置。他的固定支架比我的更加坚固,但也会使用到更多零件。
将这两个大支架分别固定在画板顶端的两角,并且保证他们在同一水平线上。我在每个零件上都或多或少使用了一些双面泡沫胶,但你应该确保多用些,因为他们有些重,同时也会带来一些震动。
固定支架的设计文件:支架
8.电子
这里写图片描述
你需要使用到一块Arduino UNO控制板,我自己使用了SeeeduinoV2.21。在过去的一段时间,它确实工作得很棒,但是随着新功能的加入到代码中,它已经有些不适合了。官方版UNO在存储程序的空间上稍微大些。
将编译好的代码下载到Arduino上。如果是新手的话可以去Arduino官网上或者网上教程上看帮助教程。
因为代码会不断得更新,所以我没有把代码放在这里,不过最近的版本你可以通过下面的链接得到ina bundle from the polargraph code repository。
你应该在Arduino sketch folder下面新建一个文件,将代码文件放入到这个新文件中,将新文件的名字命名成代码源文件名字一样。比方说,如果代码文件名是polargraph_server_a1.ino,那么新建的文件名就应该是polargraph_server_a1,然后将代码文件放入这个文件夹中。
程序需要用到Adafruit’s AFMotor 和Mike McCauley’s Accelstepper的库文件。
进入到Arduino/librarise,在里面新建一个叫AFMotor的文件,并将AFMotor的库文件放入其中。
同样的,进入到Arduino/librarise,在里面新建一个叫AccelStepper的文件,并将AccelStepper的库文件放入其中。
上面步骤完成后,你的Arduino安装目录应该像上面第二张图片里的内容。
当然所有的源文件都在代码库中,点击https://github.com/euphy,尽量下载最新版本的代码。
一旦你下载代码到Arduino中,你应该去确认它是否工作正确:通过使用arduino软件中的串口调试工具,将波特率设定为57600,如果下载代码过几秒后画面上出现“READY”则说明工作正确。
9.驱动板
这里写图片描述
这里写图片描述 这里写图片描述
这个设置已经准备完毕,等待测试。控制软件是用Processing编程语言写的一个小应用。你可以运行源文件来打开程序,当然用我已经编译过的应用程序打开更加方便。软件下载地址:https://github.com/euphy/polargraphcontroller/releases/tag/1.10.6a
下载并且解压文件,运行controller文件中的可执行文件。软件初次打开时,界面会比较小,但你可以选择最大化窗口。当你运行软件时,软件本身会产生一个默认配置文件,当你鼠标点击窗口左上角的“save properties”后,就可以把当前的窗口大小设定成默认大小。
如果你对Processing怀有兴趣,你的直觉不错:它非常棒!在http://processing.org/learning/有许多教程供你学习,当然Instructables也有不少。这种语言是基于Java的,但是通过优化后可以运行小型独立的图形化程序。如果你对此兴趣并且想实时跟进控制软件的改进,那么你最好是自己直接编译源代码。
一些值得注意的地方——现在这个版本有点落伍了,我至今还没有把它更新到Processing2。因此,事实上它现在只能在Processing1.51上运行。除此以外,当时我写这个软件时的内部库文件到现在都已经更新版本了,也就是说你现在只能用我提供给你的压缩文件里的库文件。(上面的链接)我现在正在努力进行更新,不过还需要一些时间。
现在让我们打开Processing软件,鼠标点击File—Sketchbook,你会看到“polargraph”在这个列表中。点击它,然后就可以运行程序了。初始化时窗口会非常小,所以先最大化窗口或者拉拽边框达到可以看到所有的大小。如果它成功了,那很好,不错的开始呵。让我们进入下一步!
(译者注:软件在最下面提供的程序包Polargraph.1.10.6中,找到里面controller,进入后根据自己的系统选择软件。Processing版本只能是1.51,而不能是2.0.需要安装java jdk,1.6版本测下来可以,之前版本测试下来没有成功,更高版本没有测试过,大家自己测试)
12.控制软件——入门
这里写图片描述
为了让控制软件与机器通信,你需要切换到setup部分,然后点击里面的serial按键。此时会打开一个小窗口,上面显示了可用的串口。如果你知道Arduino的串口号,请点选它。如果你不清楚,那你就依次尝试,每次点取串口号后请等待几秒钟时间,如果成功的话,在主窗口最上方会显示绿色的Polargraph READY!
硬件每次向上发送准备完毕的信息,这个过程需要几秒钟的时间,这就是为什么你需要等待几秒才能看到结果的原因。如果你不想连接两者(因为你手边可能还没有机器),只需要选择no serial connection。
做得好!现在关闭串口选择窗口,然后点击setup部分下的save properties,这样下次打开软件时就会自动连接已选定的串口。
14.控制软件——动起来
确认你已经选择正确的串口号,窗口上方显示绿色的PolargraphREADY,证明已经与Arduino正常通信。如果通信不正常,这一行字会呈现红色。如果你是运行控制软件后再连接机器的,你最好先关闭控制软件再次启动一次。
如果你是从Processing中编译后打开控制软件的,那你可以在Processing的编译框中等待几秒后看到READY。
太棒了!现在开始运行命令队列,你会看到第一批命令一个接一个快速得发送到机器上。点击Set home,你会在命令列表中看到这行命令,然后立马发送到了机器上。这时,你可以看到一个大的紫色的点出现在屏幕中灰色区域的顶上中间位置,这个点对应了实际的笔的零点位置。此时两个电机都会发出一些声音,你可以发现它们实际是被锁住了—它们现在通着电!
好的,现在让我们点击Move pen to point按键,这是一种控制笔移动的命令,你只要任意点击下方的某个地方。幸运的话,你会看见两个电机正反转,加减速,并且听到电机转动的美妙声音。
同时,紫色点也跟随移动。这就是机器认为笔应该在的地方。
再尝试一次以确保链轮齿运行在正确的方向。当机器是让笔从上往下移动的,那么左边(画纸面向人)的电机应该是顺时针转动的,而右边的电机则是逆时针运行的。当笔是从下往上移动,那么情况正好相反。
如果一个电机或者两个电机的电机运行方向不正确,那你可能拿到了一份错误的电机资料或者是接线的过程中出错了,也有可能是其他问题。你只需要将同一相的两线交换顺序连接就可以了。老实说,尝试和犯错真的是他妈的最后成功中必要的,但是这个过程确实比较艰难,除非你能够保证所有其他的部分都没问题了。
做得不错!我建议你给自己来一杯饮料!我相信你也会同意,我们在做作品的过程中没有比作品初次转动或者发出“美妙”的噪音,又或者电到你时更欢乐的事儿了呵。
15.组装贡多拉
这里写图片描述
贡多拉如上图所示,是一种夹住笔的装置。除了这种设计外,还有其他许多可选的设计,比如说这种3D打印式,很适合用在商业上。我自己的设计比较重些,有一个中空的中心,因此笔可以准确地保持在两根窗帘绳聚合之处。实际上,我不清楚这种设计与其他设计有多大的不同,但是它让我感觉不错。
我第一次做出来的贡多拉,非常简单,使用了一些硬纸板和一块CD盘,接着用胶和轴承连接起来(如上面第三张图)。然后我在里面又加入了一些激光切割出来的零件,但总的原则还是不变。我已经将这个设计以EPS文件开源,尺寸是一张ponokoP1大小的亚克力板。
各部件之间不是固定的,是可以转动的,然后在中间插入一根铜管(见零件列表)。激光切割的零件上都有些地方需要人工用锉子进行打磨,在打磨过程中需要小心些,因为亚克力材料比较脆弱。各零件按顺序全部推放到铜管,如果之间有些松,你可以用一些胶进行固定。我通常将各部分零件堆叠起来,然后在放上最外面的亚克力圆环之前我在铜管周围上放上一些胶。这个上了胶的圆环可以使我在它运行的过程中感到更自信。另外用一些胶在稳定器上也非常重要。
堆叠顺序,从下往上:
1. 大尺寸圆形稳定器
2. 空轴承
3. 圆环垫片
4. 连接竖直悬挂臂的轴承
5. 圆形垫片
6. 连接水平悬挂臂的轴承
7. 圆形垫片(这个垫片我上了胶)
8. 最后是一个木头材料的圆环,作为一个对外的装饰
贡多拉零件设计图:贡多拉
16.绳子和重物
这里写图片描述
你画面的大小取决于窗帘绳或者皮带线的长度。在安装过程中,请确保你的窗帘绳或者皮带线至少可以从链轮齿端延伸到你最大的画纸的对角上。另外不要忘记了留出一些长度,用来夹住你的平衡重物:只要窗帘绳或者皮带线的一端扣在贡多拉上。
平衡重物的话,我使用了螺栓,在上面套上垫片。但你也可以使用其他东西作为代替,例如在袋子里放一些重物也是一种不错的选择。重物的重量并不是很重要,这个机器并不需要绝对的平衡。重物的作用只是让贡多拉在机器画图区域的顶上方中间自然得悬挂。我每个重物大概是150克左右。
接下来,你甚至可以用带有珠子的窗帘绳给你的贡多拉做些造型后再连接,让它好像是蒸汽朋克风格的电弧反应挂饰。(这边不知道怎么翻译了哈)我经常这样做,这样会让我感到很有能量。去做吧,坏小子们!
嗯哼~~或者你直接将贡多拉放在机器上,绳套入链轮齿。如果你马达固定方式是像我一样的前置式,你应该做之前先仔细思考下如何避免各种绳线搅扰在一起。(译者注:这边窗帘绳可以用皮带线或是钓鱼线取代,但相应的滚轮也要改变)
17.画板
这里写图片描述
再次打开控制软件,然后切换到setup部分:
设置:
Machine width
Machine height
依次输入你自己测量出来的数据,单位是毫米。其中Machine height这一项并不是非常重要,因为它并不会影响构图,但它会影响灰色区域在你屏幕上显示的大小,因此还是尽量精确些为好。当你调整这些数值时,你会发现代表机器的灰色区域也会实时随之改变。
你也可以改变画纸的宽度和画纸的坐标。除非你有比这个更宽的机器,否则page pos y这项还是设定为120。
除了这些,画纸的大小和坐标都是虚拟出来,用来辅助你正确得去设置画纸大小。通过centre page按键,你可以水平得将画纸放置在中间。
零点有一个预设的坐标,地点是在你画纸的上边界的中点。如果零点颜色是灰色的,那么点击centre homepoint重新校准。你也可以自己任意位置设零点,如果你不想把它定在那里。(或许因为某些原因)
现在点击save properties,防止你再次打开软件时还要重新设定。
进一步设定:
如果你使用了和我不一样的电机,或者其他的链轮齿,那就重新设置:
1.stepsPerRev:这项代表你电机转一圈所需要的步数。好的,事实上,我们这边需要将它翻一倍,因为我在软件中使用了一种交错的运转方式—它产生了一种类似中间的运转。我自己的步进电机每转需要400步,所以这一项设定成800。
(译者注:使用了EasyDriver作为电机驱动,在默认情况下,这项参数应该是1600)
2.mmPerRev:这项代表每转一圈窗帘绳运动的长度。很明显,它就是链轮齿的周长,换到带有珠子的绳索,则相当于8段珠子部分的长度。
(译者注:我自己用的是36齿链轮,参数设定为71)
3.step multiplier:(没有在图中显示出来)这项代表你电机每一大步中包括了多少小步。对这个机器来说,应该设置成1。
如果你正在修改这些设置,你最好修改完后保存然后再次打开控制软件。这里面包括了许多其他的基于这些参数的计算,所以重启一下会更好些。
19.下载
现在你应该看到在屏幕上的尺寸已经改变,控制软件已经知道了你机器的真正大小。但是机器本身还不知道。
你应该切换到setup部分,然后点击Upload machine spec将信息下载到机器。(这个非常重要,否则会出现严重的定位错误)这些信息会保存到Arduino的EEPROM上,这样即使在没有电的情况下信息任然可以保存。除非你要再次改变器件大小,否则不要去设置它。这些信息不包括画纸的大小,只是机器大小。
如果你对此感到好奇(你为什么不呢Download machine spec(如果遇到无法定位相关的问题,可以通过执行这一命令来帮助解决问题)会反向得进行信息回传-它会将机器参数恢复成之前保存的。如果你自己删除了你的设定文件,并且不想再次测量机器,那这个功能会对你很有帮助。
请记住如果你没有点击save properties的话,你这些设置的参数在下次打开软件时不会进行更新。如果你修改了某些参数的话,记得一定要及时保存。
(译者注:如果发现画图轨迹错乱或是其他一些诡异情况,就使用Download machine spec来查对下arduino中的参数是否与你自己设的参数是否一致,我有很多错误都是因为这个缘故)
20.运转起来
你需要在每次画图之前进行校准。其中包括了告诉笔在哪里。首先点击Input 部分中的Set home,然后手动得将贡多拉移动到我们之前测量出来的实体零点上。
点击Set home锁住电机,他们已经接上电,因此他们会一直抓紧贡多拉,直至你去取消。
那就是了!
点击Move pen to point让贡多拉在画板上移动。电机的声音应该是柔和的,笔在运动的过程中也应该如此。如果你发现你的电机有些滑轮——主要是发生在画板的边缘,或者是电机运作得过快时—你应该重新校准。只要贡多拉真实的坐标与机器所认为的不一致,那么你画出来的图案会很错乱、糟糕,会让你大失所望。
标准的最大速度是每秒钟600步,加速度是每秒钟700步。切换到setup部分,左键一直按着send speed,通过上下拉拽鼠标来改变参数。你也可以在第25栏中用+和-来增大减小最大速度,用/和*来增大减小加速度。这些改变速度的命令也会跳到右上边的控制命令列表中——它们是优先的,你可以看到他们以蓝色字体出现在列表中。
21.加入图片
这里写图片描述
如果你将一个小舵机固定在贡多拉上,那你就可以使用它来让笔尖离开画纸。在驱动电路板上有两个舵机连接部分,如果你连接了SER1,就可以实现软件对它的控制。我在舵机上加了一个角状零件,通过舵机带动这个零件戳在画板上来使画笔离开画板。
可以通过手动按下#或者~来提起放下笔。这个过程不是很精确,但却是可以保证在结束画画时防止笔的墨水渗出。当你开始画画时,这些命令会在开始和结束的时候执行。
25.笔尖的直径
笔尖的大小决定了一个像素由多少波纹组成。如果你像素是20平方毫米,而你的笔尖是1毫米的,那么该像素内你最大只能容纳20条线。加入更多的墨水也不会使它变得更深。
如果你换成0.5毫米的笔尖,那么20条线可就填不满这个像素了,而是需要40条线。机器会基于你设定的笔尖大小,尽可能得以最大密度去作画。
你可以切换到setup部分,通过改变pen tip项的参数值来改变实际效果,然后点击send pen tip size。笔尖的大小不会存储在机器中,需要你每次打开软件时上传,这就是为什么每次重启时这个命令都会预存在命令列表中。
测试笔的直径
并不是只能依赖厂家所描述的笔尖直径,这里也还有另外一种测试笔尖宽度的方法—在画纸上以最大密度画出一连串像素,但每个像素之间都会有根据设定的增长,因此当笔尖的厚度达到你想要的最深密度时,你可以尝试着去减小些。
在setup部分中,有三个相关设置用来控制测试的大小:
Pen test start tip—这是初始部分的笔尖大小,应该尽量小些。
Pen test end tip—这是机器会尝试的最大笔尖宽度。
Pen test Inc tip—这是机器从开始部分到结束部分之间笔尖宽度的增量。
如果开始部分笔尖大小被设置成0.6,结尾部分是2.0,增量是0.1,那么机器会画出第一个像素就好像它有一个0.6mm笔尖大小的笔,之后画得更宽,每次增长0.1mm,一直增加到2mm。
一旦你决定了你想要的,那就将笔尖直径设置成你所需要的,然后点击save properties。
26.适量做图
配合新控制软件,可以使用矢量图作画功能,这让机器变得更有用。
使用Inkscape软件
所有的路径需要以SVG格式文件分离。文字需要转换到这些路径中。你可以通过选择任何事物,然后进入Path->Object To Path来完成上面所说的,(这可以将任何形状比如字母变成轮廓),接下再次选择它们,执行Path->Break Apart(这可以打破多轮廓的字母)。在将填充的颜色变成透明后,你会发现这个功能很有用(在底部点击empty swatch),然后将轮廓设置成黑色(在底部点击black swatch)。保存。
切换到input部分,点击load vector,选择你的SVG格式文件。如果你看不到你的矢量图,点击“move vector”,然后你可以看到它更随你的鼠标移动而移动。再次点击放置SVG图片。你可以通过拉拽“resize vector”来控制它大小。这里100代表了它最大的尺寸,inkscape中的一个1px代表了机器中的1mm。
控制软件只会将线画在page区域中。
现在点击rendervector来将线条艺术装换成polargraph命令,然后将这些命令下载到命令列表。对于矢量画作品,move direct命令是用来告诉机器要移动的坐标,然后它就会在画纸上画出一条直线。下面的部分会有一些慢,那是因为它主要是一条线段分割成若干条更细的线条,需要不停地做更多的计算。
如果你将矢量图隐藏起来(show vector),你就可以看到存放在控制命令列表中(show queue preview)的线条直观得预览显示出来。
(译者注:最后这一部分没有认真得翻译,主要也是自己没有亲自试验过,大家自己去尝试)

Processing1.51版本和资源包(arduino程序和processing控制软件):http://pan.baidu.com/s/1gdIjUPd
里面涉及Java环境安装,jdk下载:http://pan.baidu.com/s/1o6HpJcA 配置教程:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html

来源:章爱宾

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月28日
下一篇 2018年6月28日

相关推荐