天天看點

自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結

MakerHub開源硬體系列文章之一:資料采集卡-數字輸出

作者:everddm,微信公衆号:MakerHub

自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結

這是一個開源的硬體+對應的開源軟體+應用示例,可以商用,轉載請注明出處

LOGO左邊是LabVIEW,右邊是一個小螺絲刀,我自己畫的,還蠻好看的。

文章目錄

  • MakerHub開源硬體系列文章之一:資料采集卡-數字輸出
  • 前言
  • 一、MakerHub開源硬體是什麼?
  • 二、使用步驟
    • 1.PCB闆
    • 2.Atmega328P的源程式
    • 3.LabVIEW上位機程式
  • 總結

前言

MakerHub開源系列之一,主要是一個以Atmega328P為主要核心晶片的序列槽采集卡。

一、有開源的PCB檔案

二、有Atmega328P的源碼

三、有對應的LabVIEW程式

四、其他語言也可用,隻要是可讀序列槽的都可用

一、MakerHub開源硬體是什麼?

MakerHub開源硬體是一種超低成本的LabVIEW開源開發硬體,主要作為資料采集卡來使用,用以替代官方高成本的USB6008等和CDAQ系列。

自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結
自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結
自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結

二、使用步驟

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

自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結
自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結
自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結

2.Atmega328P的源程式

其實Atmega328P就是Arduino Nano的主要:

自制開源的序列槽資料采集卡,可作為LabVIEW資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結

是以需要安裝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資料采集卡和其他語言調用MakerHub開源硬體系列文章之一:資料采集卡-數字輸出前言一、MakerHub開源硬體是什麼?二、使用步驟總結

LabVIEW是用2014版本寫的,我覺得現在基本上所有的人都比2014版本新,可以保證大家不用找人儲存低版本。

總結

以上就是今天要講的内容,以後會陸續更新模拟信号輸入輸出采集闆,估計還會有基礎的高速多路熱電偶采集闆等等等等。