Мазмуну:

Arduino негизделген Pulse индукция детектору - Flip Coil: 5 кадам (Сүрөттөр менен)
Arduino негизделген Pulse индукция детектору - Flip Coil: 5 кадам (Сүрөттөр менен)

Video: Arduino негизделген Pulse индукция детектору - Flip Coil: 5 кадам (Сүрөттөр менен)

Video: Arduino негизделген Pulse индукция детектору - Flip Coil: 5 кадам (Сүрөттөр менен)
Video: Hack: modify 20A DC 10-60V PWM Motor Speed Controller and control with Arduino 2024, Июль
Anonim
Arduino негизделген Pulse индукция детектору - Flip Coil
Arduino негизделген Pulse индукция детектору - Flip Coil
Arduino негизделген Pulse индукция детектору - Flip Coil
Arduino негизделген Pulse индукция детектору - Flip Coil

Ой

Өткөндө ар кандай натыйжаларга ээ болгон металл детекторлорун куруп, Arduino компаниясынын мүмкүнчүлүктөрүн ошол багытта изилдегим келди.

Металл детекторлорду Arduino менен кантип куруунун кээ бир жакшы мисалдары бар, кээ бирлери бул жерде көрсөтмө катары. Бирок аларды карап жатканда, алар адатта аналогдук сигналды дарылоо үчүн бир аз тышкы компоненттерди талап кылат же сезгичтиги өтө төмөн.

Металл детекторлор жөнүндө ойлонгондо, негизги тема издөө катушуна тиешелүү сигналдардагы чыңалуунун кичине өзгөрүшүн кантип сезүү керек. Бул өзгөрүүлөр, адатта, өтө аз. Эң ачык мамиле ATmega328дин аналогдук кириштерин колдонуу болмок. Бирок мүнөздөмөлөрдү карасак, эки негизги көйгөй бар: алар (көбүнчө) жай жана чечими (көпчүлүк учурларда) төмөн.

Башка жагынан алганда, Arduino 16 МГцте иштейт жана убакыттын бир топ мүмкүнчүлүктөрүнө ээ. д. саат ылдамдыгын колдонсоңуз, чечим 0.0625µS. Аналогдук аналогду колдонуунун ордуна, чыңалуунун кичинекей динамикалык өзгөрүүлөрүн сезүүнүн эң жөнөкөй жолу - белгиленген чыңалуудагы убакыттын өтүшү менен чыңалуунун төмөндөшүнүн өзгөрүшүн салыштыруу.

Бул үчүн ATmega328 D6 менен D7 ортосундагы ички салыштыргычтын тыкан өзгөчөлүгүнө ээ. Бул салыштыргыч үзгүлтүккө учуратып, окуяны так иштетүүнү камсыздай алат. Милис () жана 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; // prescaler орнотот жана саатты баштайт TIMSK1 = _BV (TOIE1); // таймердин толуп кетүүсүн камсыздайт bit sei (); // үзгүлтүктөргө жол берүү ACSR = (0 << ACD) | // Analog Comparator: Enabled (0 << ACBG) | // Analog Comparator Bandgap Select: AIN0 оң киргизүүгө колдонулат (0 << ACO) | // Analog Comparator Output: Off (1 << ACI) | // Analog Comparator Interrupt Flag: Clear Pending Interrupt (1 << ACIE) | // Analog Comparator Interrupt: Enabled (0 << ACIC) | // Analog Comparator Input Capture: Өчүрүлгөн (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; // prescaler орнотот жана саатты баштайт timer1_overflow_count = 0; // ашыкча эсептегичти баштапкы абалга келтирет}

Албетте, бул идея таптакыр жаңы эмес. Бул коддун негизги бөлүгүн башка жактан тапса болот. Микроконтроллердин мындай жакшы ишке ашышы TPIMD - Tiny Pulse Induction Metal Detector башкы бетинде табылган.

www.miymd.com/index.php/projects/tpimd/ (тилекке каршы бул баракча азыр онлайнда эмес, учурда www.basic4mcu.com сайтынын камдык көчүрмөсү бар, "TPIMD" издеңиз).

1 -кадам: Arduino Pulse Induction Idea - Flip Coil

Arduino Pulse Induction Idea - Flip Coil
Arduino Pulse Induction Idea - Flip Coil
Arduino Pulse Induction Idea - Flip Coil
Arduino Pulse Induction Idea - Flip Coil

Идея, Arduino'yу TPIMDдегидей, Пульс индукциясы детектору катары колдонуу, анткени чирүү ийригинин убакыт идеясы абдан жакшы иштейт окшойт. Pulse Induction детекторлорунун көйгөйү, алар иштеши үчүн адатта ар кандай чыңалууга муктаж. Катушканы иштетүү үчүн бир чыңалуу жана ажыроо ийри менен күрөшүү үчүн өзүнчө чыңалуу. Бул эки чыңалуу булагы импульстук индукция детекторлорун дайыма бир аз татаалдаштырат.

PI детекторундагы катуштун чыңалуусун карасак, пайда болгон ийри сызыкты эки башка этапка бөлүүгө болот. Биринчи этап - бул катушка импульстун өзү жана магнит талаасынын курулушу (1). Экинчи этап-чыңалуу чыңалуусунун ийри сызыгы, чыңалуу чокусунан башталып, андан кийин катуштун "кубаты жок" чыңалуусуна (2) тез ылдамдыкта. Маселе, катушка импульсунан кийин полярлыгын өзгөртөт. Пульс оңбу (Var 1. тиркелген сүрөттө) ажыроо-ийри терс. Импульс терспи, ажыроо ийри оң болот (Var 2. тиркелген сүрөттө)

Бул негизги маселени чечүү үчүн, катушка импульстун артынан электрондук түрдө "оодарылышы" керек. Бул учурда импульс оң жана ажыроо ийри оң болушу мүмкүн.

Буга жетишүү үчүн, катушка пульстен кийин Vcc жана GNDден обочолонушу керек. Азыркы учурда, демпфердик резистор аркылуу агып жаткан гана агым бар. Бул катушка жана демпирлөөчү резистордун изоляцияланган системасы кандайдыр бир чыңалуу чыңалуусуна "багытталган" болот. Бул теориялык жактан бириккен оң ийри сызыкты түзөт (чийменин түбү)

Бул оң ийри сызык чыңалуусу чыңалуу чыңалуусун "кесип" кеткен учурду аныктоо үчүн компаратор аркылуу колдонулушу мүмкүн. Катушка жакын казыналар болсо, ажыроо ийри сызыгы өзгөрөт жана чыңалуу чыңалуусунун убактысы өзгөрөт. Бул өзгөрүүнү аныктоого болот.

Бир аз эксперименттен кийин төмөнкү схема иштээрин далилдеди.

Район Arduino Nano модулунан турат. Бул модуль D10 аркылуу катушка (SV3те) иштеген эки MOSFET транзисторун айдайт. D10догу импульс бүткөндө, MOSFETтин экөө тең спиралды 12V жана GNDден изоляциялайт. Катушкада сакталган энергия R2 (220 Ом) аркылуу агат. Ошол эле учурда R1 (560 Ом) GND катушкасынын мурунку оң жагын байланыштырат. Бул R5 (330 Ом) терс ажыроо кыйшыгын оң ийри сызыкка өзгөртөт. Диоддор Arduino кирүү пинин коргойт.

R7 болжол менен 0.04V чыңалуу бөлүштүргүч. Учурда D7деги ажыроо ийри сызыгы D6дагы 0.04кө караганда терс болуп калат, үзгүлтүк триггер болуп саналат жана импульс бүткөндөн кийинки узактык сакталат.

Катушка жакын металл болсо, ажыроо ийри узакка созулат жана импульстун аягы менен үзүлүүнүн ортосундагы убакыт узарат.

2 -кадам: Детекторду куруу (Breadboard)

Детекторду куруу (Нан тактасы)
Детекторду куруу (Нан тактасы)
Детекторду куруу (Нан тактасы)
Детекторду куруу (Нан тактасы)
Детекторду куруу (Нан тактасы)
Детекторду куруу (Нан тактасы)

Детекторду куруу абдан оңой. Бул нан панелинде (баштапкы схемага жабышып) же бөлүктөрдү ПХБга ширетүү менен жасалышы мүмкүн.

Arduino Nano тактасындагы D13 LED металл үчүн көрсөткүч катары колдонулат

Нан тактасын чыгаруу - детектордун иштөөчү эң ылдам жолу. Бир аз зым керек, бирок муну кичинекей нан тактасы менен жасаса болот. Сүрөттөрдө бул 3 этапта көрсөтүлгөн, анткени Arduino жана MOSFETs зымдардын бир бөлүгүн жашырып жатышат. Сыноо учурунда диоддорду кандайдыр бир жол менен ажыратып салдым. Бул детектордун жүрүм -турумуна терс таасирин тийгизген жок. Райондун PCB версиясында мен аларды толугу менен таштап койгом.

0.96 OLED дисплейге туташуулар сүрөттөрдө көрсөтүлгөн эмес. Бул дисплей туташкан:

Vcc - 5V (Arduino пининде, камсыздоо чыңалуусу эмес !!!)

GND - GND

SCL - A5

SDA - A4

Бул OLED дисплей детекторду алгач калибрлөө үчүн керек. Бул Arduino PIN6 туура чыңалуу орнотуу менен ишке ашат. Бул чыңалуу 0,04В тегерегинде болушу керек. Дисплей туура чыңалууну орнотууга жардам берет.

Нан версиясы абдан жакшы иштейт, бирок, кыязы, жапайы жаратылышка чыгуу үчүн ылайыктуу эмес.

3 -кадам: ПХБга баруу

ПКБга өтүү
ПКБга өтүү
ПКБга өтүү
ПКБга өтүү
ПКБга өтүү
ПКБга өтүү
ПКБга өтүү
ПКБга өтүү

Лайкага келсек, мен эки тараптуу жогорку технологиялуу ПХБны такыр жактырбайм, андыктан схеманы бир жактуу ПХБга ылайыкташтырып өзгөрттүм.

Төмөнкү өзгөртүүлөр киргизилди:

1. диоддор сыртта калган.

2. MOSFETтин дарбазасы 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) LEDи күйүп турушу керек. Тиркелген спикер кээ бир чыкылдатуу үндөрүн берет (ал жерде программалоону жакшыртуу үчүн орун бар).

Жогорку күтүүлөрдү болтурбоо үчүн:

Детектор кээ бир нерселерди аныктайт, бирок ал өтө жөнөкөй жана чектелген детектор бойдон калат.

Мүмкүнчүлүктөрдү элестетүү үчүн, башка ар кандай детекторлор менен бир нече аныктама кылды. Жыйынтыктарды карасак, 8 гана тышкы бөлүгү бар, бирок профессионалдуу детекторлорго дал келбеген детектор үчүн дагы деле таасирдүү.

Районду жана программаны карасак, өркүндөтүүгө көп мүмкүнчүлүктөр бар. Резисторлордун баалуулуктары тажрыйба боюнча табылган, 250ms импульс убактысы туш келди тандалган, ошондой эле катушка параметрлери. Эгерде сизде жакшыртуу боюнча идеялар болсо, мен аларды талкуулоого кубанычта болом.

Көңүл ачуу!

5 -кадам: Update1: 16x2 ЖК колдонуу

Update1: 16x2 ЖК колдонуу
Update1: 16x2 ЖК колдонуу
Update1: 16x2 ЖК колдонуу
Update1: 16x2 ЖК колдонуу
Update1: 16x2 ЖК колдонуу
Update1: 16x2 ЖК колдонуу

Жакшыртуулар

Кийинки тестирлөө учурунда I2C OLED дисплейинин китепканасы бир топ убакытты колдонуп жатканын түшүндүм. Ошентип, анын ордуна I2C конвертери бар 16x2 дисплейди колдонууну чечтим.

Ошентип, мен программаны ЖК дисплейге кошуп, кээ бир пайдалуу функцияларды коштум. Дисплейдин биринчи сабы азыр мүмкүн болгон сигналдын күчүн көрсөтөт. Экинчи сап азыр эки баалуулукту көрсөтөт. Муштум калибрлөө маанисине салыштырмалуу учурдагы сигналдын четтөөсүн көрсөткөн. Бул маани "0" болушу керек. Эгерде бул көрсөткүч дайыма терс же оң болсо, детекторду кайра коюу баскычын басуу менен кайра калибрлөө керек. Позитивдүү маанилер катушка жакын металлды көрсөтөт.

Экинчи маани чирүү ийригинин чыныгы кечигүү маанисин көрсөтөт. Бул маани адатта анча деле кызыктырбайт, бирок детектордун баштапкы орнотулушу үчүн керек.

Программа азыр бир нече пульстун узактыгын ырааттуулукта жүргүзүүгө мүмкүндүк берет (эксперимент / иштөөнү жакшыртуу каражаты). Эч кандай сындырууга жетишкен жокмун. Ошентип, демейки бир импульс узактыгына коюлган.

Детектордун алгачкы орнотулушу

Детекторду орнотууда, экинчи саптын экинчи мааниси актуалдуу болот (биринчисине көңүл бурбай коюуга болот). Башында балл "туруксуз" болушу мүмкүн (сүрөттү караңыз). Мааниси туруктуу окууга жеткенге чейин кыркуу каршылыгын буруңуз. Андан кийин аны максималдуу туруктуу мааниге көтөрүү үчүн буруңуз. Кайра калибрлөө үчүн баштапкы абалга келтирүү баскычын басыңыз жана детектор колдонууга даяр.

Мен максималдуу туруктуу маанини коюу менен темир эмес металлдарга болгон сезимталдыгымды жоготкондой таасир алдым. Демек, темирден жасалган нерселерге жакшы сезимталдыкты орнотуу үчүн бир аз эксперимент жүргүзүү керек болушу мүмкүн.

Катушкалар

Мен андан ары текшерүү үчүн 3 катушка курам

1 -> 18 бурулуш @ 200мм

2 -> 25 бурулуш @ 100мм

3 -> 48 бурулуш @ 100мм

Кызыктуусу, бардык катушкалар абдан жакшы иштешти, дээрлик ошол эле көрсөткүчтөр менен (20ct монета 40-50мм абада). Бул абдан субъективдүү байкоо болушу мүмкүн.

Сунушталууда: