步进电机写字机器人程序
- 格式: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要,慢慢来,不要急,“技术帝”要的就是耐心与细心。
步进电机写字机器人程序
/*转动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); */
}
}。