Штангенциркуль и Arduino совмещаем

Штангенциркуль и Arduino совмещаем

Чтение информации с цифрового штангенциркуля с помощью Arduino / USB


Как использовать Arduino для считывания сигнала с цифровых штанкенциркулей и отправлять считанные данные через USB.

Зачем?
Это может быть полезно для точного определения местоположения в домашних или промышленных системах автоматизированного производства. Добавляет функцию USB к вашему штангенциркулю. Можно использовать штангенциркуль в качестве датчика линейных перемещений, в качестве датчика нуля инструмента, если вместо штангенциркуля использовать цифровой индикатор, который имеет такую же электронную часть, как и штангенциркуль.

Как использовать Arduino для чтения суппортов (используя очень мало дополнительных компонентов).

Подробная информация о другом протоколе, который, как было установлено, используется на некоторых штангенциркулях.

Предоставляется базовый код Arduino.





Шаг 1: Штангенциркуль








Штангенциркули, с которыми я работал до этого, были Electronic Digital Callipers от Precision Gold. Я купил штангенциркуль Maplin.

После некоторых экспериментов с мультиметром и осциллографом jyetech (очень дешевым базовым осциллографом, который можно купить в виде набора за 40 фунтов стерлингов), я обнаружил, что сигналы на выходе разъема штангенциркуля выглядят так, как показано на диаграмме.





Шаг 2: Напряжение: Логика и питание

















Arduino использует 5 В логику, но штангенциркуль выводит логический сигнал 1,5 В. Это немного не удобно и может не всегда работать, действительно, следует использовать правильную схему преобразования логического уровня, но поток - это простой сигнал, который хорошо работал с моим Arduino:


Мой Arduino имеет разницу между логическим максимумом и логическим минимумом сигнала примерно на 2,5 В (это может немного различаться между разными платами).

Подключим ножку плюса питания разъема на штангенциркулях к источнику питания 3,3 В, а контакты тактирования и данных подключим к ардуине, их напряжение, по-видимому, изменяется от 3,3 до 1,8 В, что, по данным производителей Arduino, является логическими "1" и "0" соответственно.


Включение штангенциркуля с помощью Arduino:

Чтобы избежать необходимости использования батареи в штангенциркулях, можно использовать схему питания (снимите ячейку кнопки) как на рисунке. Этот метод основан на использовании светодиода для регулирования напряжения питания для штангенциркуля, тоесть с функцией стабилитрона.

Резистор Около 200 Ом


Конденсатор я использовал 10uF, который работал хорошо, но не будет никакого вреда если вы используете большей емкости.


Светодиод

Для светодиода попробуйте найти тот, который как можно ближе к 1,6 В или близко к тому.
Я использовал красный светодиод с падением напряжения на 1.8 В. Красный и ИК-светодиоды имеют тенденцию к снижению напряжения на них.



Шаг 3: Протокол и данные




Протокол данных, используемый на моих штангенциркулях, был следующим:

Импульс тактирования, как показано на рисунке.

Чтение данных на заднем фронте тактов дало правильный результат.

Пример вывода данных:


1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, (Показания экрана 0.00 mm или 0.000 inches)
1,0,0,0, 1,0,1,1, 1,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, (Показания экрана 10.00mm)
1,0,0,1, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, (Показания экрана -1.00mm)
1,0,0,0, 1,1,0,0, 1,0,1,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, (Показания экрана 150.00mm)


Интерпретация данных:

?,X,X,X, X,X,X,X, X,X,X,X, X,X,X,X, ?,?,?,?, ?,Y,?,?
? = Не уверен

X для двоичного числа с наименьшим значащим битом в начале строки. Двоичное число - это расстояние в 1000 мм.
Y = Знак бита, если значение Y = 1 отрицательно, если значение Y = 0 положительно.


Примечание: убедитесь, что штангенциркуль настроен на мм, режим дюймов ведет себя аналогично, за исключением того, что младший значащий бит используется для отображения 1/2000-х дюймов.


Шаг4: Arduino программа

Это очень простой код Arduino, который должен быть совместим с несколькими протоколами данных штангенциркуля.
Между значениями есть запятые, чтобы использовать возможность применения CSV-файлов для импорта данных в электронные таблицы.

Основным требованием этого кода является то, что данные считываются на заднем фронте тактового импульса.

Надеюсь, когда вы подключите Arduino к компьютеру и используете программу Serial monitor с частотой 115 200 бод, вы получите нормальное изображение данных.

Поиск неисправностей:
Если длина двоичных строк сильно изменяется, у вас могут быть такты и данные, которые не совпадают.


Code:

//Simple Digital Calliper Reader
//See http://j44industries.blogspot.com/

// Pin Declarations
int dataIn = 11;
int clockIn = 12;

// Variables
int clock = 1;
int lastClock = 1;
unsigned long time = 0;
unsigned long timeStart = 0;
int out = 0;


void setup() {
// Pin Set Up
pinMode(dataIn, INPUT);
pinMode(clockIn, INPUT);


Serial.begin(115200);
Serial.println("Ready: ");
}


void loop(){

lastClock = clock;
clock = digitalRead(clockIn);

if (lastClock == 1 && clock == 0){
out = digitalRead(dataIn)+digitalRead(dataIn)+digitalRead(dataIn); // Tripple sampling to remove glitches
if((micros() - time) > 800){
Serial.println(" ");
}
else if((micros() - time) > 400){
Serial.print(" ");
}

if (out > 1){
Serial.print("1");
}
else{
Serial.print("0");
}
Serial.print(",");
time = micros();
}
}


Написать:
19:21
1048
Нет комментариев. Ваш будет первым!