创建另一个机器人的历史。第二部分,«这是活着!»

延续了一系列关于创建一个简单的轮式机器人单片机ATmega16A。
第二 I>我的职务,我将介绍如何创建并建立自己的机器人。让我们先从印刷电路板和完成作为第一步骤制造(正确地说 - 滚轮)我们的设备。也可以给节目在PC第一次体验到Qt的,即建立通过蓝牙机器人程序管理和数据交换。
如果你愿意,你可以阅读首次公布并了解这一切是如何开始,好了,每个人都要求猫。




最后一部分结束了,在前面我们穿了一件成品PCB布局,那么它的时间来创造和传递的电子版真实有形的世界我们的想法,是不是在每一个无线电爱好者,工程师,发明家的心燃烧的欲望?!在我的怀里了仅有1mm的PCB,所以我没有想到开始转移到绘图板轨道标准战利品的过程。

我的照片的质量表示歉意,但我有一个便宜的电话......




下一步骤是蚀刻!尝试使用过氧化氢和柠檬酸,当然安全和非常便宜的方法蚀刻的一种新的方式,但似乎过于敏感的组分的比例。后神奇操纵容器的溶液处理的一个小时开始与体面功率(应该说,这是可以改变图案板,然后,将所有的腐蚀快得多)。





主板上的磁迹的80-90%,以获得良好的,但由于基本轨道是0.2毫米,抓媒染剂,我与焊料和细线去掉,因为他们做了同样的孔。在一般情况下,整个过程花了下午3点的焊接。





发动机必须转移到板的底部,因为我意识到我需要董事会和你想去的表面之间的最大差距,但仍机器人转向低矮。
一旦我们想起了电机,召回和编码器的想法,因为我是下令直径字面上毫米比轮槽较小的楼体,他们不得不以某种方式解决这个问题,我们也知道这个概念很简单 - 我刚捡起来驱使他们回到海湾在胶枪的同时,是不是很美观,但很快又实用。最主要的是不要使其反转,这将是到侧板,她那么小 - 12磁体在轮子,那就是, 6激活反过来,并用直径43毫米车轮得到遍历在单个操作中对22毫米轮路径。



董事会,反过来,用小间距的调整把霍尔传感器将了解什么方向移动。



用于固定电池,伺服系统和超声波测距仪已经印上了3D打印机就是一些细节。

电池盒。


持有人的农奴。


超声波测距仪的持有人。


一点点微调的细节文件,一切都陷入的地方,到底变成了这样的机器人。





是的,它只是一个珠子,珠子在粗丝,它是迄今唯一未解决的“问题”的设计。事实上,并没有占用第三轮的问题上火podrygat轮捻Servais会面等
从使用1毫米PCB机器人似乎hlyupkim,但因为我们有一个小的质量,这并不影响其力量和敏捷。
那么,首先想骑就行了,可以这么说有自动化控制第一次的经验。
我必须说,我不是一个程序员的职业,这大概是我最薄弱的一点爱好,所以请不要批评太多的代码,在任何情况下,我相信我们将不得不重写整个项目的未来。

写一个实现算法PD测试程序。它由一个中断处理程序ADC和与数据的实际主循环的工作。

的中断处理程序 B>
<代码>#定义FIRST_ADC_INPUT 2的#define LAST_ADC_INPUT 7无符号整型real_adc [8] = {0,0,0,0,0,0,0,0}; unsigned char型sample_adc;挥发性unsigned char型adc_ready = 0; unsigned char型LED灯[8] = {0×21,×41,0x61,0x63,0x23,0x43中};无符号字符adc_inputs [8] = {0,1,2,4,6,7,3,5};中断[ADC_INT]无效adc_isr(无效)////////////// ADC_INT {静态无符号字符input_index = 0;如果(adc_ready == 0){如果(sample_adc == 0){real_adc [input_index] =(符号int)(ADCW);如果(input_index< LAST_ADC_INPUT-FIRST_ADC_INPUT){input_index ++; }其他{input_index = 0; PORTB =发光二极管[input_index] sample_adc = 1; } ADMUX =(ADC_VREF_TYPE&安培; 0xFF的)+ adc_inputs [(FIRST_ADC_INPUT + input_index)]; ADCSRA | = 0X40; }其他{如果(adc_ready == 0){如果(ADCW> real_adc [input_index]){real_adc [input_index] =(符号int)(ADCW); }其他{real_adc [input_index] =(符号int)(real_adc [input_index]); }如果(input_index≤(LAST_ADC_INPUT-FIRST_ADC_INPUT)){input_index ++; PORTB =发光二极管[input_index] }其他{input_index = 0; adc_ready = 1; PORTB&安培; =〜(1<℃下); } ADMUX =(ADC_VREF_TYPE&安培; 0xFF的)+ adc_inputs [(FIRST_ADC_INPUT + input_index)]; }如果(adc_ready == 0){ADCSRA | = 0X40; }}}}中尉; /码>  PRE> 
的PID的实施 B>
<代码>若(adc_ready == 1){adc_l =(real_adc [1] + real_adc [2]); adc_r =(real_adc [3] + real_adc [4]);误差=(adc_l-adc_r); delta_error =错误 -  old_error; // Sum_error + =错误; PID =的Kp *误差+ KD * delta_error +文* sum_error; old_error =错误;如果(PID大于0){pwr_l + =(有符号整数)PID; pwr_r  -  =(有符号整数)PID; }其他{pwr_l + =(有符号整数)PID; pwr_r  -  =(有符号整数)PID; }对于(I = 0; I&≤(LAST_ADC_INPUT-FIRST_ADC_INPUT)1;我++){real_adc [I] = 0; } ADCSRA | = 0X40; adc_ready = 0; sample_adc = 0; }&中尉; /码>  PRE> 

我很高兴地看到,机器人执行分配给它的功能,是不是很确定如何陡峭的影片,绝对流畅和快速linefolower'ami,但对我来说,即使是这样的结果是影响深远。



然后,我平静下来了一点与单片机编程的一部分,并意识到,在未来将需要执行的程序来控制从PC的机器人,并开始研究的Qt,以及作为PC的最新软件,我只在大学里写的(在帕斯卡),这是一些 - 即标准的实验室信息学,我的知识几乎等于零。

offtopic,我的宏伟计划机器人控制与智能手机,我怎么放弃了,得分的想法 B>其实,我最初感到一种冲动,在Android手机编写一个程序,但没有想学习Java,或者说不想远离C,和我有一个朋友,谁在Qt中摸索,这可能是很多要求。起初,我试图了解自己与禅Qbluetooth并尝试对接与HC-05与我的中国嘉裕G3的帮助,但每次我遇到了一个问题,即没有让HC-05和嘉鱼朋友。首先犯了罪的Qbluetooth而事实上,他并不认为HC-05,但在互联网上找到的信息,人们使用QBluetooth或抱怨的朋友对他的艰苦生活后,写自己的图书馆,人们通过蓝牙模块HC开始在线交流1天写了一个程序,并仍设法与机器人进行交流,但遗憾的是通过你的平板电脑。其结果是,证明所有这些,我的中国是不支持RFCOMM,我放弃了,决定写所有的PC。


该方案是切换机器人的模式(在跟进,键盘控制,离线)及发行(套),从利益(伺服系统,传感器,线,超声波测距仪,电机,编码器)的所有传感器的数据。
经过几个星期,写了控制面板的第一个版本控制机器人。很高兴能与GUI Qt中工作 - 方便



程序code'd而不是嵌入的,所以我并没有禁止铜的嘲弄。总之我要说的是程序简单的信号数据的可用性QSerialPort把他们推在标签和窗口小部件,响应计时器,如果需要的话,发送一个预定的数据,如位置和速度伺服电机。在节目绿地是在梦中 - 机器人的位置,前面的未来地​​图

该程序接受的全部信息,并暂时充当一个调试器。尚未实施键盘控制,和离线是非常粗略,只是看到机器人,直到障碍被设置在预定的角度,试图去一个新的方向。在一般情况下,正如我所说,整个项目,直到在软件部分利湿。

在未来,希望推行的是一个小塞子的理解,有必要同时在MC和完全的PC来改变程序雄心勃勃的计划,因为我犯了一个大错误,并开始写这两个节目肿层蛋糕,其中一个测试模块毗邻另一个,而不是一个严格的结构化布线系统。更主要的是不要放弃,并努力直到你心目中的他的头将无法实现在物质世界,因为这是一种业余爱好的意义。

PS在未来,我会尝试写出版的另一部分,可以这么说,我们进入了软件的一部分。

来源: habrahabr.ru/post/256209/

标签

另请参见

新&值得注意