посчитать частоту модуляции лазерного нивелира
- Войдите на сайт для отправки комментариев
Чт, 20/01/2022 - 23:24
требуется сабж. у разных нивелиров она (частота) разная. Имеется Уно, датчик (как в этой статье https://www.rlocman.ru/shem/schematics.html?di=617467) но нет LCDшника такого, есть такой двухстрочник (https://arduinomaster.ru/platy-arduino/arduino-lcd-keypad-shield/) либо вывести в монитор.
Суть: нужен скетч который с помощью дуины и указанного датчика посчитает частоту импульсов лазера нивелира, и выведет это либо на указанный шилд либо в монитор.
а что такое "частота импульсов лазерного нивелира"? он разве светит импульсами?
Лазерный нивелир в моем понимании - это фактически лазерная указка, которая быстро вращается в горизонтальной плоскости и высвечивает на стенках линию уровня
Немного не правильно понимаете.
Первое, там луч, да, точка, но не вращается а светит на призму и получается луч 360гр
Второе. Есть специальный прибор, называется приемник для лазерного нивелира. Он с завода настроен на определенную частоту. А разные производители нивелиров стали в нивелирах делать режим работы с приемником. Приемник работает на большем (иногда в разы) расстоянии чем человеческий глаз. А что бы его не "засвечивало" солнце, нивелир в режиме работы с приемником переходит в импульсный режим. Там в среднем от 5 до 10 кГц. И, приемник, получив луч, сверяет его с частотой заложенной в него и если частота совпадает то он понимает что это не солнце, соответсвенно , выдает значение.
быстро вращается в горизонтальной плоскости
Кстати сказать, вращаться она должна была бы очень быстро. Не менее 75 оборотов в секунду. При такой частоте насколько помню пропадало мерцание старых кинескопов. То есть для человеческого глаза луч становится непрерывным при такой частоте. Но, при всем при этом - по сути, луч всё же имел бы свою частоту, которую можно определить
Если датчик выбран, и вы уверены, что он будет работать в ваших условиях, то задача сводится к написанию скетча измерения частоты логического сигнала, с выводом в последовательный порт (в простейшем случае). Я правильно вас понял?
Наверное так . Мне нужно знать на какой частоте работает мой нивелир.
Т.Е. измерить один раз. А не проще посветить нивелиром на любой светодиод подключенный к осциллографу и сразу увидеть частоту?
Возможно проще. Только, нет у меня осциллографа
Дешевле будет купить осциллоскоп :)
и частоту увидите, и какой-никакой универсальный инструмент останется
И школы рядом с кабинетом физики и соседа радиолюбителя и даже сервиса ремонта телефонов, где мужики за сотку за 5 минут покажут на осциллографе всё что хочешь?
какой-никакой универсальный инструмент останется
Зачем? Положить на верхнюю полку, пусть лежит?
скетч частотомера тут 100500 раз публиковали, правда в составе чего либо, сам найдёшь или надо помочь?
А приемник к этому нивелиру вы покупаете отдельно? Или следующая тема будет сделать приемник для нивелира? Производитель вашего конкретного нивелира наверно выпускает и приемник, раз уж сам нивелир обладает этой функцией. А нивелир позволяет регулировать данную частоту? Ваша хотелка сравнима с задачей - поставил GSM сигнализацию на даче, она сообщила, что дачу грабят. Что дальше будите делать? Некому поймать воров. Ну и какой от неё прок? Так и здесь. Узнали частоту, и дальше что делать то будите? Ходить по магазинам и выбирать приемники от других производителей? У меня жигули, а говорят на мерсе коробка передач лучше, поставлю ка я ее:))))
Попробуйте для начала простой скетч. Если в принципе будет работать, но надо будет улучшить можете написать Upper321@yandex.ru
01
#define FREQ_PIN 2 // Контакт к которому подключен датчик
02
03
uint32_t Htime;
// для хранения длительности высокого уровня
04
uint32_t Ltime;
// для хранения длительности низкого уровня
05
uint32_t Freq;
// переменная для хранения значения частоты
06
void
setup
()
07
{
08
pinMode(FREQ_PIN,INPUT);
// контакт конфигурируем на ввод данных
09
Serial
.begin(9600);
10
Serial
.println(
"====START===="
);
11
Serial
.println(
""
);
12
}
13
void
loop
()
14
{
15
Htime = pulseIn(FREQ_PIN,HIGH);
// считываем длительность высокого уровня
16
Ltime = pulseIn(FREQ_PIN,LOW);
// считываем длительность низкого уровня
17
18
if
((Htime == 0) || (Ltime == 0)) {
// Сигнал не обнаружен
19
Serial
.print(
"No Signal "
);
20
}
21
else
{
22
Freq = 1000000UL/(Htime+Ltime);
// вычисляем значение частоты учитывая что время у нас в микросекундах
23
Serial
.print(
"Freq = "
);
24
Serial
.println(Freq);
25
}
26
Serial
.println(
""
);
27
28
delay(500);
29
}
А приемник к этому нивелиру вы покупаете отдельно? Или следующая тема будет сделать приемник для нивелира?
Ваше то какое дело? По факту, много, очень много букв - ни одного по делу.
Да, скорее всего будет другая тема по приемнику. Потому что, А - заводской не подходит для моих специфичных задач.
И да, вы правы, производитель выпускает приемники. Но например в моего производителя приемная шкала очень маленькая. У других есть в три раза!!! большие шкалы, но сами приемники дорогие, и надо быть уверенным что они по частоте подойдут - либо деньги на ветер. Так что, весь ваш опус мимо темы.
Flagstone - потому и не по делу, что ваше ТЗ полная фигня. Никакой задачи для исполнителя тут нет. Чтобы измерить ОДИН раз частоту - сходите в любую мастерскую по ремонту радиотехники да и все.
А если кто-то возьмется делать это удаленно - надо сначала скетч написать, а потом, ГЛАВНОЕ!! - вам все это растолковать, а это будет непросто, судя по вашим вопросам и ответам в теме.
Вам выше дали ссылки на два кода для ардуины - ради разнообразия попробуйте хоть один загрузить в плату и измерить частоту. Это будет проверкой на вашу адекватность как заказчика. Если для вас это непосильная задача - то, имхо, никому и не стоит в это ввязываться, ибо вопрос стоит не об измерении частоты, а об обучению вас азам программирования и электроники за совсем иной прайс. чем вы, наверно, запланировали для своей задачи.
Коллеги! Да ладно! Все знают мое отношение к чайникам, но тут же "Ищу исполнителя"! Хочет человек частотомер - ну сделаем ему частотомер.
ТС. Хочешь - я сделаю? До 10-20 кгц вроде измерял! ;)) Но что-бы код тебе точно подошел, тебе придется все-таки снять осциллограмму с датчика. Или привезти мне и датчик и свой нивелир в подмосковье, город Раменское, ОК?
Код щаз с компа в мастерской выложу, свой, рабочий частотомер, который я постоянно сам использую везде. ;)) Если пригодится, кинешь потом в меня деньгами на бутылку рома старому пирату!
Телега: собачка мой ник.
PS: Вот те код, какая-то версия. Измеряет он не частоту а период между двумя фронтами сигнала. Хочешь причесать под свою задачу - велком. Но нужны параметры твоего сигнала. см. выше. ;)
01
//измеряем частоту на пин №8 это ICP1.
02
03
#include <avr/interrupt.h>
04
#include <avr/io.h>
05
06
volatile uint8_t tOvf = 0;
07
volatile uint32_t lastICR = 0;
08
volatile uint32_t hLen = 0;
09
10
uint32_t getHlen() {
11
uint32_t h;
12
uint8_t s = SREG;
13
cli();
14
h = hLen;
15
SREG = s;
16
return
h;
17
}
18
19
ISR (TIMER1_OVF_vect) {
20
tOvf ++;
21
}
22
23
24
ISR (TIMER1_CAPT_vect) {
25
uint32_t nowICR;
26
uint16_t t = ICR1;
27
28
nowICR = ((uint32_t)tOvf << 16) + t;
29
hLen = nowICR - lastICR;
30
lastICR = nowICR;
31
}
32
33
34
35
36
void
setup
() {
37
Serial
.begin(115200);
38
pinMode (6, OUTPUT);
39
40
TCCR1A = 0b00001100;
//COM1A1:COM1A0:COM1B1:COM1B0:X:X:WGM11:WGM10
41
TCCR1B = 0b11000001;
//ICNC1:ICES1:X:WGM13:WGM12:CS12:CS11:CS10
42
// Выводы отключены, режим 0 (просто счет), частота 16МГц, IC - rise, IC noise canc - yes
43
TIMSK1 = 0b00100001;
//x:x:ICIE:x:OCIEB:OCIEA:TOIE
44
// прерывания по ICR и Overflow
45
46
}
47
48
void
loop
() {
49
uint32_t highLength = 0;
50
static
float
period = 1;
51
float
fr = 0;
52
static
byte
cnt = 0;
53
54
highLength = getHlen();
55
//усреднение скользящим средним
56
period = (period *3 + highLength / 16.0) / 4;
57
fr = 1000000.0 / period;
58
delay(50);
59
60
cnt++;
61
if
(cnt < 10)
return
;
62
cnt = 0;
63
64
Serial
.print (
"Period "
);
65
Serial
.print (period, 2);
66
Serial
.print (
" us, Freq is "
);
67
Serial
.print (fr / 1000.0, 3);
68
Serial
.println (
" KHz"
);
69
}
Вам выше дали ссылки на два кода для ардуины
Честно, лень со слепым спорить..
И Алиэкспресса в вашей деревне тоже нету?
Если всё-таки есть, то: Заходите туда; набираете в поиске "logic analizer"; из предложенных выбираете самый дешёвый (это будет Saleae лог.анализатор); покупаете.
Например такой или подобный справится: https://www.aliexpress.com/item/1005003728646478.html
Потом остаётся только взять фотодиод, присобачить к нему простейший формирователь лог.уровней (ОУ/компаратор), посветить в него лазером и измерить длительности импульсов лог.анализатором.
Это будет самый дешёвый путь. Даже если лог.анализатор больше вам не понадобится, то просто выкините его.
Пипец. Вы читать умеете вообще? Чем плоха схема с датчиком лазерного излучения? Он есть, вот лежит. Чем городить какие то схемы, что рм ещё покупать и тд.
Ты что на говно исходишь? Я тебе код написал, он для Нано или Уно. Запусти его, в "монитор порта" частоту и период он тебе напишет, Чего тебе еще надо? Если не напишет, тогда уже придется осциллограмму смотреть. Если напишет - перекинешь деньги скока не жалко ;))... Хотя есть у меня сомнения...
похоже, что ТС пишет "нужен код для ардуины", но на деле ему нужен не код, а мальчик с ардуиной, то есть сервис под ключ, чтоб к нему приехали и измерили его нивелир...
Иначе я не знаю, как обьяснить ситуацию, что ему выложили уже два варианта кода - а он только ругается
А если датчика нет - то "городить" всё равно придётся. Так как абдурина сама по себе лазерное излучение чувствовать не умеет.
Светодиод обращаемый элемент. Как светит, так на той же волне принимает и преобразует в напряжение. Подключи любой светодиод к осциллографу, посвети фонариком и увидишь. Полоса пропускания больше мегагерца.
https://www.youtube.com/watch?v=5ul3dRkt9xk
Скорей всего ТС хотел сделать "уловителИ" луча нивелира типа как на видео.
Но надо их сделать несколько потому и надо промерять частоту лазерОв.
Применяются в кузовном ремонте для контроля осей и чтобы не лазить каждый раз под авто ставятся как автор в видео говорит ЧапКи.
Я такие делал правда не заморачивался и делал на " модуле датчика освещенности" из набора для ардуино на 6-8 метров вполне работает, что для гаража очень даже применимо.
Не, не скорее всего.
Просто нужен специфичный приемник для лазерного нивелира.
Частоту померил, 10кГц. Но, есть подозрение что приемники работают просто на частоте "больше" нуля, т.е отличной от фонового света. Хотя попадались видео с несовпадением приемника и нивелира по частоте, и приемник отказывался работать.