Witajcie przyjaciele, mam nadzieję, że wszystko u was w porządku i dobrze się bawicie.
Dzisiejszy post jest o sterowaniu serwomotorem za pomocą Arduino w Proteus ISIS. Serwomotor jest powszechnie stosowanym silnikiem w projektach inżynierskich do precyzyjnego ruchu po okręgu. Możemy poruszać serwomotorem pod dowolnym kątem, co nie jest możliwe w przypadku innych silników np. krokowych czy prądu stałego.
Na przykład, załóżmy, że chcę przesunąć antenę pod dokładnym kątem 47,5 stopnia. Jeśli używam silnika prądu stałego, muszę użyć enkodera. Więc w takich przypadkach zamiast używać silnika prądu stałego, będę wolał serwomotor.
Już zamieściłem kontrolę kąta serwomotoru przy użyciu Timera 555, w którym kontrolowałem serwomotor używając timera 555 i inny poradnik o sterowaniu serwomotorem za pomocą mikrokontrolera PIC, w którym kontrolowałem go za pomocą PIC16F877a. A dzisiaj będziemy kontrolować serwomotor za pomocą Arduino i zaprojektujemy symulację w Proteus ISIS.
Na początek przyjrzymy się prostemu sterowaniu serwomotorem za pomocą Arduino w Proteus ISIS, a następnie sprawdzimy sterowanie serwomechanizmem za pomocą Arduino z wykorzystaniem przycisków, w którym będziemy poruszać serwomotorem pod precyzyjnymi kątami, właśnie za pomocą przycisków. Tak więc zaczynajmy.
Proste sterowanie serwomotorem za pomocą Arduino w Proteusie
Po pierwsze, otwórz oprogramowanie Proteus ISIS i zaprojektuj poniższy prosty układ.
Powinieneś również spojrzeć na te biblioteki komponentów Proteusa.
Serwomotor ma trzy piny:
- Pierwszy pin to Vcc.
- Drugi pin to Pin kontrolny.
- Trzeci pin to GND.
Środkowy pin jest pinem sterującym i idzie do dowolnego pinu cyfrowego Arduino. Podłączyłem pin sterujący do pinu 4 Arduino.
Kod Arduino do sterowania serwomotorem
Następną rzeczą, którą musimy zrobić, jest zaprojektowanie kodu dla Arduino. Otwórz więc program Arduino i wklej do niego poniższy kod.
#include <Servo.h>
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(4);
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos>=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
}
Teraz skompiluj ten kod i uzyskaj swój plik hex.
Jest to ten sam kod, który jest podany w folderze Servo w Examples w oprogramowaniu Arduino.
Prześlij swój plik hex do płytki Arduino w Proteus.
Rezultaty symulacji Proteusa
Teraz, uruchom symulację i zobaczysz, że twój serwomotor zacznie się poruszać od 90 stopni do -90 stopni, a następnie z powrotem do 90 stopni i będzie się poruszał w ten sposób, jak pokazano na poniższych rysunkach:
Teraz, gdy go uruchomisz, najpierw pokaże pozycję A na powyższym rysunku, następnie przesunie się w kierunku przeciwnym do ruchu wskazówek zegara i minie pozycję B, a na końcu zatrzyma się w pozycji C, a następnie przesunie się zgodnie z ruchem wskazówek zegara i wróci do pozycji A po minięciu pozycji B.
W ten sposób będzie się on przemieszczał pomiędzy pozycją A i C.
Do tej pory widzieliśmy prostą kontrolę serwomotoru z Arduino w Proteus ISIS. Teraz spójrzmy na nieco złożoną kontrolę serwomotor z Arduino.
Sterowanie serwomotorem z Arduino za pomocą przycisków
W poprzedniej sekcji, widzieliśmy proste sterowanie serwomotoru z Arduino, w którym po prostu ruszaliśmy serwomotor z pozycji 90 stopni do -90 stopni i odwrotnie.
Teraz zamierzam sterować serwomotorem za pomocą pięciu przycisków, a każdy przycisk będzie przesuwał serwomotor o dokładny kąt.
Tak więc, najpierw zaprojektuj mały projekt, jak pokazano na poniższym rysunku:
Dodałem pięć przycisków za pomocą Arduino i teraz za pomocą tych pięciu przycisków będę poruszał serwomotorem do 90, 45, 0, -45 i -90 stopni. Tak więc, każdy przycisk ma swój dokładny kąt i tylko pod tym kątem będzie poruszał silnikiem.
Kod Arduino
Zatem następną rzeczą jest kod. Skopiuj i wklej poniższy kod w swoim oprogramowaniu Arduino i uzyskaj plik hex:
#include <Servo.h>
Servo myservo;
int degree90 = 8;
int degree45 = 9;
int degree0 = 10;
int degree_45 = 11;
int degree_90 = 12;
void setup()
{
myservo.attach(4);
pinMode(degree90, INPUT_PULLUP);
pinMode(degree45, INPUT_PULLUP);
pinMode(degree0, INPUT_PULLUP);
pinMode(degree_45, INPUT_PULLUP);
pinMode(degree_90, INPUT_PULLUP);
}
void loop()
{
if(digitalRead(degree90) == LOW)
{
myservo.write(180);
}
if(digitalRead(degree45) == LOW)
{
myservo.write(117);
}
if(digitalRead(degree0) == LOW)
{
myservo.write(93);
}
if(digitalRead(degree_45) == LOW)
{
myservo.write(68);
}
if(digitalRead(degree_90) == LOW)
{
myservo.write(3);
}
}
Prześlij ów plik hex do swojej płytki Arduino w Proteusie i uruchom symulację.
Rezultaty symulacji Proteusa
Teraz naciskaj te przyciski, po kolei, od góry do dołu, a otrzymasz poniższe wyniki:
Powyższy rysunek jest dość oczywisty, ale mimo to, trochę go wyjaśnię.
Na pierwszym rysunku nacisnąłem pierwszy przycisk i silnik przesunął się do -90 stopni.
Na drugim rysunku nacisnąłem drugi przycisk i silnik przesunął się na -45 stopni.
Na trzecim rysunku nacisnąłem trzeci przycisk i silnik przesunął się do 0 stopni.
Na czwartym rysunku nacisnąłem czwarty przycisk i silnik przesunął się do 45 stopni.
Na piątym rysunku nacisnąłem piąty przycisk i silnik przesunął się do 90 stopni.
Na szóstym rysunku wszystkie przyciski są wciśnięte, a silnik pozostał w ostatniej pozycji.
Było to dość proste i mam nadzieję, że wyjaśniłem to poprawnie. Jeśli nadal masz jakieś pytania to pytaj w komentarzach, a ja postaram się je na nie odpowiedzieć.
To wszystko na dzisiaj. Do zobaczenia w następnym poradniku.
Trzymajcie się!