Перейти к содержанию

ВячеславЛ

Members
  • Постов

    356
  • Зарегистрирован

  • Посещение

Весь контент ВячеславЛ

  1. Привет, как продвигаются дела? Расскажи, если не сложно. 

    Если будут проблемы с настройкой, всех сдам  все расскажу. Самое сложное после введения катушек в резонанс- сведение катушек в ноль, но и здесь этот вариант мд допускает от творца большие вольности.  Кстати я заметил, что на не до конца сбалансированной системе катушек чувствительность даже выше. Но не при диком разбалансе. А мк? Да что мк, отрабатывает свою программу- отслеживание быстро(относительно) изменяющегося сигнала и выдачу 32кГц,  в этой части, казалось бы самой сложной, все должно работать как китайские часы .

  2. Кажется нашел: < Графические дисплеи, откладывающие отношение X/Y по горизонтальной оси, а амплитуду принятого сигнала по вертикальной, очень полезны для фильтрации металлического мусора от ценных предметов.> Для измерения амплитуды прийдется делать третий фазовый детектор от того же канала Х, только без смещения фазы. Интересно, насколько такой метод информативен? Тут на форуме уже была тема индикатора к терму. Хочется сделать то же, но на авр. На олед дисплее 64х128 и на 1602, по стоимости они одинаковы, впрочем столько же стоит и мега328, не дороже 200 рублей весь комплект если из Китая. И опять же озвучку можно сделать хоть на 20 тонов. С индикацией питания. Ориентироваться на звук, а индикатор использовать только в интересных случаях, при сомнениях копать-не копать.
  3. DesAlex подскажите пожалуйста, в из каких точек данного мд нужно сравнить сигналы что бы получить VDI мишени?
  4. Решил переделать печатную плату под проц в TQFP32 корпусе. Разьем для внутрисхемного программирования. На картинке габариты дисплея для сравнения. Тяжеловато делать трассировку для этого МД с его плюсом, минусом и виртуальным нулем по всей плате. За два вечера вылизывания платы, нашел две ошибки в разводке, надеюсь больше нет. Исправил скетч, т.к. используются совсем другие выводы. Выпадет снег буду собирать. //A0 -аналоговый вход для вольтметра. Выставляется потенциометром R32. // А1 -аналоговый вход для сигнала. Выставляется при минимальном сигнале на D3.2 // резистором R40 для показаний АЦП примерно 510. // 11- вывод звука // 9 - вывод частоты 31200 Гц #include <LiquidCrystal.h> LiquidCrystal lcd(3, 4, 2, A4, A3, A2); byte z1[8] = { // значок батарейки 0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110 }; int countleds = 0; // переменная для хранения значения уровня шкалы float voltage = 0.0; // рассчитаное напряжение const int button1 = 5; // кнопка барьер-плюс const int button2 = 6; // кнопка барьер-минус int i = 5; // барьер const float K = 0.1; // фильтр отслеживающий быстрые изменения(коэф. чем меньше тем сильнее) const float L = 0.07; // фильтр отслеживающий изменения за длительное время float sign = 0; // фильтр float noll = 0; void setup(){ lcd.begin(16, 2); // инициализация дисплея lcd.createChar(1, z1); pinMode(9, OUTPUT); pinMode(11, OUTPUT); TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x09; analogWrite(9 , 126); // на выводе 10 ШИМ=50% f=31200Гц //на самом деле для ШИМ = 50% нужно ставить заполнение хотя бы 220, согласно осциллографу //дуина не справляется. Здесь не критично. } void loop() { int buttonState1 = HIGH; // Состояние кнопки один int buttonState2 = HIGH; // Состояние кнопки два int pot = analogRead(A1); // фильтр быстрого изменения сигнала sign = sign*(1-K) + pot*K; noll = noll*(1-L) + sign*L; // фильтр длительного отслеживания сигнала //Вольтметр, построенный на входе А0 float voltage = map(analogRead (A0),0,1023,0,1500)/100.0; if (sign >= noll + i) {countleds = map(sign, noll+i, 1023 , 9, 14); // если полученный рез-т на 9-15 сегмент шкалы tone(11, countleds*100);} if (sign <= noll - i) {countleds = map(sign, 0, noll - i, 0, 7); // если полученный рез-т на 0-7 сегмент шкалы tone(11, countleds*50); } if (sign < noll && sign >= noll - (i-1)) {countleds = 7 ; noTone(11); } //островок виртуального НУЛЯ(7 сегмент) if (sign > noll && sign <= noll + (i-1)) {countleds = 8 ; noTone(11); } //островок виртуального НУЛЯ шкалы(8 сегмент) {lcd.setCursor(countleds, 0); // устанавливаем курсор в колонку countleds, строку 0 lcd.print("\xff"); // закрашенный значок lcd.setCursor(0, 1); // перемещаем во 2 строку, столбец-0 lcd.print(char(1)); // Индикация значка батарейки lcd.setCursor(1, 1); // перемещаем на указание напряжения lcd.print(voltage); // вольтаж lcd.setCursor(7, 0); // 8й столбец 1я строка if (sign < noll ) { lcd.print("{");} // печать lcd.setCursor(8, 0); // 9й столбец 1я строка if (sign > noll ) { lcd.print("}");} // печать lcd.setCursor(7, 1); lcd.print("B="); lcd.setCursor(9, 1); // 11 столбец 2я строка lcd.print(i); // барьер lcd.setCursor(13, 1); // 13й столбец 2я строка lcd.print(sign); // печать усредненного значения значения АЦП delay(10); // ждём buttonState1 = digitalRead(button1); // Чтение состояния кнопки 1 buttonState2 = digitalRead(button2); // Чтение состояния кнопки 2 if (buttonState1 == LOW) { i = i + 1 ; delay(50);} // При нажатой кнопке барьер вырастает на 1. Задержка 50 if (buttonState2 == LOW) { i = i - 1 ; delay(50);} // При нажатой кнопке барьер снижается на 1. Задержка 50 if (i < 1) { i = 1;} // Нижняя граница барьера if (i > 38) {i = 38;} // Верхняя граница барьера lcd.clear(); } }
  5. Абсолютно верно, насчет 27 лапки,, это вы прямо в точку. Могу попробовать оправдаться только многократной перерисовкой схемы. И меня ваше замечание радует. Значит вам не все равно. Я еще что то пропустил? так на беглый взгляд.
  6. Первоначально экран на приемной был. Но после такого количества экспериментов что то могло повредиться. Реагирует не только приближении руки к катушке, но и к плате. Думал китайские балансиры заказать, но можно и самому сделать
  7. Отдал ребятам на испытания-сам не имею возможности сейчас копать. Металл копают, есть претензии. Первая- нет удобной зарядки под 3 18650 при падении напряжения ниже 9.6 в по встроенному вольтметру пропадает чувствительность и прибор начинает "петь". Вторая более серьезная-передающая, электронный блок и приемная реагируют на емкостное приближение. Если взяться за минусовой провод-все пропадает. Думаю избыток тока в Тх. DesAlex, что вы скажете? Говорят - приловчились, глубоко не копали. Самая крупная находка - каток с какой-то гусеничной техники, грузили вдвоем) Даже не ругали-приятно.
  8. Я смотрю все таки не многие. А только те у кого 400в в передающей. Из личных наблюдений большой разницы между 20 и 40 вольтами не заметишь. А тут 400! Рыбу глушить такой" удочкой" в самый раз. У меня при 12в питании сейчас и выходной амплитуде в 40в( для интереса поставил, было 24) потребляемый ток 50мА без звука, 90мА со звуком. Поэтому скорее всего у вас и проблема с компенсацией, но это не точно)
  9. Сегодня потестил новую прошивку. С одной стороны получил удовольствие, а с другой я на такую глубину копать не хочу! Режим работы сделал динамическим. Один фильтр отслеживает сигналы за довольно длительный промежуток(около 3 с) второй быстрые изменения сигнала. В итоге при проносе над мишенью путем сравнения выделяем полезный сигнал. Резистор точной подстройки теперь не нужен - при включении один раз выставляем на экране значение АЦП примерно равное 510 и ... забываем про регулировку до конца сеанса. Элементы Д3.3 и Д3.4 не нужны, как и их обвязка. На автомобиль четкое срабатывание с 2 метров, если убрать барьер с 5 до 2 то может и 2.2м. Звук только по делу, ну и куда деваться, от плохой жескости конструкции. Никаких произвольных попискиваний или, не к ночи помянутого, дрожания стрелки. Менял напряжение на передающей катушке. Ставил 18, затем 35 вольт. Разницы не заметил. Скетч // A3-аналоговый вход для вольтметра.Выставляется потенциометром R32. // А4-аналоговый вход для сигнала.Выставляется при минимальном сигнале на D3.2 // резистором R40 для показаний АЦП примерно 510. // 6- вывод зука // 9 - вывод частоты 31200 Гц #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte z1[8] = { // значок батарейки 0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110 }; int countleds = 0; // переменная для хранения значения уровня шкалы float voltage = 0.0; // расчитаное напряжение const int button1 = 7; // кнопка барьер-плюс const int button2 = 8; // кнопка барьер-минус int i = 5; // барьер const float K = 0.1; // фильтр отслеживающий быстрые изменения(коэф. чем меньше тем сильнее) const float L = 0.07; // фильтр отслеживающий изменения за длительное время float sign = 0; // фильтр float noll = 0; void setup(){ lcd.begin(16, 2); // инициализация дисплея lcd.createChar(1, z1); pinMode(9, OUTPUT); pinMode(6, OUTPUT); TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x09; analogWrite(9 , 126); // на выводе 10 ШИМ=50% f=31200Гц //на самом деле для ШИМ = 50% нужно ставить заполнение хотя бы 220, согласно осцилографу //дуина не справляется. Здесь не критично. } void loop() { int buttonState1 = HIGH; // Состояние кнопки один int buttonState2 = HIGH; // Состояние кнопки два int pot = analogRead(A4); // фильтр быстрого изменения сигнала sign = sign*(1-K) + pot*K; noll = noll*(1-L) + sign*L; // фильтр длительного отслеживания сигнала float voltage = map(analogRead (A3),0,1023,0,1500)/100.0; //Вольтметр, построенный на входе А3 if (sign >= noll + i) {countleds = map(sign, noll+i, 1023 , 9, 14); // если полученный рез-т на 9-15 сегмент шкалы tone(6, countleds*100);} if (sign <= noll - i) {countleds = map(sign, 0, noll - i, 0, 7); // если полученный рез-т на 0-7 сегмент шкалы tone(6, countleds*50); } if (sign < noll && sign >= noll - (i-1)) {countleds = 7 ; noTone(6); } //островок виртуального НУЛЯ(7 сегмент) if (sign > noll && sign <= noll + (i-1)) {countleds = 8 ; noTone(6); } //островок виртуального НУЛЯ шкалы(8 сегмент) {lcd.setCursor(countleds, 0); // устанавливаем курсор в колонку countleds, строку 0 lcd.print("\xff"); // закрашенный значок lcd.setCursor(0, 1); // перемещаем во 2 строку, столбец-0 lcd.print(char(1)); // Индикация значка батарейки lcd.setCursor(1, 1); // перемещаем на указание напряжения lcd.print(voltage); // вольтаж lcd.setCursor(7, 0); // 8й столбец 1я строка if (sign < noll ) { lcd.print("{");} // печать lcd.setCursor(8, 0); // 9й столбец 1я строка if (sign > noll ) { lcd.print("}");} // печать lcd.setCursor(7, 1); lcd.print("B="); lcd.setCursor(9, 1); // 11 столбец 2я строка lcd.print(i); // барьер lcd.setCursor(13, 1); // 13й столбец 2я строка lcd.print(sign); // печать усредненного значения значения АЦП delay(10); // ждём buttonState1 = digitalRead(button1); // Чтение состояния кнопки 1 buttonState2 = digitalRead(button2); // Чтение состояния кнопки 2 if (buttonState1 == LOW) { i = i + 1 ; delay(100);} // При нажатой кнопке барьер вырастает на 1. Задержка 50 if (buttonState2 == LOW) { i = i - 1 ; delay(100);} // При нажатой кнопке барьер снижается на 1. Задержка 50 if (i < 2) { i = 2;} // Нижняя граница барьера if (i > 38) {i = 38;} // Верхняя граница барьера lcd.clear(); } } HEX файл под ATmega168. Фьюзы под внешний резонатор на 16 МГц .MD_Rx-Tx03_2019.168.hex HEX файл под ATmega8. Внешний резонатор на 16 МГц. Должна заработать. Сам не пробовал. Скомпилилась без ошибок. MD_Rx-Tx03_2019.ino.standard.hex Настольные испытания Не стреляйте в оператора, он снимает как умеет. На втором видео писк слышно, а как я слева мишень подносил- не видно.
  10. Ардуинкой фазу не покрутишь к сожалению. Надо или брать STM32 или изучать язык С. А жаль. Критику нарисованной схемы? О чем вообще проект и с чем его едят? Что умеет?
  11. Зря грешил и на атмегу и на конденсаторы в контуре. Усиливал устойчивость катушек к изгибу(ребрами жесткости). Ну и усилил. Забыл только ноль контролировать при этом. Прийдется как то переделывать. На печатке две ошибки. Не подведен +питания к 157уд2. А вторая -не помню-сюрприз!
  12. Вышел на улицу, -2°с и не смог скомпенсировать. Либо конденсаторы в контурах не термостабильные либо от температуры плывет ацп у контроллера. Но ведь клон работает при такой температуре, хотя конечно там образыовое напряжение внешнее. Надо попробовать поостой индикатор стрелочный подкинуть и проверить.
  13. Зачетный дизайн! И решение со звуком-простое и незатратное. Эх, а штанга кайфовая.
  14. Можно вопрос, можно фотку штанги, где приобреталась и для чего используется по назначению? Мелкие сработки на дрожание стрелки есть? Регулировать порог звука получается? Все печатки, что я тут наплодил- по сути сырые их еще обтесывать и обтесывать. Но я рад-не зря старался и НАС(тех кто собрал этот прибор) стало больше!
  15. А схемных изменений нет? ФМ трансмитер и шим выход какой то. У меня аппарат ровесник прошивки 2.0.2 как он с новой начинкой подружится?
  16. Привет всем квазароводам! Ребят, я пару лет не следил за форумом, скажите какую прошивку лучше поставить, а то у меня 2.0.2. стоит. Зашел к автору, а там уже СТОЛЬКО наворочено! Как тут разобраться?
  17. Спасибо DesAlex, ваша похвала дорогого стоит. Скажу честно, я бы и сам собрал готовое с удовольствием, но ничего похожего не нашел. А глубинник очень хочется. Здесь кстати так вышло, что предметов меньше плоскогубцев он вообще не видит. Можно добавить усиления в приемном тракте, начнет видеть мелочь, но тогда наверное надо булет зону нуля немного расширить, чтоб попискивания было меньше. Дел на 2 минуты. А можно сигнал снять со следующего каскада тл074.А залить скетч в ардуино сможет любой за 1 вечер, нужен лишь переходник usb-rs232.
  18. Все. Я закончил. С меня пока хватит. Вылаживаю все что получилось. Исправленное, дополненное. Если кто будет собирать, смотрите печатку-ее переделывал больше всего. Ардуино про мини 5в, 16МГц, АТмега168 и дисплей исрользовал вот такие. Рядом для масштаба переходник Мини СД- Как уже говорил 1602 стоит 86рублей, ПроМини -82 рубля. При желании можно вообще взять голую АТмегу168, разработать под нее плату и залить скетч прямо в нее. А так я например устанавливал при помощи разьема мама-папа на плату МД. На фото видно у Ардуино штекер на 6 пинов-через него и заливались скетчи прямо на плате. Скетч-MD.Rx-Tx.ProMini.SrednjajaTochka.ino // A3-аналоговый вход для вольтметра // А4-аналоговый вход для сигнала // 6- вывод зука // 10 - вывод частоты 31200 Гц #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // значок батарейки byte z1[8] = { 0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110 }; int countleds = 0; // переменная для хранения значения уровня шкалы int voltag = 0; //переменная для хранения значения напряжения int noll = 0; //переменная для хранения значения средней точки #define NUM_SAMPLES 10 // 10 аналоговых выборок для чтения int sum = 0; // сумма взятых образцов int sun = 0; // то же, но деленное на 10 unsigned char sample_count = 0; // текущий номер выборки с float voltage = 0.0; // рассчитаное напряжение void setup(){ lcd.begin(16, 2); // инициализация дисплея TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x09; analogWrite(9 ,126); // на выводе 9 ШИМ=50% f=31200Гц lcd.createChar(1, z1); } void loop() { sample_count = 0; //сбрасываем контур кол-ва сложений sum = 0; //сбрасываем сумму 10ти сложений while (sample_count < NUM_SAMPLES) { sum += analogRead(A4); // к сумме плюсуется очередное измерение delay(1); sample_count++; // к номеру измерения плюсуется еденица sun = sum/10;} // находим среднее значение из 10ти измерений noll = analogRead (A3)/2; // средняя точка питания float voltage = map(analogRead (A3),0,1023,0,1500)/100.0; //Вольтметр, построенный на входе А3 if (sun >= noll + 5) {countleds = map(sun, noll+5, noll*2 - 250, 9, 14); // если полученный рез-т на 9-15 сегмент шкалы tone(6, countleds*100);} if (sun <= noll - 5) {countleds = map(sun, 116, noll - 5, 0, 7); // если полученный рез-т на 0-7 сегмент шкалы tone(6, countleds*50); } if (sun < noll && sun >=noll - 4) {countleds = 7 ; noTone(6); } //островок виртуального НУЛЯ(7 сегмент) if (sun > noll && sun <= noll + 4) {countleds = 8 ; noTone(6); } //островок виртуального НУЛЯ шкалы(8 сегмент) // устанавливаем курсор в колонку countleds, строку 0 {lcd.setCursor(countleds, 0); lcd.print("\xff"); // закрашенный значок lcd.setCursor(0, 1); // перемещаем во 2 строку, столбец-0 lcd.print(char(1)); // Индикация значка батарейки lcd.setCursor(1, 1); // перемещаем на указание напряжения lcd.print(voltage); // вольтаж lcd.setCursor(7, 0); // 8й столбец 1я строка if (sun < noll ) { lcd.print("{");} // печать lcd.setCursor(8, 0); // 9й столбец 1я строка if (sun > noll ) { lcd.print("}");} // печать lcd.setCursor(8, 1); // 9й столбец 2я строка lcd.print(countleds); // номер заженного столбца 1я строка lcd.setCursor(13, 1); // 13й столбец 2я строка lcd.print(sun); // печать усредненного значения значения АЦП delay(100); // ждём lcd.clear(); } } Архив-МД на Ардуино.7z Автоноль не использовал.Последние два элемента ТЛ074 остались без дела. Но на схеме и плате они есть. Может появится желание довести их до рабочего состояния чуть позже. Я считаю, что я своего добился. Блок индикации работает чудесно, а именно этого я и хотел добиться. Все остальное зависит от МД. Удачи.
  19. Работает слишком хорошо. Загоняет стрелку за ноль в другой конец шкалы. Заброшу пока это дело. Терпение кончилось. Оформлю пока плату в корпус и буду ждать весны.
  20. Сегодня пробовал 817. Искажает синус на малом сигнале и выходной сигнал сдвинут на, блин , не помню насколько. Или 90 или 180 гр. Уже голова кипит. На сегодня хорош. Завтра попробую оптопару с плавным поджигом на полевике и кондером большой емкости на затворе. Чем фоторезистор хорош- сигнал не искажает. А вот разброс очень большой. Прийдется цифры к каждому подбирать индивидуально. Всем спокойной ночи.
  21. Программно полностью вряд ли. Не такой я крутой программист.)) А вот выдать на вывод шим сигнал со скважностью 10 если допустим отклонение от нуля составило более 0,05в в плюс от нуля или со скважностью, допустим, 30, если отклонение превысило , скажем, 0.3 вольт в плюс. И такие же значения для другого вывода, но только для напряжений ниже нуля. И вот тут главное что бы это напряжение ПОСТЕПЕННО начало влиять на схему компенсации. Может быть попробовать RC фильтры. Сейчас леплю оптопары из фоторезистора и светодиода. При отсутствии упр. напряжения сопротивление на выходе ноль. При полном засвете-несколько кОм
  22. Кто нибудь знает схему усилителя на оу с регулировкой Кус управляющим напряжением. Вечер прошел в бесполезных опытах. Впереди темно.
  23. Спасибо, но с четырьмя диодами я справился программно. Атмега теперь сама ноль высчитывает и следит за ним. Интересно как на эту модуляцию синхронный детектор отреагирует. Догадываюсь, что плохо. Надо продумать вариант на оу.
  24. DesAleks меня терзают смутные сомнения. Если примешать к той синусоиде, что мы имеем на выходе УМ и инвертора, сигнал шим АТмеги, то что там будет на выходе?
×
×
  • Создать...