自制开源的串口数据采集卡,可作为LabVIEW数据采集卡和其他语言调用

MakerHub开源硬件系列文章之一:数据采集卡-数字输出

作者:everddm,微信公众号:MakerHub
在这里插入图片描述


这是一个开源的硬件+对应的开源软件+应用示例,可以商用,转载请注明出处
LOGO左边是LabVIEW,右边是一个小螺丝刀,我自己画的,还蛮好看的。


前言

MakerHub开源系列之一,主要是一个以Atmega328P为主要核心芯片的串口采集卡。
一、有开源的PCB文件
二、有Atmega328P的源码
三、有对应的LabVIEW程序
四、其他语言也可用,只要是可读串口的都可用


一、MakerHub开源硬件是什么?

MakerHub开源硬件是一种超低成本的LabVIEW开源开发硬件,主要作为数据采集卡来使用,用以替代官方高成本的USB6008等和CDAQ系列。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.PCB板

PCB板可以直接在以下链接下载,目前只支持GitHub,后期会同步到CSDN和码云。
目前还只是beta版本,V0.9,慢慢完善中。。。
下载了直接去加工就好了,也可以做定制化的修改。
如果您有更好的主意,也欢迎在帖子下面留言,我可能会吸收进开源系列中哦。
目前某创、某配加工双层板子,打样5块板都免费。
这里也有我已经做好焊好的,目前纯手工做的,有需要可以选择。
https://item.taobao.com/item.htm?spm=a230r.1.14.16.11a67867DsRguH&id=651706509793&ns=1&abbucket=19#detail
目前还只是beta版本,V0.9,慢慢完善中
在这里插入图片描述
在这里插入图片描述

2.Atmega328P的源程序

其实Atmega328P就是Arduino Nano的主控:
在这里插入图片描述
所以需要安装Aruino IDE,这个IDE是我学习编程以来,除了谭志强C语言之外,安装最简单的IDE,所以请电脑屏幕前的你不要慌,官网下载之后双击就完事了。至于下面的程序如何烧进芯片,网上大把大把的教程。

这是源代码(GitHub跟这个一样,但是之后可能也许大概会更新):

/*
  by MakerHub,微信公众号也是:MakerHub
  www.LabVIEWMakerHub.cn
  Github地址:
  码云地址:
  
  用来将数字和模拟IO口发送给串口,可以用LabVIEW调用;
  14个Digital Input或者Output,或者可以自由设定;
  还有ADC和PWM可以用;

*/
String SerialOrder = "";
bool stringComplete = false;
int i =0;
  
void setup() {

  Serial.begin(9600);
//  Serial1.begin(9600);
  //inputString.reserve(200);
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  SerialOrder.reserve(200);

}

void loop() {

   if (stringComplete) {

    
//    Serial.println(SerialOrder);    (char)Serial.read();
    if(SerialOrder.substring(0, 4) == "A33A" && SerialOrder.substring(31,35) == "A99A"){
      //PIN0
      if (SerialOrder.substring(4, 5) == "1") {
       digitalWrite(0, HIGH);
       digitalWrite(LED_BUILTIN, HIGH); 
         } else {         
          digitalWrite(0, LOW);
          }
      //PIN1
      if (SerialOrder.substring(6, 7) == "1") {
       digitalWrite(1, HIGH);
         } else {         
          digitalWrite(1, LOW);
          }
      //PIN2
      if (SerialOrder.substring(8, 9) == "1") {
       digitalWrite(2, HIGH);
         } else {         
          digitalWrite(2, LOW);
          }
      //PIN3
      if (SerialOrder.substring(10, 11) == "1") {
       digitalWrite(3, HIGH);
         } else {         
          digitalWrite(3, LOW);
          }
      //PIN4
      if (SerialOrder.substring(12, 13) == "1") {
       digitalWrite(4, HIGH);
         } else {         
          digitalWrite(4, LOW);
          }
      //PIN5
      if (SerialOrder.substring(14, 15) == "1") {
       digitalWrite(5, HIGH);
         } else {         
          digitalWrite(5, LOW);
          }                             
       //PIN6
      if (SerialOrder.substring(16, 17) == "1") {
       digitalWrite(6, HIGH);
         } else {         
          digitalWrite(6, LOW);
          }                             
       //PIN7
      if (SerialOrder.substring(18, 19) == "1") {
       digitalWrite(7, HIGH);
         } else {         
          digitalWrite(7, LOW);
          }                             
      //PIN8
      if (SerialOrder.substring(20, 21) == "1") {
       digitalWrite(8, HIGH);
         } else {         
          digitalWrite(8, LOW);
          }                             
       //PIN9
      if (SerialOrder.substring(22, 23) == "1") {
       digitalWrite(9, HIGH);
         } else {         
          digitalWrite(9, LOW);
          }                             
       //PIN10
      if (SerialOrder.substring(24, 25) == "1") {
       digitalWrite(10, HIGH);
         } else {         
          digitalWrite(10, LOW);
          }                             
       //PIN11
      if (SerialOrder.substring(26, 27) == "1") {
       digitalWrite(11, HIGH);
         } else {         
          digitalWrite(11, LOW);
          }                             
       //PIN12
      if (SerialOrder.substring(28, 29) == "1") {
       digitalWrite(12, HIGH);
         } else {         
          digitalWrite(12, LOW);
          }                             
       //PIN13
      if (SerialOrder.substring(30, 31) == "1") {
       digitalWrite(13, HIGH);
         } else {         
          digitalWrite(13, LOW);
          }                             
       }
      
    stringComplete = false;
    SerialOrder="";
  }
//  Serial.println(SerialOrder);
    i+=1;
  if(i>1000){
    i=0;
  }

  if(fmod(i,12)==5){
      // 读取A6引脚的模拟信号:(范围0 - 1023)转为(0 - 5V):
  int sensorValueA6 = analogRead(A6);
  int sensorValueA7 = analogRead(A7);
  // 输出
  Serial.println("A55A"+String(sensorValueA6)+"-"+String(sensorValueA7)+"A66A"); 
//    Serial.println(i); 
  }
  
  delay(10);

}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    SerialOrder += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

3.LabVIEW上位机程序

其实就是读串口处理串口数据:
在这里插入图片描述

LabVIEW是用2014版本写的,我觉得现在基本上所有的人都比2014版本新,可以保证大家不用找人保存低版本。


总结

以上就是今天要讲的内容,以后会陆续更新模拟信号输入输出采集板,估计还会有基础的高速多路热电偶采集板等等等等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值