Spisu treści:

Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka: 5 kroków (ze zdjęciami)
Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka: 5 kroków (ze zdjęciami)

Wideo: Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka: 5 kroków (ze zdjęciami)

Wideo: Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka: 5 kroków (ze zdjęciami)
Wideo: Arduino. Detektor pól elektromagnetycznych 2024, Lipiec
Anonim
Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka
Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka
Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka
Detektor indukcyjny impulsowy oparty na Arduino - odwracana cewka

Pomysł

Po zbudowaniu kilku wykrywaczy metali w przeszłości z różnymi wynikami chciałem zbadać możliwości Arduino w tym kierunku.

Istnieje kilka dobrych przykładów budowania wykrywaczy metali za pomocą Arduino, niektóre tutaj jako instrukcje. Ale patrząc na nie, zwykle wymagają one albo całkiem sporo zewnętrznych komponentów do obróbki sygnału analogowego, albo ich czułość jest dość niska.

Myśląc o wykrywaczach metali, głównym tematem jest wykrywanie niewielkich zmian napięcia w sygnałach związanych z cewką poszukiwawczą. Zmiany te są zwykle bardzo małe. Najbardziej oczywistym podejściem byłoby użycie wejść analogowych ATmega328. Ale patrząc na specyfikacje, są dwa podstawowe problemy: są (często) zbyt wolne, a rozdzielczość (w większości przypadków) zbyt niska.

Z drugiej strony Arduino działa z częstotliwością 16 MHz i ma całkiem spore możliwości taktowania. mi. rozdzielczość 0,0625 µs w przypadku korzystania z częstotliwości zegara. Tak więc zamiast używać wejścia analogowego do wykrywania, najprostszym sposobem wykrywania małych dynamicznych zmian napięcia jest porównanie zmian spadku napięcia w czasie przy stałym napięciu odniesienia.

W tym celu ATmega328 ma zgrabną cechę wewnętrznego komparatora pomiędzy D6 i D7. Ten komparator jest w stanie wyzwolić przerwanie, umożliwiając precyzyjną obsługę zdarzeń. Pozostawiając obok starannie zakodowanych procedur czasowych, takich jak millis() i micos(), i przechodząc do wewnętrznego zegara ATmega328 o znacznie wyższej rozdzielczości, Arduino jest doskonałą podstawą do wykrywania metali.

Tak więc z punktu widzenia kodu źródłowego, dobrym początkiem byłoby zaprogramowanie wewnętrznego komparatora do „zmiany” polaryzacji wejść i użycie wewnętrznego licznika o najwyższej możliwej prędkości do zmiany taktowania zmian.

Ogólny kod w Arduido, aby to osiągnąć, to:

// Definiowanie wszystkich wymaganych zmiennych wstępnych itp. i konfigurowanie rejestrów

unsigned char clockSelectBits = _BV(CS10); // brak preskalowania, pełne xtal void setup() { pinMode(6, INPUT); // + komparatora - ustawiając je jako INPUT, są // ustawiane na wysoką impedancję pinMode(7, INPUT); // - komparatora - ustawiając je jako INPUT, są // ustawiane na wysoką impedancję cli(); // zatrzymaj przerwania TCCR1A = 0; // ustaw cały rejestr TCCR1A na 0 TCCR1B = 0; // to samo dla TCCR1B -> tryb normalnyTCNT1 = 0; //zainicjuj wartość licznika na 0; TCCR1B |= zegarSelectBits; // ustawia preskaler i uruchamia zegar TIMSK1 = _BV(TOIE1); // ustawia przerwanie przepełnienia timera enable bit sei(); //zezwalaj na przerwania ACSR = (0 << ACD) | // Komparator analogowy: włączony (0 << ACBG) | // Wybór pasma wzbronionego analogowego komparatora: AIN0 jest stosowane do dodatniego wejścia (0 << ACO) | // Wyjście komparatora analogowego: wyłączone (1 << ACI) | // Flaga przerwania komparatora analogowego: Wyczyść oczekujące na przerwanie (1 << ACIE) | // Przerwanie komparatora analogowego: włączone (0 << ACIC) | // Przechwytywanie wejścia analogowego komparatora: Wyłączone (0 << ACIS1 | 0 << ACIS0 // przerwanie przy przełączaniu wyjścia // (0 << ACIS1 | 1 << ACIS0 // zarezerwowane // (1 << ACIS1 | 0 << ACIS0 // przerwanie przy opadającym zboczu wyjściowym // (1 << ACIS1 | 1 << ACIS0 // przerwanie przy narastającym zboczu wejściowym; }

// ta procedura jest wywoływana za każdym razem, gdy komparator tworzy przerwanie

ISR(ANALOG_COMP_vect) { starySREG=SREG; cli(); znacznik czasu=TCNT1; SREG = starySREG; }

// ta procedura jest wywoływana za każdym razem, gdy w wewnętrznym liczniku występuje przepełnienie

ISR(TIMER1_OVF_vect){ timer1_overflow_count++; }

// ta procedura służy do resetowania licznika do 0

void resetTimer(void){ starySREG = SREG; cli(); // Wyłącz przerwania TCNT1 = 0; //zainicjuj wartość licznika na 0 SREG = oldSREG; // Przywróć rejestr statusu TCCR1B |= clockSelectBits; // ustawia preskaler i uruchamia zegar timer1_overflow_count=0; // resetuje licznik przepełnienia }

Oczywiście ten pomysł nie jest zupełnie nowy. Główną część tego kodu można znaleźć gdzie indziej. Dobra implementacja takiego podejścia dla mikrokontrolera znalezionego na stronie głównej TPIMD - Tiny Pulse Induction Metal Detector.

www.miymd.com/index.php/projects/tpimd/ (niestety ta strona nie jest już online, obecnie znajduje się kopia zapasowa witryny pod adresem www.basic4mcu.com, wyszukaj "TPIMD").

Krok 1: Pomysł na indukcję impulsową Arduino - Flip Coil

Pomysł na indukcję impulsową Arduino - odwracana cewka
Pomysł na indukcję impulsową Arduino - odwracana cewka
Pomysł na indukcję impulsową Arduino - odwracana cewka
Pomysł na indukcję impulsową Arduino - odwracana cewka

Pomysł polega na użyciu Arduino jako detektora indukcji impulsowej, podobnie jak w TPIMD, ponieważ idea synchronizacji krzywej zaniku wydaje się działać całkiem dobrze. Problem z detektorami Pulse Induction polega na tym, że zwykle potrzebują innego napięcia, aby działać. Jedno napięcie do zasilania cewki i osobne napięcie do radzenia sobie z krzywą zaniku. Te dwa źródła napięcia powodują, że impulsowe detektory indukcyjne są zawsze nieco skomplikowane.

Patrząc na napięcie cewki w detektorze PI, uzyskaną krzywą można podzielić na dwa różne etapy. Pierwszym etapem jest sam impuls zasilający cewkę i wytwarzający pole magnetyczne (1). Drugi etap to krzywa zaniku napięcia, zaczynająca się od szczytu napięcia, a następnie szybko dostosowująca się do napięcia „braku zasilania” cewki (2). Problem w tym, że cewka zmienia polaryzację po impulsie. Jeśli impuls jest dodatni (Var 1. na załączonym rysunku), krzywa zaniku jest ujemna. Jeśli impuls jest ujemny, krzywa zaniku będzie dodatnia (Var 2. na załączonym obrazku)

Aby rozwiązać ten podstawowy problem, cewka musi zostać elektronicznie „odwrócona” po impulsie. W tym przypadku impuls może być dodatni, a krzywa zaniku również może być dodatnia.

Aby to osiągnąć, cewka musi być odizolowana od Vcc i GND po impulsie. W tej chwili przez rezystor tłumiący płynie tylko prąd. Ten izolowany system cewki i rezystora tłumiącego może być „zorientowany” na dowolne napięcie odniesienia. To teoretycznie utworzy połączoną krzywą dodatnią (dół rysunku)

Ta dodatnia krzywa może być następnie wykorzystana przez komparator do wykrycia momentu, w którym napięcie zaniku „przecina” napięcie odniesienia. W przypadku skarbów w pobliżu cewki zmienia się krzywa zaniku i zmienia się moment przekroczenia napięcia odniesienia. Ta zmiana może zostać wykryta.

Po kilku eksperymentach następujący obwód okazał się działać.

Układ składa się z modułu Arduino Nano. Moduł ten steruje dwoma tranzystorami MOSFET zasilającymi cewkę (na SV3) przez D10. Gdy kończy się impuls na D10, oba tranzystory MOSFET izolują cewkę od 12V i GND. Zaoszczędzona energia w cewce wypływa przez R2 (220 omów). Jednocześnie R1 (560 Ohm) łączy poprzednią dodatnią stronę cewki z GND. Zmienia to ujemną krzywą zaniku przy R5 (330 omów) na krzywą dodatnią. Diody chronią pin wejściowy Arduino.

R7 to dzielnik napięcia przy około 0,04V. W chwili, gdy krzywa zaniku na D7 staje się bardziej ujemna niż 0,04 na D6, wyzwalane jest przerwanie, a czas trwania po zakończeniu impulsu jest zapisywany.

W przypadku metalu w pobliżu cewki krzywa zaniku trwa dłużej, a czas pomiędzy końcem impulsu a przerwaniem wydłuża się.

Krok 2: Budowa detektora (płytka do krojenia chleba)

Budowa detektora (płytka do krojenia chleba)
Budowa detektora (płytka do krojenia chleba)
Budowa detektora (płytka do krojenia chleba)
Budowa detektora (płytka do krojenia chleba)
Budowa detektora (płytka do krojenia chleba)
Budowa detektora (płytka do krojenia chleba)

Budowa detektora jest dość prosta. Można to zrobić na płytce stykowej (przyklejając się do oryginalnego obwodu) lub lutując części na płytce drukowanej.

Dioda D13 na płytce Arduino Nano służy jako wskaźnik metalu

Rozłączenie płytki stykowej to najszybsza droga do działającego detektora. Potrzebne jest sporo okablowania, ale można to zrobić za pomocą małej płytki stykowej. Na zdjęciach pokazano to w 3 krokach, ponieważ Arduino i MOSFET ukrywają niektóre przewody. Podczas testów jakoś odłączyłem diody nie zauważając na początku. Nie miało to negatywnego wpływu na zachowanie detektora. W wersji PCB układu całkowicie je pominąłem.

Na zdjęciach nie pokazano połączeń z wyświetlaczem OLED 0,96. Ten wyświetlacz jest podłączony:

Vcc – 5V (na pinie Arduino, a nie napięcie zasilania!!!)

GND – GND

SCL – A5

SDA – A4

Ten wyświetlacz OLED jest potrzebny do wstępnej kalibracji detektora. Odbywa się to poprzez ustawienie odpowiedniego napięcia na PIN6 Arduino. To napięcie powinno wynosić około 0,04V. Wyświetlacz pomaga w ustawieniu odpowiedniego napięcia.

Wersja z płytką prototypową działa całkiem nieźle, choć prawdopodobnie nie nadaje się do wychodzenia na wolność.

Krok 3: Przejście na PCB

Przejście na PCB
Przejście na PCB
Przejście na PCB
Przejście na PCB
Przejście na PCB
Przejście na PCB
Przejście na PCB
Przejście na PCB

Jeśli chodzi o lutowanie, to nie przepadam za zaawansowaną technologicznie obustronną płytką drukowaną, więc zmodyfikowałem obwód, aby pasował do jednostronnej płytki drukowanej.

Wprowadzono następujące modyfikacje:

1. diody zostały pominięte.

2. Bramki MOSFET-ów otrzymały rezystor 10 Ohm

3. napięcie zasilania dzielnika napięcia na D6 jest podawane przez sygnał o wysokim poziomie na D8

4. Zmieniono pin sterownika dla tranzystorów MOSFET.

W ten sposób można było stworzyć jednostronną płytkę drukowaną, którą można lutować na płytkach uniwersalnych. Używając tego obwodu będziesz miał działający detektor PI z tylko 8-10 komponentami zewnętrznymi (w zależności od tego, czy używany jest wyświetlacz OLED i/lub głośnik).

Krok 4: Konfiguracja i korzystanie z wykrywacza

Konfigurowanie i używanie wykrywacza
Konfigurowanie i używanie wykrywacza
Konfigurowanie i używanie wykrywacza
Konfigurowanie i używanie wykrywacza
Konfigurowanie i używanie wykrywacza
Konfigurowanie i używanie wykrywacza

Jeśli czujka jest poprawnie zbudowana, a program napisany na Arduino, najłatwiejszym (jeśli nie jedynym) sposobem ustawienia urządzenia jest użycie wyświetlacza OLED. Wyświetlacz jest podłączony do 5V, GND, A4, A5. Wyświetlacz powinien pokazywać „kalibracja” po włączeniu urządzenia. Po kilku sekundach powinien pojawić się komunikat „kalibracja zakończona”, a na wyświetlaczu powinny pojawić się trzy cyfry.

Pierwsza liczba to „wartość odniesienia” zidentyfikowana podczas kalibracji. Druga wartość to ostatnia zmierzona wartość, a trzecia wartość to średnia z ostatnich 32 pomiarów.

Te trzy wartości powinny być mniej więcej takie same (w moich testach poniżej 1000). Średnia wartość powinna być mniej więcej stabilna.

Aby rozpocząć wstępną konfigurację, w pobliżu cewki nie powinno znajdować się metal.

Teraz dzielnik napięcia (potencjometr dostrojenia) powinien zostać dostrojony tak, aby dwie dolne wartości były ustawione na maksimum, jednocześnie dając stabilny odczyt. Istnieje krytyczne ustawienie, w którym średnia wartość zaczyna dawać dziwne odczyty. Odwróć trymer, aby ponownie uzyskać stabilne wartości.

Może się zdarzyć, że wyświetlacz się zawiesi. Wystarczy nacisnąć przycisk resetowania i zacząć od nowa.

Dla mojego zestawu (zwój: 18 zwojów @ 20cm) stabilna wartość to około 630-650. Po ustawieniu naciśnij przycisk resetowania, urządzenie ponownie się skalibruje i wszystkie wartości drzewa powinny być ponownie w tym samym zakresie. Jeśli metal zostanie teraz doprowadzony do cewki, dioda LED na płytce Arduino (D13) powinna się zaświecić. Dołączony głośnik wydaje odgłosy klikania (jest tam miejsce na poprawę programowania).

Aby zapobiec wysokim oczekiwaniom:

Detektor wykrywa pewne rzeczy, ale pozostaje bardzo prostym i ograniczonym wykrywaczem.

Aby dać wyobrażenie o możliwościach, wykonaliśmy kilka detekcji odniesienia z różnymi innymi detektorami. Patrząc na wyniki, nadal jest to imponujące jak na detektor z zaledwie 8 częściami zewnętrznymi, ale nie pasujący do profesjonalnych detektorów.

Patrząc na tor i program, jest wiele do zrobienia. Wartości rezystorów zostały ustalone z doświadczenia, czas impulsu 250ms został dobrany losowo, parametry cewki również. Jeśli masz pomysły na ulepszenia, chętnie je omówię.

Baw się dobrze!

Krok 5: Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2

Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2
Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2
Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2
Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2
Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2
Aktualizacja1: Korzystanie z wyświetlacza LCD 16x2

Ulepszenia

Podczas dalszych testów zdałem sobie sprawę, że biblioteka dla wyświetlacza I2C OLED zużywa sporo czasu. Zdecydowałem się więc na użycie wyświetlacza 16x2 z konwerterem I2C.

Zaadoptowałem więc program do wyświetlacza LCD dodając kilka przydatnych funkcji. Pierwsza linia wyświetlacza pokazuje teraz siłę sygnału możliwego wskazania. Druga linia pokazuje teraz dwie wartości. Pięść wskazywała odchylenie sygnału prądu w stosunku do wartości kalibracyjnej. Ta wartość powinna wynosić „0”. Jeśli ta wartość jest stale ujemna lub dodatnia, należy ponownie skalibrować czujkę, naciskając przycisk resetowania. Wartości dodatnie wskazują metal w pobliżu cewki.

Druga wartość pokazuje rzeczywistą wartość opóźnienia krzywej zaniku. Ta wartość zwykle nie jest tak interesująca, ale jest potrzebna do początkowej konfiguracji detektora.

Program pozwala teraz na wielokrotne czasy trwania impulsów w sekwencji (sposoby eksperymentowania/poprawy wydajności). Nie osiągnąłem żadnego przełomu. Tak więc domyślnie ustawiony jest czas trwania jednego impulsu.

Wstępna konfiguracja detektora

Podczas konfigurowania czujki istotna jest druga wartość drugiej linii (pierwszą można zignorować). Początkowo wartość może być „niestabilna” (patrz rysunek). Obracaj rezystor dostrajający, aż wartość osiągnie stabilny odczyt. Następnie obróć go, aby zwiększyć wartość do maksymalnej stabilnej wartości. Naciśnij przycisk resetowania, aby ponownie skalibrować i detektor jest gotowy do użycia.

Odniosłem wrażenie, że ustawiając maksymalną stabilną wartość straciłem czułość na metale nieżelazne. Warto więc poeksperymentować z ustawieniami, aby uzyskać dobrą czułość na rzeczy nieżelazne.

Cewki

Buduję 3 cewki do dalszych testów

1 -> 18 zwojów @ 200mm

2 -> 25 zwojów @ 100mm

3 -> 48 zwojów @ 100mm

Co ciekawe, wszystkie cewki działały całkiem dobrze, z prawie taką samą wydajnością (moneta 20-karatowa przy 40-50 mm w powietrzu). To może być dość subiektywna obserwacja.

Zalecana: