Sterowanie silnikiem serwo

W czasie tej lekcji uczniowie dowiedzą się czym są serwomotory oraz nauczą się programować takie urządzenie.

CELE, POJĘCIA, MATERIAŁY ▼

Cele zajęć

Cele ogólne:

• Wyrabianie umiejętności rozumienia, analizowania i rozwiązywania problemów na bazie logicznego i abstrakcyjnego myślenia.
• Doskonalenie myślenia algorytmicznego.
• Programowanie i rozwiązywanie problemów z wykorzystaniem komputera oraz
innych urządzeń cyfrowych, poprzez układanie i programowanie algorytmów.
• Zgłębianie znajomość zasad działania urządzeń cyfrowych oraz wykonywania programów.
• Rozwijanie kompetencji społecznych, takich jak: komunikacja i współpraca w grupie, udział w projektach zespołowych oraz organizacja i zarządzanie projektami.

Cele szczegółowe

Uczeń potrafi:
• Wyjaśnić co to jest serwomotor i do czego może być wykorzystany.
• Wyjaśnić zasady sterowania serwomotorem.
• Podłączyć serwomotor do adaptera LOFI Brain
• Ustawić serwomotor na konkretnej pozycji wykorzystując funkcję servo(wyjście, wartość);
• Napisać program sterujący serwomotorem za pomocą potencjometru.

Treści programowe (związek z podstawą programową)

Podstawa programowa z informatyki – szkoła podstawowa:
Etap II – klasy IV – VIII, w tym klasy VII – VIII: I.1.b, I.2.a, I.2.b, I.2.c, I.3, II.1.b, II.3, III.3, IV.1, IV.2, IV.3, IV.4,
Etap II – klasy VII-VIII: I.1, I.2.a, I.4, II.1, II.2, II.5, III.3, IV.1.

Pojęcia kluczowe

• serwomotor / serwo
• funkcje (setup, loop, write, delay, read, buzzer, distance, servo)
• funkcja warunkowa
• iteracja

Metody pracy
• Wykład problemowy,
• Pogadanka,
• Dyskusja dydaktyczna związana z wykładem,
• Pokaz,
• Ćwiczenia laboratoryjne.

Materiały pomocnicze

• Zestaw LOFI Robot CODEBOX z rozszerzeniem CODEBOX Tv,
• Komputery stacjonarne lub przenośne z zainstalowanym Arduino IDE,
• Komputer nauczyciela z zainstalowanym Arduino IDE, projektor, tablica projekcyjna.

Czas na realizację zajęć:
1 godzina lekcyjna (45 minut)

Przebieg zajęć

1. Wprowadzenie w tematykę i integracja grupy:

Czas na realizację tej części: ok 5 minut.

Pytamy uczniów o czym rozmawialiśmy podczas ostatniej lekcji?
• poznaliśmy kilka różnych funkcji z biblioteki LOFI: write(wyjście, wartość); read(wejście); buzzer(stan); i distance();
• nauczyliśmy się deklarować zmienne,
• definiujemy własne funkcje z parametrami,
• piszemy proste programy i wgrywamy ja na płytkę Arduino,
• podłączamy do płytki urządzenia wejścia (potencjometr, czujnik odległości, czujnik natężenia światła) i wyjścia (diody, buzzer).

ZWIŃ ▲

2. Część zasadnicza:

Czas na realizację tej części: ok 35 minut.

Dziś poznacie zasadę działania oraz programowania serwomotoru.

Zadajemy uczniom pytanie: Czym wiecie co to jest serwomotor i do czego służy? Jak inaczej może być nazywany?

• serwomotor, inaczej: silnik serwo, silnik krokowy, serwo,
• zazwyczaj jest to silnik elektryczny z przekładnią, na wyjściu której zamontowany jest czujnik położenia osi, z odpowiednią elektroniką sterującą
• dzięki czujnikowi położenia serwo można wysterować tak, aby obróciło się o pewien konkretny kąt i pozostało w tym położeniu itd.
• przykładem zastosowania serwomotoru jest ramię robota, ster samolotu, automatycznie otwierane i zamykane drzwi itp.

Przedstawiciel każdej grupy uczniów bierze od nauczyciela przypisany danej grupie zestaw. Uczniowie siadają przy komputerach.

Prosimy uczniów aby włączyli komputery, zalogowali się i uruchomili Arduino IDE oraz wyjęli z zestawów płytkę Arduino i serwomotor.

Zasady sterowania silnikiem serwo:
• podstawowy program w bibliotece LOFI ustawia silnik serwo na zadaną pozycję (50)
• zakres ruchu serwomotoru to 0-100
• funkcją, która będzie bezpośrednio sterowała serwomotorem jest natomiast servo(wyjście, wartość);

Przykład / Ćwiczenie 13

Przepisz poniższy kod, który odpowiedzialny jest za konfigurację serwomotoru i ustawienie silnika w pozycji 50. Zapisz plik jako “zadanie_13”, zweryfikuj program, podłącz serwomotor do OUTPUT1 oraz wgraj na płytkę.

#include <LOFI.h>
LOFI robot;

int pozycja = 0;
//deklaracja zmiennej pozycja i przypisanie jej początkowej wartości 0;

void setup() {
}

void loop() {
robot.servo(OUTPUT1, 50);

// funkcja servo(wyjście, wartość); tu ustawia wartość 50 silnikowi podłączonemu do OUTPUT1
}

Zadanie 14

Napisz program sterujący serwomotorem podłączonym do OUTPUT1 za pomocą potencjometru podłączonego do INPUT2. Zapisz plik jako “zadanie_14”, zweryfikuj program oraz wgraj na płytkę.

Przykładowe rozwiązanie:

#include <LOFI.h>
LOFI robot;

void setup() {
}

void loop() {
int potencjometr = robot.read(INPUT2);

// odczyt wartości potencjometru podłączonego do INPUT2
robot.servo(OUTPUT1, potencjometr);

//sterowanie serwomotorem podłączonym do OUTPUT1 przy pomocy zmiennej potencjometr
}

Przykład / Ćwiczenie 15

Serwomotor sterowany automatycznie? Czemu nie!
Najpierw musimy zadeklarować nową zmienną “pozycja”. Zmienna ta z każdym powtórzeniem pętli loop() {} ma być zwiększana o 1. Mamy więc tu do czynienia z powtórzeniem czyli iteracją. Kiedy POZYCJA przekroczy wartość maksymalną czyli 100, to ustawiamy ją z powrotem na 0. Mamy więc tu do czynienia z funkcją warunkową if() {}; która odpowiedzialna będzie za iterację, aż do momentu spełnienia warunku.

Przepisujemy i analizujemy poniższy przykład (przykład ten można wgrać z Plik > Przykłady > LOFI > lofi_servo_auto

Warto zapisać plik jako “zadanie_15”, zweryfikować program oraz wgrać na płytkę.

#include <LOFI.h>
LOFI robot;

int pozycja = 0;

//deklaracja nowej zmiennej pozycja i przypisanie jej początkowej wartości 0

void setup() {
}

void loop() {
pozycja = pozycja + 1;

//zmienna pozycja za każdym powtórzeniem pętli loop() będzie zwiększana o 1
if (pozycja > 100) {
 pozycja = 0;
}
// po zwiększeniu pozycji o 1, mamy funkcję warunkową if, która sprawdza 
// czy zmienna pozycja nie jest przypadkiem większa od 100, 
// jeśli warunek ten zostanie spełniony, wówczas zmiennej pozycja ponownie zostanie przypisana wartość 0

robot.servo(OUTPUT1, pozycja);

// funkcja servo, która ustawia silnik podłączony do OUTPUT1 
// na taką pozycję jak aktualna wartość zmiennej pozycja


delay(40); 
// koniecznie funkcja delay-czekaj, aby pętla loop nie była wykonywana zbyt szybko
// zwiększenie lub zmniejszenie parametru tej funkcji 
// będzie powodowało wolniejszą lub szybszą pracę “programu” i serwomotoru

}

W zależności od pozostałego czasu można dać uczniom kilka minut na zmiany powyższego kodu i obserwowanie efektu.

Pytamy uczniów do czego można by wykorzystać możliwości serwomotorów? Słuchamy odpowiedzi – pomysłów uczniów.

3. Podsumowanie i ewaluacja:

Czas na realizację tej części: ok. 5 minut.

Prosimy aby uczniowie ostrożnie spakowali zestawy. Jeden przedstawiciel każdej grupy przynosi zestaw na wyznaczone przez nauczyciela miejsce w klasie.

Zadajemy uczniom pytanie: Czego nauczyliśmy się na dzisiejszej lekcji?
• dowiedzieliśmy się czym jest serwomotor i do czego może być wykorzystany,
• nauczyliśmy się sterować serwomotorem.

Na zakończenie mówimy uczniom, że na kolejnej lekcji nauczymy się sterować wyświetlaczem RGB 8×8.

O autorze scenariusza:

Grzegorz Zawistowski

Grzegorz Zawistowski

Nauczyciel informatyki w szkole podstawowej. Miłośnik komputerów, nowinek technicznych i robotyki. Szkoleniowiec i trener m.in, w #Superkoderach i Mistrzach Kodowania.