电子说
步骤1:
这是一个示意图,显示了三丰电缆的接线方式。在此应用程序中未使用的电缆的千分尺末端有一个红色的“数据”按钮,因此我们决定将其用作“菜单”按钮。
步骤2 :将电缆连接到Arduino
Arduino连接带有一些组件的三丰电缆。一个2x5带罩的插头,与电缆的母插头配对,带有一个PN2222A晶体管和两个10k Ohm电阻器。一个电阻与PN2222A一起使用以保护千分尺(或卡尺)免受过大的电压,另一个电阻将“菜单”按钮偏置到+ 5vdc。
我已经提供了PN2222A的数据表和驱动器我们现在使用的基于CH340的Arduino Nano。
步骤3:读取Mitutoyo输出
代码(感谢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步:更多辅助示意图
还有其他几个我们添加的外部连接。首先,一对“采样”按钮(脚和手指)用于在平均之前使用齿轮的3个点进行采样测量,并使用最终的平均值(如果采样相距太远则拒绝)。第二,是uVGA卡的复位电路。
步骤5:输出到VGA
使用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(指定数据在接收端指向的变量)和数据包的结尾符号)。这使得多个目标数据的传递非常可靠。
全部0条评论
快来发表一下你的评论吧 !