Elektroniczny pantograf

Elektroniczny pantograf

Pantograf to prosty przyrząd kreślarski, znany ludzkości od XVII wieku. Może się wydawać, że po 400 latach istnienia nie da się go już udoskonalić… nic bardziej mylnego. Zaprezentowany projekt to pantograf sterowany elektronicznie przez moduł Arduino.

Autor tego urządzenia nazwał je elektronicznym pantografem nie bez powodu, działa ono analogicznie, do klasycznego pantografu używanego do kreślenia w skali (nie, nie chodzi o taki pantograf, jak na pociągu czy tramwaju). Pantograf to urządzenie do kopiowania linii na płaskiej powierzchni za pomocą równoległych prętów obracających się względem ustalonych wspólnych osi. Regulując odległości, gdzie pręty te się obracają, zmienia się skale kopiowania linii. Zasada działania pantografu zilustrowana jest schematycznie na rysunku 1.

Rysunek 1. Schematyczny rysunek budowy pantografu, pokazujący jego zasadę działania

Ponieważ pantograf jest elektroniczny, potrzebuje tylko dwóch drążków i zapisuje pozycję elektronicznie. Zarejestrowane pozycje mogą następnie posłużyć do narysowania skopiowanych linii w dowolnej skali w komputerze.

Pomiar pozycji drążków – kąta skrętu pomiędzy nimi – bazuje na sensorze Halla, umieszczonym w pobliżu magnesu. Elementy te obracają się względem siebie, co zmienia rzut pola magnetycznego na sensor. Dokładny opis działania tego sensora zawarto w dalszej części artykułu.

Do konstrukcji zaprezentowanego pantografu potrzebna jest precyzyjnie skalibrowana drukarka 3D, ponieważ dokładność konstrukcji jest zdecydowanie kluczowym elementem jej powodzenia. Systemem steruje moduł Arduino NANO z wyświetlaczem LCD do wyświetlania współrzędnych, ale aby zrobić coś praktycznego z zebranymi danymi wyjściowymi, wymagana jest aplikacja na komputer PC, która da graficzną reprezentację danych. Aby zrealizować projekt, należy mieć podstawowe doświadczenie z platformą Arduino.

Ponadto przyda się elementarna wiedza na temat składni mechanizmów zapisu za pomocą tzw. G-Code (jest to znormalizowany język zapisu poleceń dla urządzeń sterowanych numerycznie).

Potrzebne elementy

Do budowy prezentowanego urządzenia potrzebne będą:

  • dwa sensory Halla typu 49E,
  • cztery magnesy neodymowe 5×5×2 mm, gdzie bieguny północny/południowy ulokowane są na osi wyznaczanej przez długość 2 mm,
  • narzędzie do wykrywania lokalizacji biegunów magnesów (można użyć smartfona z odpowiednią aplikacją),
  • moduł Arduino NANO,
  • wyświetlacz LCD 2×16 pozwalający na podłączenie go przez I²C (z układem PCF8575).
  • przewody do podłączenia modułów itp. Autor zastosował przewody FFC, jakie pozyskał ze starych drukarek. Dodatkowo, serwa należy podłączyć grubszym przewodem, więc autor rekomenduje przewód 32 AWG,
  • złącza i wtyczki,
  • przycisk,
  • dwa pręty o średnicy 8 mm i długości 171 mm, autor zastosował pręty z bambusa,
  • pręt o średnicy 8 mm i długości 30 mm,
  • wkręty samogwintujące M1,7×6 mm,
  • stalowy/mosiężny/aluminiowy pręt do wykonania rysika,
  • arkusz 3 mm sztywnego materiału – sklejka, MDF itp. – o wymiarach 285×380 mm,
  • klej,
  • drukarka 3D do wyprodukowania elementów (pliki .stl znaleźć można na stronie z projektem).

Układ mechaniczny

Montaż urządzenia należy rozpocząć od wydrukowania elementów. Następnie, przed instalacją komponentów elektronicznych, należy zmontować układ mechaniczny pantografu.

Orientacja magnesów

Przy montażu skrętnych osi, w których zamontowane są sensory Halla, ważna jest orientacja magnesów, jakie tam są umieszczone. Co do zasady, biegun północny magnesów powinien wskazywać kierunek pręta przymocowanego do uchwytu. Orientacja magnesu jest taka, jak pokazano na rysunku 2. Autor, do odnalezienia biegunów magnesu, skorzystał z aplikacji na telefonie.

Rysunek 2. Orientacja magnesów w elementach

Przed montażem należy sprawdzić, czy magnesy pasują do przygotowanych otworów. Z uwagi na to, że druk 3D nie należy do najbardziej precyzyjnych metod wytwarzania elementów mechanicznych, tolerancje mogą sprawić, że otwory na magnesy będzie trzeba np. delikatnie przeszlifować, by spasować całość.

Gdy uchwyty magnesów znajdą się na miejscu nad elementem obrotowym, luźne końce uchwytów magnetycznych są zaciskane razem za pomocą małej śrubki. Jeśli po zaciśnięciu elementy nie chcą się swobodnie obracać, należy je kilkakrotnie obrócić na siłę, co powinno spowodować, że tarcie dopasuje je do siebie.

Zasada działania sensorów magnetycznych

Hallotron to sensor magnetyczny – element elektroniczny, który korzysta z efektu Halla i mierzy siłę pola magnetycznego. Jest to element liniowy (wyjście sygnału z tego sensora jest proporcjonalne do natężenia pola magnetycznego) i czuły na pole w konkretnej osi. Oznacza to, że sensor mierzy rzut pola na konkretną oś, która pokazana jest na rysunku 3, gdzie zamieszczono również element zastosowany w konstrukcji tego układu – sensor Halla 49E firmy Honeywell.

Rysunek 3. a) Sensor Halla; b) Rysunek sensora Halla wraz z oznaczeniem osi, w której sensor czuły jest na pole magnetyczne

Jeśli teraz umieścimy dwa magnesy w jednej osi, w tym samym kierunku, jak pokazano na rysunku 4, możemy założyć, że pole magnetyczne pomiędzy nimi będzie biegło po liniach prostych, równolegle do osi magnesów.

Rysunek 4. Układ magnesów (żółte kształty) i sensora Halla (zielony kształt) w omawianym urządzeniu

Jeśli teraz w równolegle przebiegającej części pola magnetycznego umieścimy sensor Halla, tak jak pokazano na rysunku 4, to pole ułoży się dokładnie w osi sensora. Jeśli natomiast obrócimy teraz sensor wokół własnej osi, to efektywne pole magnetyczne, mierzone przez sensor, będzie niższe. Ilościowo, rzut pola na oś sensora opisane może być funkcjami trygonometrycznymi – sinusem bądź cosinusem, zależnie, w jakim miejscu założymy sobie zero stopni. Jeśli dla pozycji maksymalnego mierzonego natężenia pola magnetycznego przyjmiemy kąt 90°, to kąt z mierzonym polem zwiąże funkcja sinus. Jak widać na rysunku 5, zależność mierzonego sygnału od kąta nie jest liniowa.

Rysunek 5. Zasada działania pomiaru kąta poprzez pomiar natężenia rzutu pola magnetycznego i ograniczenie zakresu stosowania, wynikające z liniowej aproksymacji funkcji

Z uwagi na fakt, że obliczanie arcusa sinusa jest kosztowne obliczeniowo – na ogół realizowane za pomocą stabelaryzowanych wartości (które z kolei zajmują pamięć programu mikrokontrolera), autor zdecydował się na liniowe uproszczenie zależności, co oznacza, że użyteczna jest tylko część pełnego zakresu pomiarowego.

Algorytm ten można by ulepszyć, stosując aproksymację Bhaskara I, której matematyczny zapis pokazano na równaniu 1.

 (1)

gdzie x to wartość kąta podana w stopniach.

Jeśli teraz przekształcimy równanie, otrzymamy zapis:

 (2)

A jeśli równanie 2 nadal jest zbyt złożone obliczeniowo (na przykład z uwagi na konieczność wyliczenia pierwiastka kwadratowego), skorzystać możemy z aproksymacji wielomianem, pokazanym na równaniu 3.

 (3)

Jeżeli ograniczymy się tylko do kilku pierwszych wyrazów wielomianu, da nam wyrażenie:

(4)

gdzie kąt podawany jest w radianach.

Daje to całkiem dobrą aproksymację w zakresie od –60° do 60°. W literaturze można znaleźć więcej metod aproksymacji funkcji odwrotnej do sinusa.

Ograniczniki ruchu

Obrotowe złącza wymagają ograniczników ruchu, które nie pozwolą na przyjmowanie przez nie dowolnych pozycji – ograniczają one kąt ich obrotu. Oba ograniczniki ruchu ramion, wydrukowane w 3D, są takie same. Każdy jest utrzymywany na miejscu za pomocą dwóch śrub. Na rysunku 6 pokazano sposób ich montażu.

Rysunek 6. Sposób montażu ograniczników ruchu ramion pantografu

Ograniczniki mają zakręcony kształt na górze. Podczas montażu należy zwrócić uwagę, w jaki sposób narysowane są na rysunkach. Ograniczniki muszą być zamontowane we właściwy sposób.

Ramiona

Autor do wykonania ramion pantografu zastosował bambusowe pręty o średnicy 8 mm. Do tego celu nadają się dowolne pręty o średnicy ok. 6 mm, w które da się wkręcić wkręty mocujące. Autor użył tutaj malutkich wkrętów samogwintujących M1,7×6 mm. Pod wkręty te należy wykonać otwory o średnicy 1,2 mm, szczególnie jeżeli pręt jest wykonany z drewna, jak w tym przypadku. Pręty muszą mieć długość równo 171 mm. Trzeba je precyzyjnie zamocować w elementach z magnetycznymi sensorami obrotu.

Podstawa

Na rysunku 7 pokazano wymiary podstawy pantografu. Całkowity rozmiar może wydawać się dziwny, ale wynika to po prostu z posiadanego przez autora fragmentu płyty pilśniowej. Na rysunku 7 zaznaczono również obszar roboczy pantografu. Otwory na trójkątny wspornik mogą być nieco trudne do zaznaczenia do wiercenia. Najlepiej jest wykonać je po zamontowaniu górnej części pierwszego wspornika ramienia. Wtedy można wywiercić otwory w miejscu, w którym wypadnie ten element.

Rysunek 7. Zwymiarowany rysunek podstawy pantografu

Wszystkie otwory mają średnicę 1,2 mm, co umożliwia montaż wkrętów samogwintujących M1,7×6 mm. Całkowity rozmiar podstawy nie musi oczywiście być taki sam, o ile wszystkie otwory i obszar roboczy są ze sobą powiązane wymiarowo. Krzyż kalibracyjny, pokazany na rysunku 8, potrzebny będzie w dalszej części uruchamiania konstrukcji. Wszystkie wymiary, wraz z lokalizacją tego krzyża, znajdują się w pliku DXF, jaki pobrać można ze strony z projektem.

Rysunek 8. Lokalizacja krzyża kalibracyjnego

Pierwsze ramię i jego wspornik

W pierwszej kolejności montujemy uchwyt pierwszego ramienia (rysunek 9a). Ramię na obrotowej podstawie mocują do podstawy cztery śruby. Następnie instalujemy podstawkę pod ramię (rysunek 9b).

Rysunek 9. Montaż pierwszego ramienia i jego podstawy

Jeśli mamy problem z instalacją podstawki, możemy przymocować najpierw górny uchwyt, który również przytrzyma w miejscu podstawkę i pozwoli wygodnie oznaczyć miejsce, gdzie wykonane zostaną otwory pod wkręty mocujące podstawkę.

Drugie ramię

Drugie ramię musi być mocno osadzone na pręcie pierwszego ramienia, a następnie zamocowane za pomocą dwóch śrub. Po umieszczeniu drugiego ramienia na miejscu, można wywiercić otwory prowadzące na śruby montażowe (rysunek 10).

Rysunek 10. Montaż drugiego ramienia

Podczas montażu ramion najlepiej ustawić je pod kątem 90° między sobą. Autor wykonał dodatkowo mały element do precyzyjnego ustawienia wysokości pręta, co pozwala ustawić drugie ramię na odpowiedniej wysokości na czas montażu.

Rysik

Stylus (rysunek 11a) wykonany jest z metalowego okrągłego pręta. Nie ma znaczenia, jakiego metalu użyje się do jego wykonania. Średnica pręta musi wynosić 3 mm, a całkowita długość 30 mm. Rysik ma wypiłowany płaski fragment na boku, bliżej górnej części.

Wymiary tego wypłaszczenia nie są krytyczne. Jest tam, aby można było ustawić śrubę, która będzie zapobiegała wypadaniu rysika i umożliwi mu poruszanie się lekko w górę i w dół. Rysik porusza się w górę i w dół, umożliwiając wciśnięcie przycisku.

Rysunek 11. Stylus i jego uchwyt

Rysik należy wsunąć do uchwytu płaską stroną skierowaną do przodu. Można wtedy zamontować go na miejscu za pomocą śruby na przedzie uchwytu. Nie należy jej dokręcać zbyt mocno, wystarczy, że śruba znajdzie się na tyle głęboko, aby zapobiec wypadnięciu rysika. W górnej części uchwytu umieszczamy, jak pokazano na rysunku 11b, przycisk, mocowany na miejscu za pomocą przykręconej śrubą nakładki.

Uchwyt rysika musi być mocno osadzony na pręcie drugiego ramienia, a następnie zamocowany za pomocą dwóch śrub. Otwory pod wkręty mocujące ten element do pręta pantografu najlepiej jest wywiercić po pionowym osadzeniu tego elementu.

Układ sterujący

Elektronika

Schemat ideowy kontrolera pantografu, narysowany we Fritzing, jest pokazany na rysunku 12. Do wykonania dłuższych połączeń (zwłaszcza do sensorów Halla i przycisku) autor rekomenduje zastosowanie płaskich taśm FFC. Dzięki temu, że są one tak cienkie, dobrze układają się w systemie i są na tyle giętkie, by nie utrudniać ruchów pantografu. Dodatkowo przewody takie łatwo pozyskać można ze starych drukarek czy skanerów. Oprócz przewodów FFC autor stosuje normalne przewody taśmowe z żyłami 32 AWG do ich przedłużenia.

Rysunek 12. Schemat ideowy kontrolera pantografu

W przypadku kabli FFC nie należy lutować niczego bezpośrednio do końcówek. Najlepiej odciąć je i rozciąć przewody nożyczkami i dopiero wtedy lutować do przewodów po ich odizolowaniu. Jeśli tak nie zrobimy, to niemal od razu po dotknięciu końców przewodów przez lutownicę plastikowa izolacja się spali. FFC nie są tak delikatne, jak mogłoby się wydawać. Do ich lutowania najlepiej jednak używać dużo topnika i ograniczyć czas grzania przewodów do minimum.

Przycisk wyposażony jest w elektroniczny układ de-bounce, bazujący na układzie RC. Zastosowanie sprzętowego filtrowania, zamiast analogicznego rozwiązania w oprogramowaniu, zapewnia szybsze działanie systemu. Autor swoją konstrukcję z filtrem RC umieścił na kompaktowej płytce uniwersalnej, wpinanej pomiędzy przycisk a moduł Arduino (fotografia 1). Przycisk podłączony jest do wejścia A3. Na przyszłość, wejścia A0, A1 oraz A2 także zostały skonfigurowane do obsługi w przerwaniu, dzięki czemu do nich również można dołączyć przyciski.

Fotografia 1. Wiązka łącząca ramię z płytką i modułem Arduino

Sensory Halla, jakie zastosowano w tym projekcie, na swoim wyjściu podają wynik analogowy, w postaci napięcia proporcjonalnego do natężenia pola magnetycznego. Dlatego muszą być one podłączone do wejść wyposażonych w przetwornik analogowo-cyfrowy, który zdigitalizuje wartość napięcia. Autor użył w tym celu wejścia A6 i A7.

Wyświetlacz jest dołączony do modułu poprzez interfejs I²C i moduł ekspandera I²C, który konwertuje szeregowy interfejs na równoległą szynę danych i sterowania, typową dla kontrolera LCD.

Dopasowanie pozycji sensorów

Po przylutowaniu sensory magnetyczne instalowane są w przygotowanych wcześniej miejscach w wydrukowanym w 3D elemencie. Aby sensor poprawnie pracował, musi znaleźć się na właściwej pozycji po zamontowaniu. Otwory w złączach pantografu są ukształtowane tak, aby pokazać orientację czujników. Trzeba jednak osadzić sensor na odpowiedniej głębokości. W tym celu autor wydrukował specjalny przymiar do ustalenia głębokości sensora na czas jego klejenia. Przymiar głębokości ma wycięcie na podstawę czujnika obrotu. Wsuwa się go po samą górę do czujnika. Wtedy można nałożyć klej w miejsce, w którym piny sensora przechodzą przez plastikowe elementy.

Montaż modułu Arduino

Moduł Arduino i LCD zamontowane są na podstawie w niewielkiej, drukowanej w 3D ramce. Autor dopasował ją do Arduino z dopiętym shieldem NANO UNO Breakout Shield, więc mocowanie jest dostosowane do tego typu. Niektóre płytki mogą być nieco różne, ale tak długo, jak mają otwory w rozstawie Arduino UNO, powinny pasować do znajdującej się na stronie z projektem ramki.

Śruby służące do zamontowania ramki do podstawy mają wymiary M1,7×6 mm, jak wszystkie inne śruby używane w projekcie do montażu elementów. Pliki STL ramki, jak i podkładek dla śrub, znajdują się na stronie z projektem.

Firmware

Przystępując do tego projektu, dobrze jest mieć już jakieś doświadczenie z ekosystemem Arduino. Jeśli to nasza pierwsza styczność z Arduino IDE, dobrze jest przejść najpierw kilka samouczków i przyswoić sobie jakieś poradniki, dotyczące podstaw działania tego ekosystemu.

Szkic oprogramowania pantografu znajduje się w pliku Tims_Electronic_Pantograph.ino, jaki można pobrać ze strony z projektem. Po pobraniu szkicu trzeba umieścić go w folderze o tej samej nazwie, ale bez rozszerzenia .ino. Szkic ten należy załadować do mikrokontrolera w systemie, korzystając z Arduino IDE. Szkic (fragmenty) zaprezentowano na listingu 1, pełna wersja szkicu jest do pobrania na stronie z projektem.

Listing 1. Kod oprogramowania w środowisku Arduino (fragmenty)

void  loop() {
 NowTime = millis();
 Read_Sensor_Values();
 //  Funkcja do wyznaczania kąta pierwszego ramienia
 Calc_Angle_Hall_01();
 //  Funkcja do wyznaczania kąta drugiego ramienia
 Calc_Angle_Hall_02();
 //  Funkcja do wyznaczania pierwszej współrzędnej
 Calc_XY_Hall_01();
 //  Funkcja do wyznaczania drugiej współrzędnej
 Calc_XY_Hall_02();                  
 Calculate_Coordinates();
}

void Read_Sensor_Values() {
 Sensor_Value_01 = 0;
 Sensor_Value_02 = 0;
 for (size_t i = 0; i < 10; i++) {
   //  Odczytuje wartość sensora z wejścia analogowego
   Sensor_Value_01 += analogRead(Hall_49R_Pin_01);
   //  Odczytuje wartość sensora z wejścia analogowego
   Sensor_Value_02 += analogRead(Hall_49R_Pin_02);   
 }
 //  Oblicza średnią z 10 pomiarów
 Sensor_Value_01 = Sensor_Value_01 / 10;
 //  Oblicza średnią z 10 pomiarów
 Sensor_Value_02 = Sensor_Value_02 / 10;

#ifdef DEBUG
 //  Send a new line to serial to seperate values.
 Serial.println();                 
 Serial.println(Sensor_Value_01);
 Serial.println(Sensor_Value_02);         
 //  Wait a little for things to happen and be able to read results.
 delay(1000);                    
#endif // DEBUG

}

void Calc_Angle_Hall_01() {
 double O = (double)Sensor_Value_01 – CAL_HALL_0D_01 – CAL_HALL_RAD_01;
 double H = (double)O / CAL_HALL_RAD_01;
 Hall_Angle_01 = 90.0 + (asin(H) * 180.0 / PI);
}

void Calc_Angle_Hall_02() {
 double O = (double)Sensor_Value_02 – CAL_HALL_0D_02 – CAL_HALL_RAD_02;
 double H = (double)O / CAL_HALL_RAD_02;
 Hall_Angle_02 = 90.0 + (asin(H) * 180.0 / PI);
}

void Calc_XY_Hall_01() {
 Hall_X_01 = cos((Hall_Angle_01 + ANGLE_BIOS_01 – 55)
   * (PI / 180)) * ARM_LENGTH;
 Hall_Y_01 = sin((Hall_Angle_01 + ANGLE_BIOS_01 – 55.0)
   * (PI / 180)) * ARM_LENGTH;
}

void Calc_XY_Hall_02() {
 Hall_X_02 = cos((Hall_Angle_02 + ANGLE_BIOS_02
   + Hall_Angle_01 + ANGLE_BIOS_01 – 55)
   * (PI / 180)) * ARM_LENGTH;
 Hall_Y_02 = sin((Hall_Angle_02 + ANGLE_BIOS_02
   + Hall_Angle_01 + ANGLE_BIOS_01 – 55.0)
   * (PI / 180)) * ARM_LENGTH;
}

void Calculate_Coordinates() {
 Sylus_X = 100.0 + Hall_X_01 + Hall_X_02;
 Sylus_Y = 345.0 – Hall_Y_01 – Hall_Y_02;
 lcd.setCursor(3, 0);
 lcd.print("  ");
 lcd.setCursor(Xpos(3, Sylus_X), 0);
 lcd.print(Sylus_X, 3);
 lcd.setCursor(3, 1);
 lcd.print("  ");
 lcd.setCursor(Xpos(3, Sylus_Y), 1);
 lcd.print(Sylus_Y, 3);
}

void Send_Data() {
 byte _switch = 0;
 if (Pen_Down) { bitSet(_switch, 0); }
 if (Sylus_X < 0) { bitSet(_switch, 1); }
 if (Sylus_Y < 0) { bitSet(_switch, 2); }
 unsigned long _sylus_X = abs(Sylus_X * 1000);
 unsigned long _sylus_Y = abs(Sylus_Y * 1000);
 byte _buff[7];
 _buff[0] = _switch;         //  0 0 0 0 0 -X -Y PenDown
 _buff[1] = (byte)(_sylus_X >> 0); //  X LSB
 _buff[2] = (byte)(_sylus_X >> 8); //  
 _buff[3] = (byte)(_sylus_X >> 16);  //  X MSB
 _buff[4] = (byte)(_sylus_Y >> 0); //  Y LSB
 _buff[5] = (byte)(_sylus_Y >> 8); //  
 _buff[6] = (byte)(_sylus_Y >> 16);  //  Y MSM
}

Kalibracja

Po przygotowaniu oprogramowania można przystąpić do kalibracji pantografu. Wymaga ona kilku kroków. Pierwszym krokiem jest załadowanie do mikrokontrolera kodu w trybie DEBUG. W tym celu trzeba odkomentować wiersz z dyrektywą:

#define DEBUG

Również w tym momencie musimy upewnić się, że parametr Bios dla obu kątów jest ustawiony na 0:

#define ANGLE_BIOS_01 0
#define ANGLE_BIOS_02 0

Po upewnieniu się, że kod jest poprawny, można przesłać go do układu. Następnie należy uruchomić monitor portu szeregowego w Arduino IDE. Wartości z czujników będą przesyłane do komputera przez ten port. Na LCD powinien również być widoczny napis DEBUG w prawym górnym rogu wyświetlacza. Wykonując odczyty, należy przesunąć ramiona do końca zakresu ich ruchu. Jeśli wartości czujników narastają/opadają niewłaściwie oznacza to, że orientacja danego magnesu jest niewłaściwa. Następnie wykonujemy następujące ruchy ramionami i notujemy je w szkicu Arduino w wymienionych linijkach kodu:

Mniejsza z wartości mierzonych przez czujnik Halla 1 pod kątem 45°. Należy dosunąć ramię do prawego ogranicznika ruchu. Zmierzoną wartość wpisujemy w (zamieniając wartość 232):

#define CAL_HALL_45D_01 232

Większa z wartości czujnika Halla 1, gdy jest on umieszczony pod kątem 135°. Należy dosunąć pierwsze ramię do dołu w lewo aż do ogranicznika ruchu. Wartość z pomiaru wpisywana jest w (zamieniając wartość 835):

#define CAL_HALL_135D_01 835

Mniejsza z wartości mierzonych przez czujnik Halla 2 pod kątem 45°. Należy dosunąć ramię do prawego ogranicznika ruchu, poruszając się od pierwszego ramienia. Zmierzoną wartość wpisujemy w (zamieniając wartość 258):

#define CAL_HALL_45D_02 258

Większa z wartości czujnika Halla 2, gdy jest on umieszczony pod kątem 135°. Należy dosunąć pierwsze ramię w dół w lewo aż do ogranicznika ruchu, poruszając się do pierwszego ramienia. Wartość z pomiaru wpisywana jest w (zamieniając wartość 825):

#define CAL_HALL_135D_02 825

Po zmianie wartości w kodzie należy go skompilować i wgrać do Arduino przed kolejnym krokiem kalibracji. W drugim kroku wykorzystujemy już wyliczone przez mikrokontroler wartości, mierząc wartości dla obu sensorów dla pozycji 0° oraz 180° i wpisując je w następujących stałych w kodzie szkicu Arduino:

#define CAL_HALL_0D_01 107
// Wartość dla 0° dla sensora 1
#define CAL_HALL_180D_01 690
// Wartość dla 180° dla sensora 1
#define CAL_HALL_0D_02 140
// Wartość dla 0° dla sensora 2
#define CAL_HALL_180D_02 942
// Wartość dla 180° dla sensora 2

Po zmianie tych wartości w kodzie należy go ponownie skalibrować i wgrać do Arduino. Możemy teraz przystąpić do ostatniego, trzeciego kroku kalibracji. W tym celu ustawiamy rysik pantografu na krzyżu kalibracyjnym (rysunek 8). Powinno to ustawić oba ramiona w pozycji 90°. Obliczone wartości kąta raportowane są przez port szeregowy. W monitorze szeregowym obie wartości kąta: Hall_Angle_01 i Hall_Angle_02 powinny mieć wartości 90°. Jeśli tak nie jest, to parametry ANGLE_BIOS_01 i ANGLE_BIOS_02 muszą zostać zmienione na wartość, które po dodaniu do tego, co jest wyświetlane w monitorze szeregowym, daje wartość 90°. Jeśli jest to wartość ujemna, to w kodzie umieszczana jest wartość ujemna. Na przykład, jeżeli monitor szeregowy pokazuje wartość 90,245 dla pierwszego kąta, to wpisujemy 90–90,245=–0,245:

#define ANGLE_BIOS_01 -0.245

Analogiczną korekcję wprowadzamy dla drugiego kąta. Kończy to etap kalibracji. Teraz wystarczy tylko przestawić Arduino NANO w tryb użytkowania. Oznacza to, że zakomentować trzeba flagę DEBUG:

// #define DEBUG

Finalnie, można wgrać kod do mikrokontrolera w Arduino. W prawym górnym rogu wyświetlacza LCD nie powinno już być słowa BEBUG. Monitor szeregowy będzie otrzymywać coś, co wygląda na pierwszy rzut oka, jak śmieci.

Oprogramowanie komputera PC

Protokół komunikacyjny, stosowany przez układ, opisany jest dokładnie na stronie z projektem. Z uwagi na już i tak dużą objętość tego artykułu opis ten zostanie pominięty.

Rysunek 13. Interfejs graficzny programu do obsługi elektronicznego pantografu

Aplikacja (rysunek 13), która pozwala na stworzenie wizualnej reprezentacji danych zebranych przez pantograf jest do pobrania na stronie z projektem. Po ściągnięciu paczki .zip należy ją rozpakować do wybranego miejsca i uruchomić plik setup.exe z rozpakowanej lokalizacji.

Podsumowanie

Wygląd gotowej konstrukcji pokazuje rysunek 14, natomiast działanie programu pokazane jest na fotografii tytułowej, ale lepiej widoczne jest to na filmie, jaki można obejrzeć na stronie z projektem.

Rysunek 14. Wizualizacja gotowej konstrukcji

Wystarczy uruchomić program i podłączyć pantograf do komputera przez interfejs USB. W oprogramowaniu wybieramy port USB, do którego jest podłączony pantograf i ustawiamy szybkość transmisji na 115200 i można rysować.

Obrazek lub cokolwiek, co chcemy skopiować, umieszczamy w obszarze roboczym i mocujemy go, aby się nie ruszał. Naciskamy rysik, aby program rozpoczął śledzenie ruchu i zapisywanie jego pozycji. Oprogramowanie najlepiej jest ustawić w trybie automatycznym. Wystarczy skonfigurować skalę (3:1 domyślnie) oraz częstotliwość rysowania linii. Program, oprócz obrazu, generuje również w oknie Data kod G, który może być używany np. z ploterem, dzięki czemu można odtworzyć to, co jest na ekranie.

Nikodem Czechowski, EP

Źródła:

Artykuł ukazał się w
Elektronika Praktyczna
wrzesień 2022

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów