Мазмұны:
- 1 -қадам: Arduino импульстік индукция идеясы - Flip катушкасы
- 2 -қадам: Детекторды құру (Нан тақтасы)
- 3 -қадам: ПХД -ге өту
- 4 -қадам: Детекторды орнату және пайдалану
- 5 -қадам: Жаңарту1: 16x2 СКД пайдалану
Бейне: Arduino негізіндегі импульстік индукция детекторы - айналдыру катушкасы: 5 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Ой
Бұрын әр түрлі нәтиже беретін бірнеше металл детекторларды құрастыра отырып, мен Arduino -ның осы бағыттағы мүмкіндіктерін зерттегім келді.
Металл детекторларын Arduino көмегімен қалай жасауға болатыны туралы жақсы мысалдар бар, кейбіреулері мұнда нұсқаулық ретінде. Бірақ оларға қараған кезде олар әдетте аналогты сигналды өңдеу үшін кейбір сыртқы компоненттерді қажет етеді немесе сезімталдығы өте төмен.
Металл детекторлар туралы ойлағанда, негізгі тақырып - іздеу катушкасына қатысты сигналдардың кернеудің шамалы өзгеруін қалай сезіну. Бұл өзгерістер әдетте өте аз. Ең айқын әдіс ATmega328 аналогтық кірістерін пайдалану болады. Бірақ ерекшеліктерге қарап, екі негізгі мәселе бар: олар (жиі) баяулайды, ал ажыратымдылық (көп жағдайда) төмен.
Екінші жағынан, Arduino 16 МГц жиілігінде жұмыс істейді және уақытты анықтауға мүмкіндік береді. д. рұқсаты 0,0625 мкв, егер жылдамдық пайдаланылса. Аналогты кірісті қолданудың орнына кернеудің шамалы динамикалық өзгерістерін сезудің ең қарапайым әдісі - тұрақты эталондық кернеуде уақыт бойынша кернеудің төмендеуінің өзгеруін салыстыру.
Осы мақсатта ATmega328 D6 мен D7 арасындағы ішкі компаратордың ұқыпты ерекшелігіне ие. Бұл салыстырғыш оқиғаны дәл өңдеуге мүмкіндік беретін үзілісті тудыруы мүмкін. Millis () және micos () сияқты ұқыпты кодталған уақыт тәртібінің жанында және әлдеқайда жоғары ажыратымдылықпен ATmega328 ішкі таймеріне кіре отырып, Arduino металл іздеу әдістерінің тамаша негізі болып табылады.
Бастапқы код көрінісінен кіріс полярлығының «өзгеруіне» ішкі салыстырғышты бағдарламалау және өзгерістер уақытын өзгерту үшін мүмкін болатын ең жоғары жылдамдықтағы ішкі есептегішті қолдану жақсы бастама болады.
Бұған қол жеткізу үшін Arduido -дегі жалпы код:
// Барлық қажетті алдын ала айнымалыларды анықтау және регистрлерді орнату
белгісіз char clockSelectBits = _BV (CS10); // алдын ала шкаласы жоқ, толық xtal void setup () {pinMode (6, INPUT); // + компараторы - оларды INPUT ретінде орнату арқылы олар // жоғары импеданс pinMode (7, INPUT) күйіне орнатылады; // - компаратордың - оларды INPUT ретінде орнату арқылы, олар // жоғары импеданс cli () орнатылады; // тоқтату үзулері TCCR1A = 0; // бүкіл TCCR1A регистрін 0 -ге орнату TCCR1B = 0; // TCCR1B үшін бірдей -> қалыпты режимTCNT1 = 0; // санауыш мәнін 0 -ге инициализациялау; TCCR1B | = clockSelectBits; // алдын ала есептегішті орнатады және сағатты іске қосады TIMSK1 = _BV (TOIE1); // таймердің толып кетуін тоқтатуды іске қосады bit sei (); // үзілістерге рұқсат ACSR = (0 << ACD) | // Аналогты салыстырушы: қосылған (0 << ACBG) | // Аналогтық компаратордың жолақты таңдау: 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 (); timeStamp = 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 катушкасы
Ардуиноны TPIMD сияқты импульстік индукция детекторы ретінде пайдалану идеясы, өйткені ыдырау қисығының уақыт идеясы өте жақсы жұмыс істейтін сияқты. Импульстік индукциялық детекторлардың мәселесі - олар жұмыс істеу үшін әдетте әр түрлі кернеуді қажет етеді. Катушканы қуаттандыратын бір кернеу және ыдырау қисығымен күресу үшін бөлек кернеу. Бұл екі кернеу көзі импульстік индукциялық детекторларды әрқашан біршама күрделі етеді.
PI детекторындағы катушка кернеуіне қарап, алынған қисықты екі түрлі кезеңге бөлуге болады. Бірінші кезең - импульстің өзі катушканы қуаттандырады және магнит өрісін қалыптастырады (1). Екінші кезең-кернеудің төмендеу қисығы, кернеудің шыңынан басталады, содан кейін катушканың (2) «қуатсыз» кернеуіне тез қосылады. Мәселе мынада, катушка импульстен кейін полярлығын өзгертеді. Пульс оң ма (Var 1. қосымшадағы суретте) ыдырау қисығы теріс. Импульс теріс пе, ыдырау қисығы оң болады (Қосымша суретте 2. Var)
Бұл негізгі мәселені шешу үшін импульстен кейін катушканы электронды түрде аудару қажет. Бұл жағдайда импульс оң болуы мүмкін, ал ыдырау қисығы оң болуы мүмкін.
Бұған жету үшін импульстен кейін катушканы Vcc пен GND -ден оқшаулау керек. Қазіргі уақытта демпферлік резистор арқылы тек ток өтеді. Бұл оқшауланған катушкалар мен демпферлік резисторлар жүйесі кез келген кернеуге бағытталуы мүмкін. Бұл теорияда аралас оң қисық сызықты жасайды (сызбаның төменгі жағы)
Бұл оң қисықты ыдырау кернеуі эталондық кернеуді «кесіп өтетін» уақыт нүктесін анықтау үшін компаратор арқылы қолдануға болады. Катушка жанында қазына болған жағдайда, ыдырау қисығы өзгереді және эталондық кернеуді кесіп өту уақыты өзгереді. Бұл өзгерісті анықтауға болады.
Біршама тәжірибеден кейін келесі схема жұмыс істеді.
Схема Arduino Nano модулінен тұрады. Бұл модуль D10 арқылы катушканы (SV3 кезінде) қуаттайтын екі MOSFET транзисторын басқарады. D10 импульсі аяқталған кезде, MOSFET -тің екеуі де катушканы 12В және GND -ден оқшаулайды. Катушкадағы үнемделген энергия R2 (220 Ом) арқылы кетеді. Сонымен қатар R1 (560 Ом) катушканың бұрынғы оң жағын GND -мен байланыстырады. Бұл R5 (330 Ом) теріс ыдырау қисығын оң қисыққа өзгертеді. Диодтар Arduino кіріс штырын қорғайды.
R7 - шамамен 0,04 В кернеуді бөлуші. Қазіргі уақытта D7 -де ыдырау қисығы D6 -дағы 0,04 -ке қарағанда теріс болады, үзіліс тригерт болады және импульс аяқталғаннан кейінгі ұзақтығы сақталады.
Катушкаға жақын металл болса, ыдырау қисығы ұзаққа созылады, ал импульстің соңы мен үзіліс арасындағы уақыт ұзарады.
2 -қадам: Детекторды құру (Нан тақтасы)
Детекторды құру өте қарапайым. Мұны нан тақтасында (бастапқы схемаға жабысып) немесе бөлшектерді ПХД -да дәнекерлеу арқылы жасауға болады.
Arduino Nano тақтасындағы D13 жарық диоды металлға көрсеткіш ретінде қолданылады
Нан тақтасын алу - жұмыс істейтін детектордың ең жылдам жолы. Біршама сым қажет, бірақ мұны кішкене нан тақтасында жасауға болады. Суреттерде бұл 3 қадамда көрсетілген, себебі Arduino мен MOSFETs сымдардың бір бөлігін жасырады. Тестілеу кезінде диодтарды қалай болғанда да ажыратпадым. Бұл детектордың мінез -құлқына теріс әсер еткен жоқ. Тізбектің ПХД нұсқасында мен оларды толығымен тастап кеттім.
0.96 OLED дисплейге қосылу суреттерде көрсетілмеген. Бұл дисплей қосылған:
Vcc - 5V (Arduino түйреуішінде, кернеудің кернеуі емес !!!)
GND - GND
SCL - A5
SDA - A4
Бұл OLED дисплейі детекторды бастапқыда калибрлеу үшін қажет. Бұл Arduino PIN6 -да кернеуді дұрыс орнату арқылы жасалады. Бұл кернеу шамамен 0,04 В болуы керек. Дисплей кернеуді дұрыс орнатуға көмектеседі.
Нан нұсқасы өте жақсы жұмыс істейді, бірақ, мүмкін, ол табиғатқа баруға жарамайды.
3 -қадам: ПХД -ге өту
Дәнекерлеуге келетін болсақ, мен екі жақты жоғары технологиялық ПХД-ны ұнатпаймын, сондықтан мен тізбекті бір жақты ПХД-ға сай етіп өзгерттім.
Келесі өзгертулер енгізілді:
1. диодтар сыртта қалды.
2. MOSFETs қақпасы 10 Ом резистор алды
3. D6 кернеу бөлгішінің қоректену кернеуі D8 жоғары деңгейлі сигналмен беріледі
4. MOSFET үшін драйвер түйреуіші өзгертілді.
Осылайша әмбебап ПХД -ге дәнекерлеуге болатын бір жақты ПХД құруға болады. Бұл схеманы қолдана отырып, сізде тек 8-10 сыртқы компоненттері бар жұмыс істейтін PI детекторы болады (OLED дисплейі және/немесе динамик қолданылатынына байланысты).
4 -қадам: Детекторды орнату және пайдалану
Егер детектор дұрыс құрастырылса және бағдарлама Arduino -ға жазылса, құрылғыны орнатудың ең оңай жолы (жалғыз емес) - OLED дисплейін пайдалану. Дисплей 5V, GND, A4, A5 қосылады. Құрылғы қосылғаннан кейін дисплейде «калибрлеу» көрсетілуі керек. Бірнеше секундтан кейін «калибрлеу орындалды» деген жазу шығады және дисплейде үш сан көрсетіледі.
Бірінші сан - калибрлеу кезінде анықталатын «сілтеме мәні». Екінші мән-соңғы өлшенген соңғы мән және үшінші мән-соңғы 32 өлшеулердің орташа мәні.
Бұл үш мән көп немесе аз болуы керек (менің тест жағдайымда 1000-нан төмен). Орташа мән көп немесе аз тұрақты болуы керек.
Бастапқы орнатуды бастау үшін катушканың жанында металл болмауы керек.
Енді кернеуді бөлгішті (трим потенциометрін) кесу керек, осылайша тұрақты оқуды бере отырып, төменгі екі мән максимумға орнатылуы керек. Орташа мән оғаш оқуды бастайтын маңызды параметр бар. Қайта тұрақты мәндерді алу үшін қайшыны артқа бұрыңыз.
Мүмкін, дисплей қатып қалады. Қалпына келтіру түймесін басып, қайтадан бастаңыз.
Менің баптауым үшін (катушка: 18 см @ 20см) тұрақты мән 630-650 шамасында. Орнатылғаннан кейін қалпына келтіру түймесін басыңыз, құрылғы қайта калибрленеді және барлық ағаш мәндері қайтадан сол диапазонда болуы керек. Егер металл енді катушкаға әкелінсе, Arduino-Board тақтасындағы (D13) жарық диоды жанады. Қосылған динамик шертетін дыбыстар береді (бағдарламалауды жақсартуға мүмкіндік бар).
Үлкен үміттердің алдын алу үшін:
Детектор кейбір заттарды анықтайды, бірақ ол өте қарапайым және шектеулі детектор болып қала береді.
Мүмкіндіктер туралы түсінік беру үшін басқа детекторлардың көмегімен анықтамалық анықтамалар жасады. Нәтижелерге қарасақ, бұл тек 8 сыртқы бөліктері бар, бірақ кәсіби детекторларға сәйкес келмейтін детектор үшін әлі де әсерлі.
Схемаға және бағдарламаға қарап, жақсартуға көп мүмкіндік бар. Резисторлардың мәндері тәжірибе бойынша анықталды, импульстік уақыт 250 мс кездейсоқ таңдалды, сонымен қатар катушкалар параметрлері. Егер сізде жақсартуға арналған идеялар болса, мен оларды талқылауға қуаныштымын.
Масайрау!
5 -қадам: Жаңарту1: 16x2 СКД пайдалану
Жақсартулар
Қосымша тестілеу кезінде I2C OLED дисплейінің кітапханасы көп уақыт жұмсайтынын түсіндім. Мен оның орнына I2C түрлендіргіші бар 16x2 дисплейді қолдануды шештім.
Мен бағдарламаны СКД дисплейіне енгіздім, оған бірнеше пайдалы мүмкіндіктер қосылды. Дисплейдің бірінші жолы енді мүмкін болатын сигналдың күшін көрсетеді. Екінші жол енді екі мәнді көрсетеді. Жұдырық калибрлеу мәнімен салыстырғанда ағымдағы сигналдың ауытқуын көрсетті. Бұл мән «0» болуы керек. Егер бұл мән үнемі теріс немесе оң болса, детекторды қалпына келтіру түймесін басу арқылы қайта калибрлеу қажет. Оң мәндер катушкаға жақын металды көрсетеді.
Екінші мән ыдырау қисығының нақты кідіріс мәнін көрсетеді. Бұл мән әдетте қызықты емес, бірақ детекторды бастапқы орнату үшін қажет.
Бағдарлама импульстің бірнеше ұзақтығын реттілікпен жүргізуге мүмкіндік береді (эксперимент / өнімділікті жақсарту құралы). Мен ешқандай үзіліске қол жеткізе алмадым. Сондықтан әдепкі импульстің бір ұзақтығына орнатылады.
Детекторды бастапқы орнату
Детекторды орнатқанда, екінші жолдың екінші мәні сәйкес келеді (біріншісін елемеуге болады). Бастапқыда мән «тұрақсыз» болуы мүмкін (суретті қараңыз). Мән тұрақты көрсеткішке жеткенше жиектелген резисторды бұрыңыз. Содан кейін мәнді максималды тұрақты мәнге дейін ұлғайту үшін оны бұрыңыз. Қайта калибрлеу үшін қалпына келтіру түймесін басыңыз, сонда детектор пайдалануға дайын болады.
Мен максималды тұрақты мәнді орнату арқылы темір емес металдарға сезімталдықты жоғалттым деген әсер алдым. Темір емес заттарға жақсы сезімталдыққа ие болу үшін параметрлерді тәжірибеден өткізген жөн болар.
Катушкалар
Мен одан әрі тексеру үшін 3 катушка құрастырамын
200 мм -де 1 -> 18 бұрылыс
2 -> 25 мм @ 100 мм
3 -> 100 мм @ 48 бұрылыс
Бір қызығы, барлық катушкалар өте жақсы жұмыс істеді, олар бірдей өнімділікпен (ауада 40-50 мм 20 центтік монета). Бұл өте субъективті бақылау болуы мүмкін.
Ұсынылған:
LDR негізіндегі жарық сенсоры/детекторы: 3 қадам
LDR негізіндегі жарық сенсоры/детекторы: Жарық сенсорлары мен детекторлары микроконтроллерлер мен кіріктірілген жүйелер үшін өте пайдалы, сонымен қатар қарқындылықты бақылау қажет. Мұндай сенсорлардың ең қарапайымы мен ең арзанының бірі - LDR. LDR немесе жарыққа тәуелді резисторларды оңай қолдануға болады
IOT негізіндегі газ ағу детекторы: 4 қадам
IOT негізіндегі газ ағу детекторы: 1 талап
Arduino негізіндегі байланыссыз инфрақызыл термометр - IR негізіндегі термометр Arduino көмегімен: 4 қадам
Arduino негізіндегі байланыссыз инфрақызыл термометр | Ардуиноны қолданатын инфрақызыл термометр: Сәлеметсіз бе, балалар, біз индуктивті емес термометр жасаймыз, өйткені кейде сұйықтықтың/қатты заттың температурасы тым жоғары немесе төмен болады, содан кейін онымен байланыс жасау және оны оқу қиын. сол кездегі температура
DIY Arduino негізіндегі импульсті индукциялық металл детекторы: 5 қадам
DIY Arduino негізіндегі импульсті индукциялық металл детекторы: Бұл тамаша көрсеткіштері бар салыстырмалы қарапайым металл детектор
Жалпақ спиральды катушкасы бар DIY индукциялық қыздырғыш схемасы (құймақ катушкасы): 3 қадам
Жалпақ спиральды катушкасы бар DIY индукциялық жылытқыш тізбегі (құймақ катушкасы): Индукциялық жылыту - бұл электр өткізгіш затты (әдетте металды) электромагниттік индукция арқылы, объектіде құйынды ток арқылы пайда болатын жылу арқылы қыздыру процесі. Бұл бейнеде мен сізге қалай қуатты болу керектігін көрсетемін