W tym samouczku opracujemy obwód wykorzystujący czujnik siły, Arduino Uno i silnik serwo. Będzie to układ sterowania serwomechanizmem, w którym położenie wału serwomechanizmu jest określane przez ciężar obecny na czujniku siły. Zanim przejdziemy dalej, porozmawiajmy o serwo i innych komponentach.
Serwomotory są używane, gdy istnieje potrzeba dokładnego ruchu lub położenia wału. Nie są one proponowane do zastosowań o dużej szybkości. Są one proponowane do zastosowań z małą prędkością, średnim momentem obrotowym i dokładnym położeniem. Silniki te są używane w robotycznych maszynach, układach sterowania lotem i systemach sterowania. Serwomotory są również używane w niektórych drukarkach i faksach.
Serwomotory są dostępne w różnych kształtach i rozmiarach. Serwomotor będzie miał głównie przewody, jeden jest przeznaczony do napięcia dodatniego, drugi do masy, a ostatni do ustawiania położenia. Przewód CZERWONY jest podłączony do zasilania, przewód czarny jest podłączony do masy, a przewód ŻÓŁTY jest podłączony do sygnału.
Silnik serwo to połączenie silnika prądu stałego, systemu kontroli położenia, przekładni. Położenie wału silnika prądu stałego jest regulowane przez elektronikę sterującą serwomechanizmu na podstawie współczynnika wypełnienia sygnału PWM pinu SIGNAL. Mówiąc najprościej, elektronika sterująca reguluje położenie wału, sterując silnikiem prądu stałego. Dane dotyczące położenia wału przesyłane są poprzez pin SIGNAL. Dane o położeniu do sterowania należy przesłać w postaci sygnału PWM poprzez pin Signal serwomotoru.
Częstotliwość sygnału PWM (modulowana szerokością impulsu) może się różnić w zależności od typu serwomotoru. Ważną rzeczą jest tutaj DUTY RATIO sygnału PWM. Na podstawie tego CŁA elektronika sterująca reguluje wał.
Jak pokazano na poniższym rysunku, aby przesunąć wałek do zegara 9o, WSPÓŁCZYNNIK WŁĄCZENIA musi wynosić 1/18. 1 mililion sekunda „czasu włączenia” i 17 mililionów sekund „czasu wyłączenia” w sygnale 18 ms.
Aby przesunąć wał na zegar 12o, czas załączenia sygnału musi wynosić 1,5 ms, a czas wyłączenia 16,5 ms.
Współczynnik ten jest dekodowany przez układ sterowania w serwomechanizmach i na jego podstawie dostosowuje położenie.
Ten PWM tutaj jest generowany przy użyciu ARDUINO UNO.
Na razie więc wiemy, że możemy sterować wałem SERWO SILNIKA poprzez zmianę współczynnika wypełnienia sygnału PWM generowanego przez UNO.
Porozmawiajmy teraz o czujniku siły lub czujniku wagi.
Aby połączyć czujnik FORCE z ARDUINO UNO, użyjemy funkcji 8-bitowego ADC (konwersja analogowo-cyfrowa) w arduno uno.
Czujnik FORCE to przetwornik, który zmienia swoją rezystancję pod wpływem nacisku na powierzchnię. Czujnik FORCE jest dostępny w różnych rozmiarach i kształtach.
Będziemy używać jednej z tańszych wersji, ponieważ nie potrzebujemy tutaj dużej dokładności. FSR400 to jeden z najtańszych czujników siły na rynku. Zdjęcie FSR400 pokazano na poniższym rysunku.
Teraz ważne jest, aby pamiętać, że FSR 400 jest czuły na całej długości, siła lub ciężar powinny być skoncentrowane na labiryncie pośrodku oka czujnika, jak pokazano na rysunku.
Jeśli siła zostanie przyłożona w niewłaściwym momencie, urządzenie może spowodować trwałe uszkodzenie.
Warto wiedzieć, że czujnik może sterować prądami o dużym zakresie. Podczas instalacji należy więc pamiętać o prądach napędowych. Również czujnik ma ograniczenie siły, które wynosi 10 Newtonów. Możemy więc przyłożyć tylko 1 kg wagi. Jeśli zastosowane masy przekraczają 1 kg, czujnik może wykazywać pewne odchylenia. Jeśli wzrośnie o więcej niż 3 kg. czujnik może trwale uszkodzić.
Jak powiedziano wcześniej, czujnik ten służy do wykrywania zmian ciśnienia. Tak więc, gdy obciążnik jest nakładany na czujnik FORCE, rezystancja zmienia się drastycznie. Wytrzymałość FS400 na ciężar pokazano na poniższym wykresie:
Jak pokazano na powyższym rysunku, rezystancja między dwoma stykami czujnika zmniejsza się wraz z ciężarem lub przewodnictwo między dwoma stykami czujnika wzrasta.
Opór czystego przewodnika jest określony przez:
Gdzie, p- Oporność przewodnika
l = długość przewodu
A = obszar przewodnika.
Rozważmy teraz przewodnik o rezystancji „R”, jeśli na przewód zostanie przyłożony jakiś nacisk, obszar na przewodniku zmniejszy się, a długość przewodu wzrośnie w wyniku ciśnienia. Zatem zgodnie ze wzorem rezystancja przewodnika powinna wzrosnąć, ponieważ rezystancja R jest odwrotnie proporcjonalna do powierzchni, a także bezpośrednio proporcjonalna do długości l.
Tak więc w przypadku przewodu znajdującego się pod ciśnieniem lub ciężarem rezystancja przewodu wzrasta. Ale ta zmiana jest niewielka w porównaniu z ogólnym oporem. Dla znacznej zmiany wiele przewodów jest ułożonych razem.
Tak dzieje się wewnątrz czujników siły pokazanych na powyższym rysunku. Przy bliższym przyjrzeniu się można dostrzec wiele linii wewnątrz czujnika. Każda z tych linii reprezentuje przewodnik. Czułość czujnika jest podana w liczbach przewodów.
Ale w tym przypadku opór będzie maleć wraz z ciśnieniem, ponieważ użyty tu materiał nie jest czystym przewodnikiem. FSR to wytrzymałe urządzenia z grubej folii polimerowej (PTF). Nie są to więc urządzenia z czystego materiału przewodzącego. Są one wykonane z materiału, który wykazuje spadek rezystancji wraz ze wzrostem siły działającej na powierzchnię czujnika.
Ten materiał wykazuje cechy, jak pokazano na wykresie FSR.
Ta zmiana oporu nie przyniesie nic dobrego, jeśli nie będziemy w stanie ich odczytać. Kontroler pod ręką może tylko odczytać szanse w napięciu i nic mniej, w tym celu użyjemy obwodu dzielnika napięcia, dzięki czemu możemy wyprowadzić zmianę rezystancji jako zmianę napięcia.
Dzielnik napięcia jest obwodem rezystancyjnym i jest pokazany na rysunku. W tej sieci rezystancyjnej mamy jedną stałą rezystancję i drugą zmienną rezystancję. Jak pokazano na rysunku, R1 to tutaj stała rezystancja, a R2 to czujnik FORCE, który działa jako opór.
Do pomiaru brany jest środek odgałęzienia. Wraz ze zmianą R2 mamy zmianę w Vout. Więc przy tym mamy napięcie, które zmienia się wraz z ciężarem.
Ważną rzeczą do zapamiętania jest to, że sygnał wejściowy pobierany przez kontroler do konwersji ADC wynosi zaledwie 50 µA. Ten efekt obciążenia dzielnika napięcia opartego na rezystancji jest ważny, ponieważ prąd pobierany z Vout dzielnika napięcia zwiększa procentowy wzrost błędu, na razie nie musimy się martwić o efekt obciążenia.
Teraz, gdy siła jest przyłożona do CZUJNIKA SIŁY, napięcie na końcu dzielnika zmienia ten pin na podłączony do kanału ADC UNO, otrzymamy inną wartość cyfrową od ADC z UNO, gdy zmieni się siła na czujniku.
Ta wartość cyfrowa ADC jest dopasowana do współczynnika wypełnienia sygnału PWM, więc mamy kontrolę położenia SERVO w odniesieniu do siły przyłożonej do czujnika.
składniki
Sprzęt: UNO, zasilacz (5v), kondensator 1000uF, kondensator 100nF (3 sztuki), rezystor 100KΩ, SILNIK SERWO (SG 90), rezystor 220Ω, czujnik siły FSR400.
Oprogramowanie: Atmel studio 6.2 lub aurdino nightly.
Schemat obwodu i objaśnienie robocze
Schemat obwodu serwo sterowanie silnika za pomocą czujnika siły, jest pokazany na rysunku.
Napięcie na czujniku nie jest całkowicie liniowe; będzie głośno. Aby odfiltrować szum, kondensatory są umieszczone na każdym rezystorze w obwodzie dzielnika, jak pokazano na rysunku.
Tutaj weźmiemy napięcie dostarczane przez dzielnik (napięcie, które reprezentuje wagę liniowo) i wprowadzimy je do jednego z kanałów ADC Arduino Uno. Po konwersji weźmiemy tę wartość cyfrową (reprezentującą wagę) i odniesiemy ją do wartości PWM i dostarczymy ten sygnał PWM do silnika SERVO.
Więc z wagą mamy wartość PWM, która zmienia swój współczynnik wypełnienia w zależności od wartości cyfrowej. Im wyższa wartość cyfrowa, tym wyższy współczynnik wypełnienia PWM. Zatem w przypadku sygnału PWM o wyższym współczynniku wypełnienia, wałek serwomechanizmu powinien sięgać maksymalnie w prawo lub w lewo, zgodnie z rysunkiem przedstawionym we wprowadzeniu.
Jeśli waga jest niższa, będziemy mieli niższy współczynnik wypełnienia PWM i zgodnie z rysunkiem na wstępie serwo powinno sięgać daleko w prawo.
Dzięki temu mamy kontrolę pozycji SERVO przez WEIGHT lub FORCE.
Aby tak się stało, musimy wprowadzić kilka instrukcji w programie i omówimy je szczegółowo poniżej.
ARDUINO ma sześć kanałów ADC, jak pokazano na rysunku. W nich jeden lub wszystkie z nich mogą być użyte jako wejścia dla napięcia analogowego. UNO ADC ma rozdzielczość 10 bitów (czyli wartości całkowite z (0- (2 ^ 10) 1023)). Oznacza to, że będzie mapował napięcia wejściowe od 0 do 5 woltów na wartości całkowite z przedziału od 0 do 1023. Tak więc dla każdego (5/1024 = 4,9 mV) na jednostkę.
Tutaj użyjemy A0 z UNO. Musimy wiedzieć kilka rzeczy.
|
Przede wszystkim kanały ADC Arduino Uno mają domyślną wartość odniesienia 5V. Oznacza to, że możemy podać maksymalne napięcie wejściowe 5 V do konwersji ADC na dowolnym kanale wejściowym. Ponieważ niektóre czujniki dostarczają napięcia od 0-2,5 V, przy wartości odniesienia 5 V uzyskujemy mniejszą dokładność, więc mamy instrukcję, która umożliwia nam zmianę tej wartości odniesienia. Tak więc do zmiany wartości odniesienia mamy („analogReference ();”) Na razie zostawiamy ją jako.
Domyślnie otrzymujemy maksymalną rozdzielczość ADC płyty, która wynosi 10 bitów, rozdzielczość tę można zmienić za pomocą instrukcji („analogReadResolution (bits);”). Ta zmiana rozdzielczości może się przydać w niektórych przypadkach. Na razie zostawiamy to jako.
Teraz, jeśli powyższe warunki są ustawione na domyślne, możemy odczytać wartość z ADC kanału '0' bezpośrednio wywołując funkcję „analogRead (pin);”, tutaj „pin” oznacza pin, do którego podłączyliśmy sygnał analogowy, w tym przypadku jest to byłoby „A0”. Wartość z ADC można przyjąć jako liczbę całkowitą jako „int SENSORVALUE = analogRead (A0); ”, W tej instrukcji wartość po ADC zostaje zapisana jako liczba całkowita„ SENSORVALUE ”.
PWM UNO można uzyskać na dowolnym z pinów oznaczonych jako „~” na płytce drukowanej. W UNO jest sześć kanałów PWM. Zamierzamy używać PIN3 do naszych celów.
analogWrite (3, VALUE); |
Z powyższego warunku możemy bezpośrednio uzyskać sygnał PWM na odpowiednim pinie. Pierwszy parametr w nawiasach służy do wyboru numeru pinu sygnału PWM. Drugi parametr służy do zapisu współczynnika wypełnienia.
Wartość PWM Arduino Uno można zmienić w zakresie od 0 do 255. Od „0” jako najniższego do „255” jako najwyższego. Z 255 jako współczynnikiem wypełnienia otrzymamy 5V na PIN3. Jeśli współczynnik wypełnienia podano jako 125, na PIN3 otrzymamy 2,5V.
Porozmawiajmy teraz o sterowaniu serwomotorem, Arduino Uno ma funkcję, która pozwala nam kontrolować pozycję serwomechanizmu, po prostu podając wartość stopnia. Powiedzmy, że jeśli chcemy, aby serwo miało wartość 30, możemy bezpośrednio przedstawić wartość w programie. Plik nagłówkowy SERVO zajmuje się wewnętrznie wszystkimi obliczeniami współczynnika wypełnienia. Możesz dowiedzieć się więcej o sterowaniu serwomotorem za pomocą arduino tutaj.
Teraz sg90 może poruszać się w zakresie 0-180 stopni, mamy wynik ADC 0-1024.
Więc ADC jest około sześć razy większa niż POZYCJA SERWOWA. Więc dzieląc wynik ADC przez 6 otrzymamy przybliżoną pozycję ręki SERVO. Stąd mamy sygnał PWM, którego współczynnik wypełnienia zmienia się liniowo wraz z WAGĄ lub SIŁĄ. Biorąc pod uwagę serwomotor, możemy sterować serwomotorem za pomocą czujnika siły.