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
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版本新,可以保证大家不用找人保存低版本。