RSS блога
Подписка
Цифровой штангенциркуль 150мм
- Цена: 7.57$
- Перейти в магазин
Несмотря на то, что этот штангель уже был обозрён ранее, и рассказать о такой простой вещи что-то новое трудно — у меня есть некоторые существенные дополнения по технической части.
Обзор, в основном, посвящён непоседам, которые любят находить необычное применение обычным вещам и в курсе с какой стороны хвататься за паяльник.
Речь пойдёт о том самом цифровом интерфейсе, который на штангеле все видели, но никто не знает как им пользоваться.
Можно найти дешевле —
Учитывая специфичность прибора в целом и то, что он не является «предметом первой необходимости» для «широких масс», сразу отмечу что основные цели обзора — во-первых, продемонстрировать, не вдаваясь особо глубоко в технические детали, что интерфейс реально работает, а не является какой-то непонятно-виртуальным технологическим атавизмом, а во-вторых, задать импульс к творчеству заинтресовавшимся.
Про точность
Точность вполне достойная и соответствует заявленным 0.01-0.02мм.
Я замерял этим циркулем советскую калибровочную плашку 70мм — циркуль показал 70.01мм, что, во-первых, соответствует заявленной точности, а во-вторых, неизвестно вообще кто не прав — циркуль или плашка :)
Для чего это надо?
Варианты применения:
• Чтение на компьютер. Например, занесение сразу в Эксель при долгих нудных рутинных замерах.
• Использование совместно с устройством, управляющим точными процессами. Например, для сверлильного/токарного/фрезерного станка. Особенно актуально самоделкиным.
Как сделано у меня
Начну с того, что интерфейс реально работает:
Всё относительно просто. Делаетсятопором из спичек и желудей за один вечер, включая пайку, изучение протокола и программирование конечного устройства (или адаптирование под себя найденного в инете чужого кода).
Лично для меня, основной проблемой было изготовление вилки к разъёму. Расположение контактов в разъёме не стандартное (не SMD), мало того никаких условий для крепления и удержания вилки тоже не предусмотрено. Никакие обломки компьютеров не подходят. В итоге сделал на первое время так: в кусочек стёрки воткнул тонкие пружинные лапки от разъёма LPT, на нужном расстоянии.
Расположение контактов слева направо (штангель экраном к себе):
[V-] [Data] [Clock] [V+]
Идеальным выходом будет подпаивание к плате циркуля напрямую и вывод своего (нормального) разъёма.
Заключение
При небольших усилиях, минимальных затратах, относительно прямых руках и временной победе над ленью можно значительно расширить функционал и область применения данного устройства.
На этом демонстрацию считаю законченной, т.к. не хочу грузить неподготовленных подробностями и не знаю что ещё можно написать «не заумного».
Дополнение
А для желающих ознакомиться получше, приведу некоторые подробности под спойлером.
Внимание!
По просьбам — добавка —
Обзор, в основном, посвящён непоседам, которые любят находить необычное применение обычным вещам и в курсе с какой стороны хвататься за паяльник.
Речь пойдёт о том самом цифровом интерфейсе, который на штангеле все видели, но никто не знает как им пользоваться.
Можно найти дешевле —
почему Gamesalor?
• Во-первых, там практически самый дешёвый вариант. Причём не по акции, а на постоянной основе. Однако, следует учесть плату 1.5$ за трек, в случае заказа одного только циркуля может оказаться не очень выгодным по сравнению с тем же Али.
• Во-вторых, это магазин с приличным оборотом, что заметно по тому что с каждым заказом что-то изменяется в лучшую сторону — инструкции перестали быть китайским, улучшается качество инструкций, начиная от описания и заканчивая бумагой, улучшения происходят и с футляром (для версии с футляром — она чуть дороже) — появилась поролоновая подложка и дополнительные отделения. Это выгодно отличает Геймсейлор от индивидуального продавца на Али у которых изменения произойдут только когда он полностью сольёт текущую партию и подвезёт новую.
• В-третьих, PayPal. Этим всё сказано.
• В-четвёртых — просто с ними, в случае чего, решать вопросы намного удобнее и легче. Возможно из-за «в-третьих».
Пример: на днях пришёл глючный штангель, у которого прыгали показания. Заменили (положили в следующий заказ) даже без диспута в палке, хватило видео с минимальными комментариями.
Удастся ли в подобном случае пободаться с продавцами на Али — не знаю, и если чесно, подобный опыт приобретать ни сам не хочу, ни кому другому не желаю.
P.S.: прошу не рассматривать эту аргументацию как выпад в сторону Алиэкспресса или фанатизм по поводу Геймсейлора. Это всего лишь частный случай, со своими нюансами. К слову, на DX этот циркуль вдвое дороже, но это ведь не повод хаять DX?
• Во-вторых, это магазин с приличным оборотом, что заметно по тому что с каждым заказом что-то изменяется в лучшую сторону — инструкции перестали быть китайским, улучшается качество инструкций, начиная от описания и заканчивая бумагой, улучшения происходят и с футляром (для версии с футляром — она чуть дороже) — появилась поролоновая подложка и дополнительные отделения. Это выгодно отличает Геймсейлор от индивидуального продавца на Али у которых изменения произойдут только когда он полностью сольёт текущую партию и подвезёт новую.
• В-третьих, PayPal. Этим всё сказано.
• В-четвёртых — просто с ними, в случае чего, решать вопросы намного удобнее и легче. Возможно из-за «в-третьих».
Пример: на днях пришёл глючный штангель, у которого прыгали показания. Заменили (положили в следующий заказ) даже без диспута в палке, хватило видео с минимальными комментариями.
Удастся ли в подобном случае пободаться с продавцами на Али — не знаю, и если чесно, подобный опыт приобретать ни сам не хочу, ни кому другому не желаю.
P.S.: прошу не рассматривать эту аргументацию как выпад в сторону Алиэкспресса или фанатизм по поводу Геймсейлора. Это всего лишь частный случай, со своими нюансами. К слову, на DX этот циркуль вдвое дороже, но это ведь не повод хаять DX?
Учитывая специфичность прибора в целом и то, что он не является «предметом первой необходимости» для «широких масс», сразу отмечу что основные цели обзора — во-первых, продемонстрировать, не вдаваясь особо глубоко в технические детали, что интерфейс реально работает, а не является какой-то непонятно-виртуальным технологическим атавизмом, а во-вторых, задать импульс к творчеству заинтресовавшимся.
Про точность
Точность вполне достойная и соответствует заявленным 0.01-0.02мм.
Я замерял этим циркулем советскую калибровочную плашку 70мм — циркуль показал 70.01мм, что, во-первых, соответствует заявленной точности, а во-вторых, неизвестно вообще кто не прав — циркуль или плашка :)
Для чего это надо?
Варианты применения:
• Чтение на компьютер. Например, занесение сразу в Эксель при долгих нудных рутинных замерах.
• Использование совместно с устройством, управляющим точными процессами. Например, для сверлильного/токарного/фрезерного станка. Особенно актуально самоделкиным.
Как сделано у меня
Начну с того, что интерфейс реально работает:
Всё относительно просто. Делается
Лично для меня, основной проблемой было изготовление вилки к разъёму. Расположение контактов в разъёме не стандартное (не SMD), мало того никаких условий для крепления и удержания вилки тоже не предусмотрено. Никакие обломки компьютеров не подходят. В итоге сделал на первое время так: в кусочек стёрки воткнул тонкие пружинные лапки от разъёма LPT, на нужном расстоянии.
Расположение контактов слева направо (штангель экраном к себе):
[V-] [Data] [Clock] [V+]
Идеальным выходом будет подпаивание к плате циркуля напрямую и вывод своего (нормального) разъёма.
Заключение
При небольших усилиях, минимальных затратах, относительно прямых руках и временной победе над ленью можно значительно расширить функционал и область применения данного устройства.
На этом демонстрацию считаю законченной, т.к. не хочу грузить неподготовленных подробностями и не знаю что ещё можно написать «не заумного».
Дополнение
А для желающих ознакомиться получше, приведу некоторые подробности под спойлером.
Технические детали (про протокол штангеля)
Протокол штангеля
Как видно из протокола, штангель шлёт 48ми-битный поток, который содержит два 24х-битных слова, первое из которых содержит информацию об абсолютной позиции, а второе об относительной (если обнуление посередине).
По времени, в «нормальном» режиме длина слов примерно по 300мс, пауза между словами около 100мс, пауза до и после потока по 50мс. Итого вся длина посылки около 800мс (чуть больше).
Поток бинарный. Да-нет, 1-0. Читаем шину данных по «тику» шины Clock.
Читать можно как микроконтроллером, так и компьютером, скажем, на COM-порт.
Естественно, что предварительно необходимо согласовать/сбросить напряжение.
Учитывая, что напряжение питающей штангель кнопки-таблетки LR44 1.5В (максимум 1.7В), то примерно до этого уровня и следует сбрасывать.
Как видно из протокола, штангель шлёт 48ми-битный поток, который содержит два 24х-битных слова, первое из которых содержит информацию об абсолютной позиции, а второе об относительной (если обнуление посередине).
По времени, в «нормальном» режиме длина слов примерно по 300мс, пауза между словами около 100мс, пауза до и после потока по 50мс. Итого вся длина посылки около 800мс (чуть больше).
Поток бинарный. Да-нет, 1-0. Читаем шину данных по «тику» шины Clock.
Читать можно как микроконтроллером, так и компьютером, скажем, на COM-порт.
Естественно, что предварительно необходимо согласовать/сбросить напряжение.
Учитывая, что напряжение питающей штангель кнопки-таблетки LR44 1.5В (максимум 1.7В), то примерно до этого уровня и следует сбрасывать.
Внимание!
По просьбам — добавка —
скетч для Ардуины
//У меня Ардуино Уно, версия среды 0022
//LCD выпилено с целью чтоб шло у всех
//Смотреть данные сериалмонитором
//При копировании — обязательно проверьте кавычки в Serial.print — они уплыли из-за переформатирования движком сайта
int dataIn = 11; //шина данных, можно менять
int clockIn = 2; //шина clock, не трогать, так надо (читайте про attachInterrupt)
int isin = 0; //д=1 мм=0
int isfs = 0; //p
int index;
unsigned long xData, oData;
int ledPin = 13; //мигалка на 13й вход
int ledState = LOW; //статус мигалки
long previousMillis = 0; //когда последний раз мигали
long interval = 500; // интервал мигания
long previousGetMillis = 0; //
long Timeout = 8; //mмс
float stringOne; //временные переменные
char charBuf[5];
char charBuf2[8];
void setup(){
digitalWrite (dataIn, 1);
digitalWrite (clockIn, 1);
pinMode (dataIn, INPUT); //привязываем шину данных
pinMode (clockIn, INPUT); //и clock
Serial.begin(9600);
delay(500);
attachInterrupt(0,getBit,RISING); //и аттачим clock на 2ю ногу
index = 0;
xData = 0;
oData = 999;
}
void loop(){
if ((index !=0) && (millis() — previousGetMillis > Timeout) ) {
index = 0;
xData = 0;
};
if (index >23) {
if (oData !=xData) {
if (isin==1){ //дюймы
if (isfs==1){ //минус
Serial.print(«inch: -»);
}else {
Serial.print(«inch: „);
}
stringOne =xData*5/10000.00000;
Serial.println(floatToString(charBuf2,stringOne,5,5));
}else { //мм
if (isfs==1){ //минус
Serial.print(“mm: -»);
}else {
Serial.print(«mm: „);
}
stringOne =xData/100.00;
Serial.println(floatToString(charBuf,stringOne,2,5));
};
};
oData =xData;
index=0;
xData=0;
};
if (millis() — previousMillis > interval) {
previousMillis = millis();
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
void getBit(){ //чтение и флаги
previousGetMillis=millis();
if(index < 20){
if(digitalRead(dataIn)==1){
xData|= 1<<index;
}
} else {
if (index==20) //минус
isfs=digitalRead(dataIn);
if (index==23) //дюймы
isin=digitalRead(dataIn);
};
index++;
}
//функция для безгеморойного конверта переменной типа float в строку
char * floatToString(char * outstr, double val, byte precision, byte widthp){ //буфер под результат, число, точность (после запятой), минимальная длина
char temp[16];
byte i;
// compute the rounding factor and fractional multiplier
double roundingFactor = 0.5;
unsigned long mult = 1;
for (i = 0; i < precision; i++)
{
roundingFactor /= 10.0;
mult *= 10;
}
temp[0]='\0';
outstr[0]='\0';
if(val < 0.0){
strcpy(outstr,“-\0»);
val = -val;
}
val += roundingFactor;
strcat(outstr, itoa(int(val),temp,10)); // целая часть
if( precision > 0) {
strcat(outstr, ".\0"); // дробная
unsigned long frac;
unsigned long mult = 1;
byte padding = precision -1;
while(precision--)
mult *=10;
if(val >= 0)
frac = (val — int(val)) * mult;
else
frac = (int(val)- val ) * mult;
unsigned long frac1 = frac;
while(frac1 /= 10)
padding--;
while(padding--)
strcat(outstr,«0\0»);
strcat(outstr,itoa(frac,temp,10));
}
// пробелы (для формкатирования)
if ((widthp != 0)&&(widthp >= strlen(outstr))){
byte J=0;
J = widthp — strlen(outstr);
for (i=0; i< J; i++) {
temp[i] = ' ';
}
temp[i++] = '\0';
strcat(temp,outstr);
strcpy(outstr,temp);
}
return outstr;
}
//LCD выпилено с целью чтоб шло у всех
//Смотреть данные сериалмонитором
//При копировании — обязательно проверьте кавычки в Serial.print — они уплыли из-за переформатирования движком сайта
int dataIn = 11; //шина данных, можно менять
int clockIn = 2; //шина clock, не трогать, так надо (читайте про attachInterrupt)
int isin = 0; //д=1 мм=0
int isfs = 0; //p
int index;
unsigned long xData, oData;
int ledPin = 13; //мигалка на 13й вход
int ledState = LOW; //статус мигалки
long previousMillis = 0; //когда последний раз мигали
long interval = 500; // интервал мигания
long previousGetMillis = 0; //
long Timeout = 8; //mмс
float stringOne; //временные переменные
char charBuf[5];
char charBuf2[8];
void setup(){
digitalWrite (dataIn, 1);
digitalWrite (clockIn, 1);
pinMode (dataIn, INPUT); //привязываем шину данных
pinMode (clockIn, INPUT); //и clock
Serial.begin(9600);
delay(500);
attachInterrupt(0,getBit,RISING); //и аттачим clock на 2ю ногу
index = 0;
xData = 0;
oData = 999;
}
void loop(){
if ((index !=0) && (millis() — previousGetMillis > Timeout) ) {
index = 0;
xData = 0;
};
if (index >23) {
if (oData !=xData) {
if (isin==1){ //дюймы
if (isfs==1){ //минус
Serial.print(«inch: -»);
}else {
Serial.print(«inch: „);
}
stringOne =xData*5/10000.00000;
Serial.println(floatToString(charBuf2,stringOne,5,5));
}else { //мм
if (isfs==1){ //минус
Serial.print(“mm: -»);
}else {
Serial.print(«mm: „);
}
stringOne =xData/100.00;
Serial.println(floatToString(charBuf,stringOne,2,5));
};
};
oData =xData;
index=0;
xData=0;
};
if (millis() — previousMillis > interval) {
previousMillis = millis();
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
void getBit(){ //чтение и флаги
previousGetMillis=millis();
if(index < 20){
if(digitalRead(dataIn)==1){
xData|= 1<<index;
}
} else {
if (index==20) //минус
isfs=digitalRead(dataIn);
if (index==23) //дюймы
isin=digitalRead(dataIn);
};
index++;
}
//функция для безгеморойного конверта переменной типа float в строку
char * floatToString(char * outstr, double val, byte precision, byte widthp){ //буфер под результат, число, точность (после запятой), минимальная длина
char temp[16];
byte i;
// compute the rounding factor and fractional multiplier
double roundingFactor = 0.5;
unsigned long mult = 1;
for (i = 0; i < precision; i++)
{
roundingFactor /= 10.0;
mult *= 10;
}
temp[0]='\0';
outstr[0]='\0';
if(val < 0.0){
strcpy(outstr,“-\0»);
val = -val;
}
val += roundingFactor;
strcat(outstr, itoa(int(val),temp,10)); // целая часть
if( precision > 0) {
strcat(outstr, ".\0"); // дробная
unsigned long frac;
unsigned long mult = 1;
byte padding = precision -1;
while(precision--)
mult *=10;
if(val >= 0)
frac = (val — int(val)) * mult;
else
frac = (int(val)- val ) * mult;
unsigned long frac1 = frac;
while(frac1 /= 10)
padding--;
while(padding--)
strcat(outstr,«0\0»);
strcat(outstr,itoa(frac,temp,10));
}
// пробелы (для формкатирования)
if ((widthp != 0)&&(widthp >= strlen(outstr))){
byte J=0;
J = widthp — strlen(outstr);
for (i=0; i< J; i++) {
temp[i] = ' ';
}
temp[i++] = '\0';
strcat(temp,outstr);
strcpy(outstr,temp);
}
return outstr;
}
Самые обсуждаемые обзоры
+73 |
3474
145
|
+51 |
3663
67
|
+31 |
2671
51
|
+39 |
3060
42
|
Заказал такой, жду. Но мне и в голову не приходило что его можно к компу подключить.
кстатии у меня если резко туда сюда его сдвигать/раздвигать, то ноль сильно сбивается, но в целом проблем нет — отличная штука при своей цене, а то замучился измерять обычной линейкой
а скетч для ардуинки не прилагается? =)
Это, в общем-то, достаточно солидно. Не должно сбиваться.
Либо уж очень у нас разные понятия о резких движениях :)))
Следующий шаг — установка Windows 7 в калькулятор.
:)
Обзор отличный, «Хэндмейд форева».
Но сдержался.
;)
Автор молодец) У меня этот девайс есть — очень полезен, если надо замерить например глубину протектора шины или ЦО или ещё много чего)
Из того что купить — могу обозреть ардуину, тем более, что вроде ещё не было обзора. Но это мне нужно с мыслями собраться серьёзно. Чтобы и доступно, и информативно, и не особо коротко.
Понял. Супер
Как в следующий раз буду что-нить там заказывать попробую трюк с добавлением из вишлиста.
Если в корзине просто увеличите количество, волшебство исчезает, и цены старые становятся.
Вроде упоминал, но забыл ссылку вписать.
Коробка годная, и при доставке спасёт, и при хранении на своём месте будет.
В последний раз с поролоновой подложкой пришла — меньше трястись внутри коробки будет пока доедет.
Заказывал в сентябре, пришло неделю назад, через 48 дней.
Заметил: почта с Гамесалора идет наибольшее возможное время, видимо они расположены в заднице китая.
У них вроде там есть выбор чина пост (или чина аирмайл штоль) и гонконг пост. По умолчанию чина. Через гонконг вроде как шустрей.
Вы удивитесь :-) Заточенные концы как заднего измерителя, так и нутромера. У оригинального прибора они полукруглые. В старые времена приходилось с большой осторожностью и прилежанием точить эти концы на заточном станке, боясь пергреть и отпустить их. А тут — заводская заточка, прям королевский пингвин.
Короче, я теперь тоже…
img.dxcdn.com/productimages/sku_7880_4.jpg
но штангенциркуль к компу… реализация неплоха…
ага, декоративный подарок токарю, не более. да и то не каждый «железных дел мастер» будет доверять китайской рулетке на проводе. формат посылки свой, для отправки по ИК или zigbee придется такой агарод городить что ОЙ!
ага промерять расстояние между каждым выводом упаковки PPGA-370 ))))
я вот че ждуу!
www.raspberrypi.org/
Как выглядит ошибка? Что пишет на экране?
Батарейку менять пробовали? Выдернуть на час батарейку пробовали?