Съдържание:
- Стъпка 1: Идея за импулсна индукция на Arduino - Flip Coil
- Стъпка 2: Изграждане на детектора (Брендборд)
- Стъпка 3: Преминаване към печатна платка
- Стъпка 4: Настройка и използване на детектора
- Стъпка 5: Актуализация1: Използване на 16x2 LCD
Видео: Импулсен детектор на базата на Arduino - флип бобина: 5 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Идеята
Създавайки в миналото някои металотърсачи с различни резултати, исках да проуча възможностите на Arduino в тази посока.
Има някои добри примери за това как да се правят металотърсачи с Arduino, някои тук като инструкции. Но когато ги гледаме, те обикновено изискват или доста външни компоненти за обработката на аналоговия сигнал, или чувствителността е доста ниска.
Когато мислите за металотърсачи, основната тема е как да усетите леките промени на напрежението в сигналите, свързани с търсещата бобина. Обикновено тези промени са много малки. Най -очевидният подход би бил използването на аналоговите входове на ATmega328. Но разглеждайки спецификациите, има два основни проблема: те (често) се забавят и разделителната способност (в повечето случаи) е ниска.
От друга страна, Arduino работи на 16MHz и има доста възможности за синхронизиране i. д. разделителна способност 0,0625µS, ако използвате тактова честота. Така че вместо да използвате аналоговия вход за откриване, най -простият начин за усещане на малки динамични промени в напрежението е да сравните промяната в спада на напрежението във времето при фиксирано референтно напрежение.
За тази цел ATmega328 има чистата характеристика на вътрешен сравнител между D6 и D7. Този компаратор може да задейства прекъсване, което позволява прецизно обработване на събития. Оставяйки покрай добре кодираните процедури за синхронизиране като millis () и micos () и влизайки във вътрешния таймер на ATmega328 с много по -висока разделителна способност, Arduino е чудесна основа за подходи за откриване на метал.
Така че от изходния код изглед, добро начало би било да се програмира вътрешния сравнител за „промяна“в полярността на входовете и да се използва вътрешен брояч с възможно най -висока скорост за промяна във времето на промените.
Общият код в Arduido за постигане на това е:
// Определяне на всички необходими предварителни променливи и т.н. и настройка на регистрите
unsigned char clockSelectBits = _BV (CS10); // без предварителна скала, пълна настройка на xtal void () {pinMode (6, INPUT); // + на компаратора - като ги зададете като INPUT, те са // настроени на висок импеданс pinMode (7, INPUT); // - на компаратора - като ги зададете като INPUT, те са // настроени на висок импеданс cli (); // спиране прекъсва TCCR1A = 0; // задаваме целия регистър на TCCR1A на 0 TCCR1B = 0; // същото за TCCR1B -> нормален режимTCNT1 = 0; // инициализира стойността на брояча на 0; TCCR1B | = clockSelectBits; // задава предусилвател и стартира часовника TIMSK1 = _BV (TOIE1); // задава разрешаване на прекъсване на таймера за разрешаване на бита sei (); // разрешавам прекъсвания ACSR = (0 << ACD) | // Аналогов компаратор: Разрешено (0 << ACBG) | // Аналогов компаратор Bandgap Select: AIN0 се прилага към положителния вход (0 << ACO) | // Изход за аналогов компаратор: Изключен (1 << ACI) | // Флаг на прекъсване на аналоговия компаратор: Изчистване на висящо прекъсване (1 << ACIE) | // Прекъсване на аналоговия компаратор: Разрешено (0 << ACIC) | // Захващане на входа на аналоговия компаратор: Деактивирано (0 << ACIS1 | 0 << ACIS0 // прекъсване при превключване на изхода // (0 << ACIS1 | 1 << ACIS0 // запазено // (1 << ACIS1 | 0 << ACIS0 // прекъсване при падащ изходен ръб // (1 << ACIS1 | 1 << ACIS0 // прекъсване при нарастващ входен ръб;}
// тази рутина се извиква всеки път, когато компараторът създава прекъсване
ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); времева маркировка = TCNT1; SREG = oldSREG; }
// тази рутина се извиква всеки път, когато има препълване във вътрешен брояч
ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }
// тази рутина се използва за нулиране на таймера на 0
void resetTimer (void) {oldSREG = SREG; cli (); // Деактивиране на прекъсвания TCNT1 = 0; // инициализира стойността на брояча на 0 SREG = oldSREG; // Възстановяване на регистър на състоянието TCCR1B | = clockSelectBits; // задава предварително дебитомер и стартира часовника timer1_overflow_count = 0; // нулира брояча за препълване}
Разбира се, тази идея не е съвсем нова. Основната част от този код може да се намери другаде. Добра реализация такъв подход за микроконтролер, открит на началната страница на TPIMD - Tiny Pulse Induction Metal Detector.
www.miymd.com/index.php/projects/tpimd/ (за съжаление тази страница вече не е онлайн, в момента има резервно копие на сайта на www.basic4mcu.com, потърсете „TPIMD“).
Стъпка 1: Идея за импулсна индукция на Arduino - Flip Coil
Идеята е да се използва Arduino като детектор за пулсова индукция, както в TPIMD, тъй като идеята за време на кривата на разпадане изглежда работи доста добре. Проблемът с детекторите с пулсова индукция е, че те обикновено се нуждаят от различно напрежение, за да работят. Едно напрежение за захранване на бобината и отделно напрежение за справяне с кривата на разпадане. Тези два източника на напрежение правят импулсно -индукционните детектори винаги малко сложни.
Разглеждайки напрежението на бобината в PI детектор, получената крива може да бъде разделена на два различни етапа. Първият етап е самият импулс, който захранва намотката и изгражда магнитното поле (1). Вторият етап е кривата на спадане на напрежението, започвайки с пик на напрежение, след което бързо се настройва до напрежението "без захранване" на бобината (2). Проблемът е, че бобината променя полярността си след импулса. Дали импулсът е положителен (Var 1. на приложената снимка) кривата на затихване е отрицателна. Дали импулсът е отрицателен, кривата на затихване ще бъде положителна (Var 2. на приложената снимка)
За да се реши този основен проблем, бобината трябва да се „преобърне“по електронен път след импулса. В този случай импулсът може да бъде положителен и кривата на затихване също може да бъде положителна.
За да се постигне това, бобината трябва да бъде изолирана от Vcc и GND след импулса. В този момент през демпфиращ резистор тече само ток. Тази изолирана система от бобина и демпфиращ резистор може да бъде „ориентирана“към каквото и да е референтно напрежение. Това на теория ще създаде комбинираната положителна крива (дъното на чертежа)
Тази положителна крива може след това да се използва чрез сравнителя за откриване на момента, в който разпадащото напрежение „пресича“референтното напрежение. В случай на съкровища близо до намотката, кривата на разпадане се променя и моментът, пресичащ референтното напрежение, се променя. Тази промяна може да бъде открита.
След известно експериментиране следната схема се оказа работеща.
Веригата се състои от модул Arduino Nano. Този модул задвижва два MOSFET транзистора, захранващи бобината (при SV3) чрез D10. Когато импулсът при D10 приключи, и двата MOSFET изолират бобината от 12V и GND. Спестената енергия в намотката изтича през R2 (220 ома). В същото време R1 (560 ома) свързва предишната положителна страна на бобината GND. Това променя отрицателната крива на разпадане при R5 (330 ома) до положителна крива. Диодите защитават входния щифт на Arduino.
R7 е делител на напрежение при около 0.04V. В момента кривата на затихване при D7 става по -отрицателна от 0,04 при D6, се задейства прекъсване и се запазва продължителността след края на импулса.
В случай на метал близо до бобината, кривата на разпадане продължава по -дълго, а времето между края на импулса и прекъсването се удължава.
Стъпка 2: Изграждане на детектора (Брендборд)
Изграждането на детектора е доста лесно. Това може да стане или на макет (придържайки се към оригиналната схема), или чрез запояване на частите върху печатна платка.
Светодиодът D13 на дъската Arduino Nano се използва като индикация за метал
Премахването на макет е най -бързият път към работещия детектор. Необходимо е доста окабеляване, но това може да се направи с малка дъска. На снимките това е показано в 3 стъпки, тъй като Arduino и MOSFET крият някои от проводниците. При тестването изключих диодите по някакъв начин, без първо да забележа. Това няма отрицателен ефект върху поведението на детектора. Във версията на печатната платка ги оставих напълно.
На снимките не са показани връзките към 0,96 OLED дисплей. Този дисплей е свързан:
Vcc - 5V (на щифта Arduino, а не на захранващото напрежение !!!)
GND - GND
SCL - A5
SDA - A4
Този OLED дисплей е необходим за първоначално калибриране на детектора. Това става чрез задаване на правилното напрежение в PIN6 на Arduino. Това напрежение трябва да бъде около 0.04V. Дисплеят помага да се настрои правилното напрежение.
Версията на макет работи доста добре, въпреки че вероятно не е подходяща за навлизане в природата.
Стъпка 3: Преминаване към печатна платка
Що се отнася до запояването, аз всъщност не харесвам двустранна високотехнологична печатна платка, затова модифицирах веригата, за да се побере на двустранна печатна платка.
Направени са следните модификации:
1. диодите бяха пропуснати.
2. портите на MOSFET има резистор от 10 ома
3. захранващото напрежение за делителя на напрежение при D6 се дава от сигнал за ВИСОКО ниво при D8
4. ПИН драйвер за MOSFETs е променен.
По този начин може да се създаде едностранна печатна платка, която може да бъде запоена върху универсални печатни платки. Използвайки тази схема, ще имате работещ PI детектор само с 8-10 външни компонента (в зависимост дали се използва OLED дисплей и/или високоговорител).
Стъпка 4: Настройка и използване на детектора
Ако детекторът е изграден правилно и програмата е написана на Arduino, най -лесният (ако не и единственият) начин за настройка на устройството е да използвате OLED дисплей. Дисплеят е прикрепен към 5V, GND, A4, A5. Дисплеят трябва да показва „калибриране“след включване на устройството. След няколко секунди трябва да пише „калибрирането е извършено“и на дисплея трябва да се покажат три числа.
Първото число е „референтната стойност“, идентифицирана по време на калибрирането. Втората стойност е последната измерена стойност, а третата стойност е средна стойност от последните 32 измервания.
Тези три стойности трябва да са горе-долу еднакви (в моите тестови случаи под 1000). Средната стойност трябва да бъде повече или по -малко стабилна.
За да започнете първоначалната настройка, не трябва да има метал близо до бобината.
Сега делителят на напрежението (потенциометър за подстригване) трябва да бъде подрязан, така че долните две стойности да бъдат зададени на максимум, като същевременно остават стабилни показания. Има критична настройка, при която средната стойност започва да дава странни показания. Върнете тримера обратно, за да получите отново стабилни стойности.
Възможно е дисплеят да замръзне. Просто натиснете бутона за нулиране и започнете отначало.
За моята настройка (бобина: 18 оборота при 20 см) стабилната стойност е около 630-650. След като настроите, натиснете бутона за нулиране, устройството се калибрира отново и всички стойности на дървото трябва да бъдат отново в същия диапазон. Ако сега металът се доведе до намотка, светодиодът на дъската на Arduino (D13) трябва да светне. Прикаченият високоговорител издава известни шумове при щракане (има място за подобряване на програмирането).
За да предотвратите високи очаквания:
Детекторът открива някои неща, но остава много прост и ограничен детектор.
За да създаде впечатление за възможностите, a направи някои референтни откривания с различни други детектори. Ако погледнем резултатите, той все още е доста впечатляващ за детектор само с 8 външни части, но не съвпадащ с професионални детектори.
Разглеждайки схемата и програмата, има много място за подобрения. Стойностите на резисторите бяха установени от опит, времето на импулса от 250 ms беше избрано на случаен принцип, параметрите на бобината също. Ако имате идеи за подобрения, ще се радвам да ги обсъдим.
Забавлявай се!
Стъпка 5: Актуализация1: Използване на 16x2 LCD
Подобрения
По време на по -нататъшното тестване разбрах, че библиотеката за I2C OLED дисплея изразходва значително време. Затова реших вместо това да използвам 16x2 дисплей с I2C конвертор.
Затова приех програмата към LCD дисплея, добавяйки някои полезни функции. Първият ред на дисплея сега показва силата на сигнала на възможна индикация. Вторият ред сега показва две стойности. Юмрукът показва текущото отклонение на сигнала в сравнение със стойността на калибриране. Тази стойност трябва да бъде "0". Ако тази стойност е постоянно отрицателна или положителна, детекторът трябва да се калибрира отново чрез натискане на бутона за нулиране. Положителните стойности показват метал близо до бобината.
Втората стойност показва действителната стойност на забавяне на кривата на затихване. Тази стойност обикновено не е толкова интересна, но е необходима за първоначалната настройка на детектора.
Програмата вече позволява множество импулсни продължителности в последователност (средства за експериментиране / подобряване на производителността). Не постигнах пробив. Така по подразбиране е зададена продължителност на един импулс.
Първоначална настройка на детектора
При настройка на детектора втората стойност на втория ред е от значение (първата може да бъде пренебрегната). Първоначално стойността може да бъде „нестабилна“(вижте снимката). Завъртете резистора за подстригване, докато стойността достигне стабилно отчитане. След това го завъртете, за да увеличите стойността до максимална стабилна стойност. Натиснете бутона за нулиране, за да калибрирате отново и детекторът е готов за употреба.
Останах с впечатлението, че чрез задаване на максимална стабилна стойност, загубих чувствителност към метали, които не са желязни. Така че може би си струва да експериментирате с настройките, за да имате добра чувствителност към неща, които не са желязни.
Бобини
Изграждам 3 намотки за по -нататъшно тестване
1 -> 18 завъртания при 200 мм
2 -> 25 завъртания при 100 мм
3 -> 48 завъртания при 100 мм
Интересното е, че всички бобини работиха доста добре, с почти еднаква производителност (20-каратна монета при 40-50 мм във въздуха). Това може да е доста субективно наблюдение.
Препоръчано:
Направете своя собствена бобина Tesla: 5 стъпки (със снимки)
Направете своя собствена намотка на Tesla: В този проект първо ще ви покажа как работи обикновеният комплект намотка на tesla бобина с възбудител и как можете да създадете своя собствена подобрена версия на намотка tesla, която обикновено се нарича SSTC. По пътя ще говоря за веригата на водача, как
Индукционен металдетектор на базата на Arduino на базата на DIY: 5 стъпки
DIY Ардуино базиран импулсен метален детектор: Това е сравнително прост металдетектор с отлични характеристики
Импулсен детектор на базата на Arduino - LC -капан: 3 стъпки
Ардуино базиран пулсово-индукционен детектор-LC-капан: Докато търсех допълнителни идеи за прост метален детектор Ardino Pulse Induction само с едно захранващо напрежение, попаднах на началната страница на Teemo: http: //www.digiwood.ee/8-electronic- проекти/2-метал-детектор-верига Той създаде прост Pulse Induct
Arduino DCF77 импулсен часовник: 13 стъпки (със снимки)
Arduino DCF77 Pulse Clock: Въведение Тази инструкция ви показва как да направите цифров импулсен часовник и да го добавите към стар 12 " (300 мм) часовник или циферблат & рамка. Използвал съм стар английски часовник за набиране с 12 " наберете, но всеки часовник с достатъчно голям корпус може да се използва
IOT детектор за дим: Актуализирайте съществуващ детектор за дим с IOT: 6 стъпки (със снимки)
IOT Smote Detector: Актуализирайте съществуващия детектор на дим с IOT: Списък на сътрудниците, Изобретател: Tan Siew Chin, Tan Yit Peng, Tan Wee Heng Надзорник: Д -р Chia Kim Seng Катедра по мехатронно и роботизирано инженерство, Факултет по електротехника и електронно инженерство, Universiti Tun Хюсеин Он Малайзия. Разпространение