如何将数字千分尺连接到Arduino和VGA监视器

电子说

1.3w人已加入

描述

步骤1:

Arduino

这是一个示意图,显示了三丰电缆的接线方式。在此应用程序中未使用的电缆的千分尺末端有一个红色的“数据”按钮,因此我们决定将其用作“菜单”按钮。

步骤2 :将电缆连接到Arduino

Arduino

Arduino

Arduino连接带有一些组件的三丰电缆。一个2x5带罩的插头,与电缆的母插头配对,带有一个PN2222A晶体管和两个10k Ohm电阻器。一个电阻与PN2222A一起使用以保护千分尺(或卡尺)免受过大的电压,另一个电阻将“菜单”按钮偏置到+ 5vdc。

我已经提供了PN2222A的数据表和驱动器我们现在使用的基于CH340的Arduino Nano。

步骤3:读取Mitutoyo输出

Arduino

代码(感谢Mark Burmistrak对我的原始内容所做的修改),它读取数据流,以正确的顺序重新组合并打印测量结果,如下所示:

int req = 5;//mic REQ线通过q1到达引脚5(arduino高电平将请求线拉低)

int dat = 2;//mic数据线连接到引脚2

int clk = 3;//mic时钟线转到引脚3

int i = 0;

int j = 0;

int k = 0;

int signCh = 8;

int符号= 0;

int十进制;

float dpp;

int单位;

字节mydata [14];

字符串value_str;

long value_int;//是一个int,不能测量超过32mm的浮点值;

void setup(){

Serial.begin(9600);

pinMode(req,OUTPUT);

pinMode(clk,INPUT_PULLUP);

pinMode(dat,INPUT_PULLUP);

digitalWrite(REQ,LOW);//将请求设置为高

}

void loop(){

digitalWrite(req,HIGH);//生成设置请求

for(i = 0; i 《13; i ++){ 0;

for(j = 0; j 《4; j ++){

while(digitalRead(clk)== LOW){

}//保持到时钟高电平

while(digitalRead(clk) == HIGH){

}//保持到时钟为低电平

bitWrite(k,j,(digitalRead(dat)&0x1));

}

mydata [i] = k;

}

sign = mydata [4];

value_str =字符串(mydata [5])+字符串(mydata [6])+字符串(mydata [7])+字符串(mydata [8] +字符串(mydata [9] +字符串(mydata [10]) ));

decimal = mydata [11];

units = mydata [12];

value_int = value_str.toInt();

如果(十进制== 0)dpp = 1.0;

如果(十进制== 1)dpp = 10.0;

如果(小数== 2)dpp = 100.0;

如果(十进制== 3)dpp = 1000.0;

如果(十进制== 4)dpp = 10000.0;

if(decimal == 5)dpp = 100000.0;

value = value_int/dpp;

if(sign == 0){

Serial.println(value,decimal);

}

if(sign == 8){

Serial.print(“-”); Serial.println(值,十进制);

}

digitalWrite(req,LOW);结果,延迟(100);

}

第4步:更多辅助示意图

Arduino

Arduino

还有其他几个我们添加的外部连接。首先,一对“采样”按钮(脚和手指)用于在平均之前使用齿轮的3个点进行采样测量,并使用最终的平均值(如果采样相距太远则拒绝)。第二,是uVGA卡的复位电路。

步骤5:输出到VGA

Arduino

使用4D的uVGA-II(SGC)模块获取Arduino的串行输出,并将其显示在典型的vga监视器上。在此说明的最后一步中可以看到执行此操作的代码。特别感谢Rei Vilo在本节中提供的帮助-https://github.com/rei-vilo和http://reivilohobbies.weebly.com/

已由uVGA-代替。 III。

在Arduino草图中,当您要将数据发送到uvga模块时,请使用如下语句:

uvga(“ N”,value);

其中N是uvga上变量的名称,value是包含要传递的值的变量。

在草图的末尾(在void循环的右括号之后)您具有以下功能:

int uvga(char * x,int y){

delay(50);

Serial3.print(“ $”);

Serial3.print(x);

Serial3.println(y,DEC);

}

我在Mega 2560上使用Serial3,但是您可以使用softserial和UNO。

在uvga上运行的代码接受该串行“数据包”,并将传递的值放入传递的变量中,然后可以在屏幕上显示该值。随附了uvga的示例代码。这是一个纯文本文件。您将需要4D的Workshop软件和USB到TTL电缆才能将代码上传到uvga。

步骤6:具有测量采样和Vga输出的完整代码

如果您想了解我们如何应用此特定解决方案,我们将使用它根据测量结果为齿轮组生成箱号。随附的是我们完整的代码,该代码是在Arduino,4D和Arduinohome论坛的许多其他人的帮助下开发的。

较小的文件只是执行以下操作所需的代码显示千分尺的原始读数。将变量“ num”除以1000得到以毫米为单位的输出。

步骤7:现在处于GFX模式(4DGL)

我们刚刚对该项目进行了重大升级。屏幕输出看起来相同,但是所有图形处理已移至uVGA-II。我们从4D系统购买了编程电缆,并上传了新的PmmC文件,该文件将卡从SGC模式(哑模式)切换到GFX(协处理器模式)。这大大加快了程序的运行。我们还集成了“数据包”串行传输功能,该功能以串行数据包的形式将数据发送到uVGA-II,并带有起始符号,数据包ID(指定数据在接收端指向的变量)和数据包的结尾符号)。这使得多个目标数据的传递非常可靠。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分