步进电机写字机器人程序
- 格式:doc
- 大小:22.00 KB
- 文档页数:9
一、电子琴1、连线:按键K1~K7与P10~P16相连,蜂鸣器与P33(INT1)相连。
2、流程图3、程序#include "reg51.h"sbit P3_3=P3^3;unsigned char idata i,tl0_temp=0,th0_temp=0;void INTTO() interrupt 1{TH0=th0_temp;TL0=tl0_temp;P3_3=~P3_3;}main(){P1=0Xff;TMOD=0X01;ET0 =1;EA =1;TH0=0;TL0=0;TCON =0x10;while(1){i=P1;if(i==0xff)TR0=0;if(i==0xfe){th0_temp=0xfC;tl0_temp=0x42;TR0 =1;}if(i==0xFD){th0_temp=0xFC;tl0_temp=0xAE;TR0=1;}if(i==0xFB){th0_temp=0xFD;tl0_temp=0x0A;TR0 =1;}if(i==0xF7){th0_temp=0xFD;tl0_temp=0x35;TR0 =1;}if(i==0xEF){th0_temp=0xFD;tl0_temp=0x82;TR0 =1;}if(i==0xDF){th0_temp=0xFD;tl0_temp=0xC8;TR0 =1;}if(i==0xBF){th0_temp=0xFE;tl0_temp=0x05;TR0 =1;}}}二、步进电机1、连线P1.0---P1.3依次连接A-DP3.4—K2 调节转向P3.5—K1 调节转速2、流程图3、程序#include "reg51.h"sbit SW1=P3^4;sbit KEY1=P3^5;bit Key1Flag;void DELAY(unsigned char dly){unsigned char i,j;for(i=0;i<dly;i++)for(j=0;j<255;j++);}void Mode1_deasil(unsigned char dly){P1=0x01; //ADELAY(dly);P1=0x02; //BDELAY(dly);P1=0x04; //CDELAY(dly);P1=0x08; //DDELAY(dly);}void Mode1_anticlockwise(unsigned char dly){P1=0x08; //DDELAY(dly);P1=0x04; //CDELAY(dly);P1=0x02; //BDELAY(dly);P1=0x01; //ADELAY(dly);}main(){unsigned char counter;counter=10;while(1){if(SW1==1)Mode1_deasil(counter);elseMode1_anticlockwise(counter);if((Key1Flag==0)&&(KEY1==1))Key1Flag= 1;elseif((Key1Flag==1)&&(KEY1==0)){DELAY(50);if(KEY1==0){Key1Flag=0;counter=counter+50;if(counter>=250)counter=50;}}}}三、直流电机1、连线P3.5—PWM0-5V输出---直流电机输入(至D/A)P1.1 ——K1P1.2——K22、流程图3、程序#include "reg51.h"sbit PWMout=P3^5;sbit KEY1=P1^1;sbit KEY2=P1^2;bit Key1Flag;bit Key2Flag;unsigned char Th0_temp,Tl0_temp;void DelayS(unsigned int dly);void key_check(void);void INTTO() interrupt 1{TR0=0;PWMout=0;}void INTT1() interrupt 3{TL0=Tl0_temp;TH0=Th0_temp;TR0=1;PWMout=1;}void DelayS(unsigned int dly){unsigned int i;for(; dly>0; dly--){for(i=0; i<1000; i++);}}void key_check(void){if((Key1Flag==0)&&(KEY1==1))Key1Flag=1;else if((Key1Flag==1)&&(KEY1==0)){DelayS(10); //k1按下加速if(KEY1==0){Key1Flag=0;Th0_temp-=0x10;if(Th0_temp<=0) Th0_temp=0x10;}}else if((Key2Flag==0)&&(KEY2==1))Key2Flag=1;//k2按下减速else if ((Key2Flag==1)&&(KEY2==0)){DelayS(10);if(KEY2==0){Key2Flag=0;Th0_temp+=0x10;if(Th0_temp>=250)Th0_temp=0xF0;}}}void main(){TMOD=0x11;TL0=0x00;TH0=0x70;Th0_temp=0x70;Tl0_temp=0x00;TL1=0x00;TH1=0x00;ET1=1;ET0=1;EA=1;TR1=1;while(1){key_check();}}四、串口通讯1、连线实验箱仿真头的TxD,RxD接用户串行口的TxD,RxD。
工业机器人写字项目实施资料制作:工业机器人协会目录第一章、SOLIDWORKS Explorer 操作 (3)第二章、ROBOGUIDE 仿真操作 (10)一、工作环境的建立 (10)二、工具坐标系的设置 (14)三、用户坐标系的建立 (17)四、TP文件的生成 (18)第三章、实操部分操作 (21)一、文件的导入 (21)二、坐标系的建立(该方法适用于抓手非倾斜的情况) (24)三、程序偏移的设置(方法一) (25)四、程序偏移的设置(方法二) (26)五、运行调试程序 (30)第一章、SOLIDWORKS Explorer 操作1.图标图1- 12.双击图标,进入操作页面图1- 23.新建SOLIDWORKS文件,选择形式图1- 34.选择基准面(ps:任何基准面都可以)图1- 4 5.打开并选择文本框图1- 5 6.在文本框内输入文字图1- 67.修改字体(ps:将勾取消,点击字体)图1- 78.选择字体及字体样式,点击“点”,选择字体大小图1- 8 9.初始文字图1- 9 文字模型图1- 10 确定模型10.拉伸文字图1- 11 调整文字基体的长度,厚度图1- 12 通过凸台拉伸文字前方向或后方向11.保存文字模型并选择保存格式图1- 13 选择文件保存,选择IGS格式图1- 14 输入文件名,完成模型第二章、ROBOGUIDE 仿真操作一、工作环境的建立1.新建一个机器人仿真程序图2- 12.默认选项至第六步,选择Robot H863 M-10iA图2- 2 机器人选择3.默认选项至完成图2- 3 完成选项4.输入2,完成操作图2- 4 机器人类型5.仿真界面后,在Cell browser中的parts→Add Part中选择Single CAD File 添加Part图2- 5 添加工件6.在计算机中查找你所写的IGS文件并选择它图2- 6 选择工件7.对Part的尺寸进行编辑,这里设为十倍图2- 7 设置工件尺寸二、工具坐标系的设置1.用工具坐标系9进行工具的添加与调整,右击UT:9选择Add Link→Cylinder,编辑工具尺寸,调整其位置如图图2- 8 添加工具2.双击UT9,勾选Edit UTOOL,调整TCP点位置,点击Use Current Triad Location确定图2- 9 调整工具坐标系3.右击Fixtures选择Add Fixture→Box图2- 10 添加Fixtures 4.令Fixture的长为297,宽为210,调整好其位置图2- 11 设置Fixtures5.在Fixture上添加Part ,即在其界面中的Parts里勾选Part1,使其w值为90,调整好Part 的位置如图图2- 12 添加设置Part6.通过示教器将机器人调整到一个合适的位置图2- 13 调整机器人位置三、用户坐标系的建立1.在GP1→UserFrames中选定UF9,勾选Edit UFrame,调整用户坐标系图2- 14 设置用户坐标系四、TP文件的生成1.在Teach中选择Draw Part Features,准备描点图2- 15 找描点方法2.点击你所写的字,再在CAD-TO-Path中点击Edit Line,继而在你所建的模上描轨迹(线必须与模型垂直)图2- 16 描点3.完成画轨迹之后,双击左键,跳出Fixture1 Part1界面,将用户与工具坐标系均改为九,点击Generate Feature TP Program生成TP文件图2- 17 建立TP文件4.打开TP文件,在示教器中调整工件上点的位置(在示教器上找点,然后在工件上把它拖动到合适的位置)图2- 18 调整点的位置5.找到你所建立的TP文件,保存到合适的位置,以便导入机器人示教器上图2- 19 保存文件第三章、实操部分操作一、文件的导入1.将可用的USB插入TP上的接口(注:系统重装盘无用)。
写字机器人机器人制作与创新创新一机器人写字机器人在我们的生活中应用越来越广泛,例如家务机器人、表演机器人、消防机器人、医疗机器人等。
在写字机器人的制作与创新过程中涉及到了单片机、电子技术、传感器、自动控制、电机技术、机械传动机构等相关知识。
利用单片机的可编程性、易控制、搭接电路简单、工作稳定、性能优越、价格低廉等特点,结合检测传感技术,综合应用到控制系统中,使写字机器人实现智能化。
该写字机器人可用作教师的辅助教学设备和机器人的实践设备等。
一、写字机器人的硬件设计写字机器人的整体结构如图1 所示图1 写字机器人的整体结构1(写字机器人的X轴运动写字机器人X轴的运动主要是通过控制底盘上的四个直流电机来实现,对单片机进行编程实现对机器人X轴的运动控制,写字机器人X轴如图2所示:图2 写字机器人X轴运动1机器人制作与创新2(写字机器人Y轴的运动写字机器人Y轴的运动采用的抽屉的滑轨配合齿轮齿条传动机构来实现的,具体的硬件的搭接方法如图3所示:图3 Y轴的运动单片机通过控制电机转动带动齿轮和齿条的运动来实现Y轴的上升和下降,从而实现“竖”笔画的书写3(写字机器人Z轴的运动写字机器人Z轴的运动采用的方法同Y轴的方法是一样的,Z轴的运动主要实现笔的进笔和出笔。
具体的硬件搭接方法如图4所示:图4 Z轴的运动二、程序设计1(写字机器人编程语言的选择机器人软件开发平台可以使用LOGO语言、QBASIC语言、汇编语言、C语言四种编程语言,而LOGO语言、QBASIC语言和C语言这三种语言的编程相对比较简单,但是占用程序存储空间比较大,而要在黑板上写出“北京仪表学校”六个字需要的程序存储空间比较大,而单片机只有4K的程序存储空间,所以这三种语言是不能选择的。
最终写字机器人采用的是汇编语言,虽然汇编语言的编程相2机器人制作与创新对来讲比较复杂,但是它属于底层语言(机器语言),占用空间比较小。
2(单片机存储器跨页的问题的解决机器人软件开发平台如果采用QABSIC语言进行编程,如果程序超过存储器容量的40,后,程序就不会按照编写的程序来执行,程序将出现跑飞,其主要原因是PIC单片机的程序存储器是分页进行存储的,采用QBASIC语言进行编程无法解决分页的问题,所以只能写在第0页上,无法写到后续的存储页上,这样写的程序的容量就受到了限制,这也是为什么采用汇编语言的第二个原因。
基于Arduino的CoreXY结构写字机器人设计随着社会的不断发展,物质文化不断丰富,人们对精神追求越来越高,公众对传统印刷品印刷文字和图像的满意度越来越低。
传统印刷需要大量的墨盒,墨盒的成本非常高,基于此我们团队设计并构建了这款基于CoreXY的书写机器人。
该系统将图像上传到主计算机进行图像识别,然后根据相应的固件进行转码并存入Arduino Mega2560,通过串口通信发给带有固件的Arduino并将其转换为相应的数字信号。
Arduino UNO R3控制板处理的信号通过相应的控制X轴,Y 轴作用于两个步进电机和舵机形成相应的联系,从而写出相应的文字和图像。
标签:写字机器人;Arduino;步进电机;舵机;CoreXY结构1 引言CoreXY结构的写字机器人不需价格高昂的墨盒,一只有墨水的笔和用电脑录入相应的文字便可完成相应的书写。
此机器人结构简单,无需太多的空间便可完成工作,通过对写字机器人的研究,有助于降低成本并且得到同样的书写效果。
本技术报告主要包括机械系统,硬件系统,上位机部分和控制部分,并说明我们的设计思路和解决方案。
机械结构的独特设计以及硬件系统的互相配合,完成了相应功能,在设计的过程中主要考虑制作的成本、机器的书写原理和怎样实现的等问题。
2 系统的整体设计创乐博DrawRobot负责接受文字及图像,并将接收到的文字和图像信息转为G代码,然后用一块Arduino Mega 2560,把Arduino Mega2560当作上位机并且与下位机进行通信,将G代码以两块板子的串口通信发送给控制板。
在下位机中,Arduino UNO R3控制板接受主机通过串口发送的G代码,通过画笔源码生成的固件将G代码识别转换成相应的电机的状态并将信号发送到CNC Shield V3扩展板和电机驱动板A4988[1]。
步进电机是机器人的动力部分。
从A4988接收的信号控制电机的正向和反向转速。
每次输出控制脉冲时,步进电机前进或后退。
实训指导书:项目六写字机器人工作站实训目标:【知识点】➢掌握工业机器人相关运动指令➢掌握工业机器人程序编写方法➢能正确对工业机器人程序文件管理➢工业机器人调试与运行【技能点】➢工业机器人写字运动规划➢工业机器人操作方法➢工业机器人写字工作站调试实训准备:一、实训器材1. HSR-JR612机器人1台,并在法兰面上安装水性笔;2. 机器人安装座1个;3. 安全围栏;4. 安全帽(操作人员佩戴)。
二、安全注意事项(1)操作机器人时佩戴安全帽;(2)投入电源时,请确认机器人的动作范围内没有人员;(3)初次使用时应两名学生配合,一人操作示教器,另外一人站在电控箱旁,发现异常后及时按下电控箱上的红色急停按钮;(4)在点动操作机器人时要采用较低的速度倍率;(5)在按下示教盒上的点动运行键之前要考虑机器人的运动趋势;(6)要预先考虑好避让机器人的运动轨迹,并确认该线路不受干扰;(7)机器人周围区域必须清洁、无油、水及杂质等。
相关知识:一.写字机器人工作站的组成写字机器人,其实就是工业机器人按照字体的笔画进行走轨迹运动。
机器人走轨迹有两种方法可以实现,一种是示教点位,另外一种是在电脑里面生成轨迹程序导入机器人控制器,也就是离线编程。
关于离线编程,在本项目最后拓展会简单介绍,因本控制系统不支持离线编程,故本项目采用示教点位的方式来实现机器人写字功能。
在本工作站中,还是使用HSR-JR612机器人作为写字机器人,为了便于现场实际教学,本写字教学工作站就地取材,利用实训室现有材料搭建,组成清单如下表6-1所示。
表6-1 工作站清单工作站实物图如图6-1所示。
图6-1 写字机器人工作站实训任务:利用安装在机器人夹具上的水性笔,在白纸上写上“CD”两个字母。
1.规划机器人运动路径;2.示教程序及机器人点位位置;3.调试机器人程序让机器人自动完成动作。
操作要点:1. 完成机器人新的工具坐标系设置2. 新建写字程序3. 示教写字程序;4. 调试与运行写字程序。
新人0基础教程写在前面的(有点工科基础的就不要看了)说一下DIY这个东西哈。
DIY的存在似乎总是开始于人们想省钱的心理。
为了少付出,人们难免要选择"自己做",而放弃"别人/机器做"。
十几年前的"打家具热"着实让许多人过了一把"DIY瘾",就是因为不少人算了经济帐后,觉得自己做比买、比请人做都实惠,才纷纷自己动手做将起来。
由于规模经营使得工业化生产成本远低于人工生产成本,花费不高还方便,人们可能就不会死抱住DIY不放了。
但是当人们看腻了市场上工业产品的千篇一律,或千篇一律的市场的市场产品无法满足自己家的特殊需要,"Do it yourself"(我自己动手做)的念头就可能油然而生。
做你需要的,做你想要的,做市场上绝无仅有、独一无二的你自己的作品,成为DIY更高层次的追求。
它在过程中给予人的满足则更重要。
工业化生产的确已经日臻完美,越来越多的人已不可能也没必要去掌握旧日能工巧匠的手艺了。
毋需自己动手做,却总仿佛缺了些什么,就象缺少了运动,人就是这么怪,需要贴近自然,需要运动劳作,需要在运动劳作中享受生活的乐趣。
这是DIY又一高层次的追求。
DIY,因为人们的需要而存在。
(人家百科总结很好了,我就不辛苦组词了)还是要讲两句!DIY讲究的是动手的过程,这个过程需要自己去探索去解疑,在这个过程中发挥其想,大胆构思,展现你的个性,这才它的价值所在,乐趣所在,意义所在!DIY过程中你会遇到许多的疑难问题,当你攻克这些问题时,这种这种成就感,这种征服了全世界的成就感,是很难得的,也是非常宝贵的。
DIY亦可以认为是一个不断提高动手能力、培养自信和突破自我的过程。
因为DIY才有了如今眼花缭乱的新奇、绚丽多彩的服饰和时尚新潮的风貌,这源于技术帝帝国数以万计的技术帝们的工匠精神。
DIY要,慢慢来,不要急,“技术帝”要的就是耐心与细心。
会写字的机器人的设计摘要:21世纪,数控技术已成为机械制造业的重要组成部分,是一个国家装备自动化的重要指标。
会写字的机器人是基于数控技术的一个典型的机电一体化设备。
该机器人主要包括一个二维的运动平台及一个运动控制系统。
本机器人系统融合机械设计和软件开发于一身,相对于大型的数控机床,该装置直观简洁。
对于数控技术的学习开发具有重要的意义。
关键词:会写字,机器人,设计,硬件,软件本论文取材于校第十期SRTP—会写字的机器人。
数控技术是机械、电子、控制等多学科多领域结合的产物。
到了二十一世纪,数控技术已经成为机械制造业的重要组成部分,是一个国家装备自动化的重要指标,也是衡量一个国家综合国力和工业现代化水平的重要标志。
本项目所研制的会写字的机器人正是基于数控技术的一个典型的机电一体化的设备。
当前数控教学大多只是进行原理性的介绍,学生对数控技术缺乏感性的认识及动手能力的培养。
使用生产型的数控机床培训费用过于昂贵,存在着安全方面的问题和隐患,也不利于学生对数控原理的了解。
因而我们决定制作一个会写字的机器人,通过该机器人,学生不但可以了解机电一体化设备的结构、组成、传动原理,还能够了解掌握数控软件的开发和应用,在直观上对数控装置形成印象,利于今后进一步学习研究数控装备。
该机器人主要包括一个二维的运动平台及一个运动控制系统。
二维平台采用步进电机+滚珠丝杠实现传动。
运动控制系统采用嵌入式ARM芯片开发,而人机交互使用PC实现。
机械设计部分设计出了二维运动平台及各个方向的传动机构,主轴机构等。
软件部分分析了数控机器人写字的原理,先把文字转化成位图,再提取位图的边界信息和内部信息,生成加工程序的G代码,最后得到设计简单,方便易用的操作界面。
本机器人系统融合机械设计和软件开发于一身,相对于大型的数控机床,该装置直观简洁。
通过该装置的学习,不但可以大幅度提高数控教学的效果,还能够很好的培养学生的动手及设计能力,提高学生对机械数字化装备的兴趣,使学生能更容易地掌握到数控技术的核心知识。
步进电机写字机器人程序/*转动160时,为45度。
25时,向前走1cm*/#include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit diancitie=P2^3;sbit recept_led=P2^4;sbit K4=P3^2;sbit move_car_led=P2^5; sbit recept_ok=P1^4;sbit ledd=P1^1;sbit key=P2^0;extern bit tingzhi;uchar code zheng[8]={0x98,0x1c,0x34,0x26,0x62,0x43,0xc1,0x89}; //正向旋转相序表uchar code fan[8]={0x89,0xc1,0x43,0x62,0x26,0x34,0x1c,0x98}; //反向旋转相序表uchar code zhuan1[8]={0x99,0x11,0x33,0x22,0x66,0x44,0xcc,0x88};//转弯1uchar code zhuan2[8]={0x88,0xcc,0x44,0x66,0x22,0x33,0x11,0x99};//转弯2uchar code luo_bi[8]={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};uchar code qi_bi[8]={0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8};void delay(uint aa) {int x,bb;for(x=0;x<aa;x++)for(bb=0;bb<160;bb++); //1ms基准延时程序 } void qibi(){int i,j;for(i=0;i<50;i++){for(j=0;j<8;j++){P1=qi_bi[j];delay(2);}}}void luobi(){int i,j;for(i=0;i<50;i++){for(j=0;j<8;j++){P1=luo_bi[j];delay(3);}}}int gostright(int z) {int i,j;for(i=0;i<z;i++)for(j=0;j<8;j++){P0=zheng[j];delay(1);}}int goback(int z) {int i,j;for(i=0;i<z;i++)for(j=0;j<8;j++){P0=fan[j];delay(1);}}int turnleft(int z) //左转 { int i,j;for(i=0;i<z;i++)for(j=0;j<8;j++){P0=zhuan1[j];delay(2);}}int turnright(int z) //右转{int i,j;for(i=0;i<z;i++)for(j=0;j<8;j++){P0=zhuan2[j];delay(2);}}int turn45du_left(int time) //左转45度{int dd=0;for(dd=0;dd<time;dd++)turnleft(155);}int xiao45du_left(int time) //左转4.5度{int dd=0;for(dd=0;dd<time;dd++)turnleft(15);}int turn45du_right(int time) //右转45度{int dd=0;for(dd=0;dd<time;dd++)turnright(155);}int xiao45du_right(int time) //右转4.5度{int dd=0;for(dd=0;dd<time;dd++)turnright(15);}int gostright1cm(int time) //前进1cm { int dd=0;for(dd=0;dd<time;dd++)gostright(25);}int goback1cm(int time) //后退1cm {int dd=0;for(dd=0;dd<time;dd++)goback(25);}void main(){while(1){ qibi();//turn45du_left(2); gostright1cm(12); luobi();goback1cm(12);qibi(); //1gostright1cm(17); turn45du_right(2); xiao45du_left(1); goback1cm(8);//gostright1cm(10); luobi();goback1cm(10);qibi(); //2gostright1cm(28);// gostright1cm(10); turn45du_left(2); xiao45du_right(1); goback1cm(5);//gostright1cm(10); luobi();goback1cm(12);qibi(); //3 gostright1cm(31); //gostright1cm(18); turn45du_left(2); goback1cm(8);//gostright1cm(10); luobi();goback1cm(10);qibi(); //4turn45du_left(2); gostright1cm(2); turn45du_right(2); gostright1cm(9); luobi();goback1cm(6);qibi(); // 1行turn45du_left(2); xiao45du_right(1); gostright1cm(5); turn45du_right(2); gostright1cm(6);luobi();goback1cm(6);qibi(); //2行turn45du_left(2); gostright1cm(4); turn45du_right(2); gostright1cm(6); luobi();goback1cm(6);qibi(); // gostright1cm(21); turn45du_right(2); goback1cm(10); luobi();goback1cm(8);qibi();gostright1cm(21); turn45du_left(1) ; goback1cm(19) ; luobi();goback1cm(1) ;qibi();goback1cm(19) ;///* gostright1cm(22); turn45du_left(2); xiao45du_right(2); goback1cm(17); */}}。
重庆科技学院第三届赛课计划报告题目:编号:36成员:电气与信息工程学院2012年1月1日目录1.前言 (3)2.工作原理 (4)2.1直流电机的控制及原理 (4)2.2步进电机的控制及原理 (4)3.作品硬件结构 (6)3.1 单片机最小系统 (6)3.2电机驱动电路 (6)3.3画笔控制电路 (7)4.软件流程图 (8)5.总结 (9)6.附录 (10)1.前言该写字机器人能够智能的写出程序所要求写的字,下载程序在单片机上,接通电源,该写字机器人能够智能的写出一个所要求的字,此程序写的是一个”土”字,写字机器人X轴的运动主要是通过控制底盘上的两个直流电机来实现,对单片机进行编程实现对机器人X轴的运动控制,由于轮子控制采用的是直流电机,导体受力的方向用左手定则确定。
这一对电磁力形成了作用于电枢一个力矩,这个力矩在旋转电机里称为电磁转矩,转矩的方向是逆时针方向,企图使电枢逆时针方向转动。
如果此电磁转矩能够克服电枢上的阻转矩(例如由摩擦引起的阻转矩以及其它负载转矩),电枢就能按逆时针方向旋转起来。
直流电机运行速度比较快,实现机器人的运行比较合适,然后是步进电机,用来实现机器人的落笔和抬笔,由于操作比较要求比较高的精确度,所以要用步进电机实现机器人的落笔和抬笔。
由于机器人的轮子采用的是直流电机,而机器人的写字也需要靠机器人的整体运动而形成字,所有轮子是直流电机整体写出来的字有一定的误差。
不过不会影响机器人的整体效果。
2.工作原理2.1直流电机的控制及原理该机器人只要采用的是轮子上的两个直流电机和拿笔写字的步进电机构成,导体受力的方向用左手定则确定。
这一对电磁力形成了作用于电枢一个力矩,这个力矩在旋转电机里称为电磁转矩,转矩的方向是逆时针方向,企图使电枢逆时针方向转动。
如果此电磁转矩能够克服电枢上的阻转矩(例如由摩擦引起的阻转矩以及其它负载转矩),电枢就能按逆时针方向旋转起来。
图1:直流电机X轴控制轮子运动2.2步进电机的控制及原理步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
写字机器人制作教程2.0在一年前发布了写字机器人1.0,做的比较low,疫情期间在家重新建模,升级了2.0效果图如下:视频教程0基础制作写字机器人详细教程如下:一、材料清单。
1.需购买材料;(图中部分材料买贵了,预算大概在200左右)2.需打印框架;(文末下载链接)3.所有零件展示:二、开始组装。
1.组装笔架及测试,按照视频组装,在控制电路下载过程序的基础上,控制笔架运动;2.组装电机坐及电路盒,电路盒固定在一个电机坐侧面,也可不固定电路盒;3.中心块组装,安装8个直线轴承,以及4个惰轮,用螺栓螺母固定;5.把电机坐、中心块、丝杆、光杆按照图示组装起来;6.按照图片安装同步带并固定;7.安装笔架;8.组装控制电路。
①CNC shield 与Aaduino组装、A4988驱动芯安装、短接片位置;②舵机接线三、向控制电路下载驱动程序。
1.下载安装arduino IDE,安装驱动程序 grbl-servo-master.zip库(视频可见);2.选择芯片类型、及端口号,端口号可在电脑管理的硬件管理中找到;3.编译,上传,上传成功会有提示。
四、写字测试。
1.电脑打开写字软件(网上很多,有破解的和收费的),选择端口号(同arduino IDE中上传端口)、波特率115200、然后连接;2.根据写字机电脑控制软件不同,需要对相应参数进行设置,①知道自己步进电机的步距角,传动齿轮齿数、同步带齿距,计算 X、Y轴每毫米多少步,修改并保存;②调整舵机相关参数,修改并保存;、3.调整X、Y轴方向,与笔运动方向相适应;3.输入文字调整格式,开始书写。
五、各种踩过的坑!1.步进电机要买D轴的,圆轴的一时固定住了,没多久会松;2.直线轴承一共是10个,8个LM8UU 直线轴承,2个LM6UU 直线轴承;3.同步带在选择时要2米,一定要买2米,和店家沟通好;4.步进电机线最短80cm,一共两根,要有接线端子的;C SHIELD 扩展板要一根圆孔电源接线端子;6.螺丝螺母多买一些,可能会突然消失;六、遇到的各种问题(你遇到其它问题可在评论区补充)在写字机器人1.0里已经解决了许多问题,点击前往。
写字机器人的操作方法
写字机器人操作方法:
1. 打开写字机器人的电源开关,等待机器人启动完成。
2. 使用机器人控制面板或者遥控器选择要书写的文字内容和字体样式。
3. 将要书写的纸张放置在机器人的书写区域内,并确保纸张位置正确、固定。
4. 根据需要调整机器人的书写速度、粗细和间距等参数。
5. 按下开始按钮或者通过遥控器发送指令,让机器人开始书写。
6. 当机器人完成书写后,及时关掉电源开关,取出纸张并检查书写效果。
注意:在操作过程中要遵循机器人安全使用规程,确保操作人员和周围环境的安全。
#include<msp430x14x.h>#include <math.h>static char step1_index=0;static char step2_index=0;void delay(unsigned char dy){int i;while(--dy)for(i=0;i<10;i++);} //延时程序void linebase(float x1,float y1,float x2,float y2) //基本的直线运动{ float L1,L2;char step1[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};char step2[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //各个相位对应的值float L12,L11,L21,L22,j,k;L11=sqrt((3.0+x1)*(3.0+x1)+(103.0-y1)*(103.0-y1));L12=sqrt((3.0+x2)*(3.0+x2)+(103.0-y2)*(103.0-y2));L21=sqrt((83.0-x1)*(83.0-x1)+(103.0-y1)*(103.0-y1));L22=sqrt((83.0-x2)*(83.0-x2)+(103.0-y2)*(103.0-y2));L1=L11-L12;L2=L21-L22;j=fabs(L1/6.3*400.0);k=fabs(L2/6.3*400.0); //每个电机所需的脉冲数int a=(int)(j+0.5);int b=(int)(k+0.5); //对脉冲数进行四舍五入while(a--){if (L1<0){if (++step1_index>7)step1_index=0;P1OUT=step1[step1_index];} // 放线else if(L1!=0){if (++step2_index>7)step2_index=0;P1OUT=step2[step2_index];} //收线delay(30);} //延时while(b--){if (L2<0){if (++step1_index>7)step1_index=0;P2OUT=step1[step1_index];} //放线else if(L2!=0){if (++step2_index>7)step2_index=0;P2OUT=step2[step2_index];} //收线delay(30); //延时}}void line(float x1,float y1,float x2,float y2){float p,q,w;int h,c;w=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); //计算两直线之间的总长度c=w*1.6; //总共分的段数,(由调试得出) p=(x2-x1)/c;q=(y2-y1)/c; //每一段的长度for(h=0;h<c;h++){linebase(x1+h*p,y1+h*q,x1+(h+1)*p,y1+(h+1)*q); //调用画直线}}void circle(float Xo,float Yo,float r) //画圆{ int i,s;float angle[37]; //圆分成36份for(i=0;i<37;i++){angle[i]=10.0*i/180.0*3.14; //得出对应的角度}float x[37];float y[37];for(i=0;i<37;i++){ x[i]=Xo+r*cos(angle[i]);y[i]=Yo+r*sin(angle[i]);} //某一角度所对应的坐标for(s=0;s<36;s++){line(x[s],y[s],x[s+1],y[s+1]);} //调用函数画圆}void setback(float x1,float y1) //归位(0.0)函数{line(x1,y1,0.0,0.0);}/*void five_edged_star(float Xo,float Yo,float r){int i;float angle[5]={90.0,162.0,234.0,306.0,18.0};float x[5],y[5];for(i=0;i<5;i++){x[i]=Xo+r*cos(angle[i]);y[i]=Yo+r*sin(angle[i]);}line(0.0,0.0,40.0,80.0);line(x[0],y[0],x[2],y[2]);line(x[2],y[2],x[4],y[4]);line(x[4],y[4],x[1],y[1]);line(x[1],y[1],x[3],y[3]);line(x[3],y[3],x[0],y[0]);} */void main() //主函数{WDTCTL = WDTPW + WDTHOLD; //关闭看门狗BCSCTL2 &=0xc0; //XT2CLK+2分频P1DIR = 0x0f;P2DIR = 0x0f; //设置P1口和P2口为输出line(0.0,0.0,40.0,50.0); //从(0.0)到(40.50)的直线line(40.0,50.0,70.0,50.0); //从(40.50)到(70.50)的直线circle(40.0,50.0,30.0); //以(40.50)为圆心,30为半径画圆line(70.0,50.0,40.0,50.0); //从(70.50)到(40.50)的直线line(40.0,50.0,50.0,50.0); //从(40.50)到(50.50)的直线circle(40.0,50.0,10.0); //以(40.50)为圆心,10为半径画圆line(50.0,50.0,40.0,80.0); //画五角星line(40.0,80.0,22.39,25.73);line(22.39,25.73,67.5,59.3);line(67.5,59.3,13.5,59.3);line(13.5,59.3,56.64,23.70);line(56.64,23.70,40.0,80.0);}。
步进电机写字机器人程序
/*转动160时,为45度。
25时,向前走1cm*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char #define uint unsigned int sbit diancitie=P2^3;
sbit recept_led=P2^4;
sbit K4=P3^2;
sbit move_car_led=P2^5; sbit recept_ok=P1^4;
sbit ledd=P1^1;
sbit key=P2^0;
extern bit tingzhi;
uchar code zheng[8]={0x98,0x1c,0x34,0x26,0x62,0x43,0xc1,0x89}; //正向旋转相序表
uchar code fan[8]={0x89,0xc1,0x43,0x62,0x26,0x34,0x1c,0x98}; //反向旋转相序表
uchar code zhuan1[8]={0x99,0x11,0x33,0x22,0x66,0x44,0xcc,0x88};//转弯1
uchar code zhuan2[8]={0x88,0xcc,0x44,0x66,0x22,0x33,0x11,0x99};//转弯2
uchar code luo_bi[8]={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};
uchar code qi_bi[8]={0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8};
void delay(uint aa) {
int x,bb;
for(x=0;x<aa;x++)
for(bb=0;bb<160;bb++); //1ms基准延时程序 } void qibi()
{
int i,j;
for(i=0;i<50;i++)
{
for(j=0;j<8;j++)
{
P1=qi_bi[j];
delay(2);
}
}
}
void luobi()
{
int i,j;
for(i=0;i<50;i++)
{
for(j=0;j<8;j++)
{
P1=luo_bi[j];
delay(3);
}
}
}
int gostright(int z) {
int i,j;
for(i=0;i<z;i++)
for(j=0;j<8;j++)
{
P0=zheng[j];
delay(1);
}
}
int goback(int z) {
int i,j;
for(i=0;i<z;i++)
for(j=0;j<8;j++)
{
P0=fan[j];
delay(1);
}
}
int turnleft(int z) //左转 { int i,j;
for(i=0;i<z;i++)
for(j=0;j<8;j++)
{
P0=zhuan1[j];
delay(2);
}
}
int turnright(int z) //右转
{
int i,j;
for(i=0;i<z;i++)
for(j=0;j<8;j++)
{
P0=zhuan2[j];
delay(2);
}
}
int turn45du_left(int time) //左转45度{
int dd=0;
for(dd=0;dd<time;dd++)
turnleft(155);
}
int xiao45du_left(int time) //左转4.5度{
int dd=0;
for(dd=0;dd<time;dd++)
turnleft(15);
}
int turn45du_right(int time) //右转45度{
int dd=0;
for(dd=0;dd<time;dd++)
turnright(155);
}
int xiao45du_right(int time) //右转4.5度{
int dd=0;
for(dd=0;dd<time;dd++)
turnright(15);
}
int gostright1cm(int time) //前进1cm { int dd=0;
for(dd=0;dd<time;dd++)
gostright(25);
}
int goback1cm(int time) //后退1cm {
int dd=0;
for(dd=0;dd<time;dd++)
goback(25);
}
void main()
{
while(1)
{ qibi();
//turn45du_left(2); gostright1cm(12); luobi();
goback1cm(12);
qibi(); //1
gostright1cm(17); turn45du_right(2); xiao45du_left(1); goback1cm(8);
//gostright1cm(10); luobi();
goback1cm(10);
qibi(); //2
gostright1cm(28);
// gostright1cm(10); turn45du_left(2); xiao45du_right(1); goback1cm(5);
//gostright1cm(10); luobi();
goback1cm(12);
qibi(); //3 gostright1cm(31); //gostright1cm(18); turn45du_left(2); goback1cm(8);
//gostright1cm(10); luobi();
goback1cm(10);
qibi(); //4
turn45du_left(2); gostright1cm(2); turn45du_right(2); gostright1cm(9); luobi();
goback1cm(6);
qibi(); // 1行
turn45du_left(2); xiao45du_right(1); gostright1cm(5); turn45du_right(2); gostright1cm(6);
luobi();
goback1cm(6);
qibi(); //2行
turn45du_left(2); gostright1cm(4); turn45du_right(2); gostright1cm(6); luobi();
goback1cm(6);
qibi(); // gostright1cm(21); turn45du_right(2); goback1cm(10); luobi();
goback1cm(8);
qibi();
gostright1cm(21); turn45du_left(1) ; goback1cm(19) ; luobi();
goback1cm(1) ;
qibi();
goback1cm(19) ;
//
/* gostright1cm(22); turn45du_left(2); xiao45du_right(2); goback1cm(17); */
}
}。