Mechatronika, programowanie, elektronika, kodowanie informacji, zawody przyszłości, innowacje.
Wszystkie te magiczne słowa klucze, które prawie każdy odmienia przez przypadki. Ja chciałbym dać Wam przepis na projekt/lekcję, gdzie możemy uczyć dzieci i historii, i innowacji.
Wg nowej PP Najważniejsze umiejętności rozwijane w ramach kształcenia ogólnego w szkole podstawowej to m. in. kreatywne rozwiązywanie problemów z różnych dziedzin ze świadomym wykorzystaniem metod i narzędzi wywodzących się z informatyki, w tym programowanie.
A w wymaganiach szczegółowych dla klas 7-8 możemy przeczytać :
Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych. Uczeń:
1) projektuje, tworzy i testuje programy w procesie rozwiązywania problemów.
W programach stosuje: instrukcje wejścia/wyjścia, wyrażenia arytmetyczne i logiczne, instrukcje warunkowe, instrukcje iteracyjne, funkcje oraz zmienne i tablice.
Dodatkowo w przedmiocie Technika możemy przeczytać:
konstruuje, m.in. z gotowych elementów, zabawki, roboty, modele mechaniczno-elektroniczne, w tym programowalne.
My zatem zbudujemy programowalny model mechaniczno-elektroniczny, którym będziemy sterować z programu napisanego w Pythonie.
Do naszej lekcji będziemy wykorzystywać układ mechatroniczny bazujący na Arduino UNO R3, diodę, rezystor (opornik), oraz Python’a 3 i jakiś edytor kodu, np. Geany.
Zatem do dzieła, a właściwie do schematu, połączeń i programowania. Bazując na darmowym oprogramowaniu OpenSource Fritzing zbudowałem schemat, który pozwala połączyć odpowiednio diodę. Wykorzystuję pin nr 13 w Arduino, gdyż wówczas mam test działania diody, ponieważ na płytce jest wlutowana dioda, która reaguje na polecenia dla pin’u 13.
Teraz sam program – poniżej kod, który działa dla systemów Linux, dla Windows trzeba dodatkowo zadbać o sterownik USB-Serial dla samej płytki Arduino. Oczywiście dla Windows port COM trzeba zawsze sprawdzić. W Linuksie będzie to ttyUSB0 na 99,9% – ale czasami tam tez trzeba sprawdzić.
[kod] #!/usr/bin/env python3 # -*- coding: utf-8 -*- # # kod_morse.py # # Copyright 2018 ABIX Edukacja <adasiek@abixedukacja.eu> # from pyfirmata import * from time import sleep #definicja kodu morse = { 'a' : '.-' , 'b' : '-...' , 'c' : '.-.-' , 'd' : '-..' , 'e' : '.' , 'f' : '..-.', 'g' : '--.' , 'h' : '....' , } ''' uwaga - kod niekompletny, ale proszę zauważyć, że na końcu jest znak przecinka mimo, że dalej nic nie ma to daje możliwości lepszej edycji kodu.... dobra praktyka ''' # definicje funkcji def swiec( obiekt_arduino, pin , znak ): ''' obiekt_arduino ( obiekt stworzony z klasy Arduino ) pin - numer pinu na płytce (integer) znak - '.' lub '-' (string) ''' if znak == '.': obiekt_arduino.digital[ pin ].write(0) sleep(0.1) obiekt_arduino.digital[ pin ].write(1) sleep(0.4) obiekt_arduino.digital[ pin ].write(0) if znak == '-': obiekt_arduino.digital[ pin ].write(0) sleep(0.1) obiekt_arduino.digital[ pin ].write(1) sleep(0.7) obiekt_arduino.digital[ pin ].write(0) # teraz testowy string do wyswietlania napis = 'beddhgdeaabccdd' # definicja obiektu połączenia do Arduino, standardowo pierwsze urządzenie USB w systemie Linux otrzymuje numer USB0 plytka = Arduino('/dev/ttyUSB0') # dla Windows definicja portu jest inna,np. # plytka = Arduino('COM12') for litera in napis: znaczek = morse[litera] print('Litera ' + litera + ' => ' + znaczek) for kod in znaczek: swiec(plytka, 13, kod)
To jest jedna z możliwych implementacji, oraz ważna uwaga. Kod powyżej jest przeze mnie ręcznie formatowany, aby wyglądał tu ładnie na stronie. Jednak jeśli chcecie go skopiować i sprawdzić, jak działa, wówczas raczej skorzystajcie z mojego repozytorium na GitHub. https://github.com/abixadamj/Abix.Edukacja/blob/master/Python101xEDU/kod_morse.py
Innym możliwym rozwiązaniem jest użycie innego sposobu na organizację diód LED:
#!/usr/bin/env python # -*- coding: utf-8 -*- # # kod_morse.py # # Copyright 2018 ABIX Edukacja <adasiek@abixedukacja.eu> # from pyfirmata import * from time import sleep #definicja kodu morse = { 'a' : '.-' , 'b' : '-...' , 'c' : '.-.-' , 'd' : '-..' , 'e' : '.' , 'f' : '..-.', 'g' : '--.' , 'h' : '....' , 'i' : '.' , 'j' : '..-.', 'k' : '--.' , 'l' : '..--' , } ''' uwaga - kod niekompletny, ale proszę zauważyć, że na końcu jest znak przecinka mimo, że dalej nic nie ma to daje możliwości lepszej edycji kodu.... dobra praktyka ''' # definicje funkcji def swiec( obiekt_arduino, pin , znak ): ''' obiekt_arduino ( obiekt stworzony z klasy Arduino ) pin - numer pinu napłytce (integer) znak - '.' lub '-' (string) ''' if znak == '.': siwec_dioda(obiekt_arduino, pin , 0.4) if znak == '-': siwec_dioda(obiekt_arduino, pin , 0.7) def siwec_dioda(obiekt_arduino, pin , czas): obiekt_arduino.digital[ pin ].write(0) sleep(0.1) obiekt_arduino.digital[ pin ].write(1) sleep(czas) obiekt_arduino.digital[ pin ].write(0) # teraz testowy string do wyswietlania, do wyboru ;-) # napis = 'befaBghAdbh'.lower() napis = 'beddhgdeaabccdd' # definicja obiektu połączenia do Arduino plytka = Arduino('/dev/ttyUSB0') truskawka = Arduino('/dev/ttyUSB1') for lqlk in napis: znaczek = morse[lqlk] print('Litera ' + lqlk + ' => ' + znaczek) for kod in znaczek: swiec(plytka, 13, kod) swiec(truskawka, 13, kod)
Dodatkowo w tym kolejnym kodzie możecie zauważyć, że zdefiniowane są dwa połączenia do Arduino: plytka oraz truskawka, aby pokazać, jak działa programowanie obiektowe, dlaczego jest łatwe i dlaczego warto od razu się go uczyć.
https://github.com/abixadamj/Abix.Edukacja/blob/master/Python101xEDU/kod_morse3.py
Pamiętajcie – w Pythonie wszystko jest obiektem.
Jak widzicie, sam kod nie jest specjalnie zawiły, a już spełnia wszystkie zalecenia Podstawy Programowej. Mamy instrukcje wejścia/wyjścia, wyrażenia arytmetyczne i logiczne, instrukcje warunkowe, instrukcje iteracyjne, funkcje oraz zmienne i tablice.
To wszystko, co widzicie, zrobiłem z wykorzystaniem systemu FREE_Desktop
Dzięki temu mam dostępny Python oraz odpowiednie moduły, które służą komunikacji z Arduino. Pamiętajcie – każdy może ZA DARMO i LEGALNIE mieć to całe oprogramowanie u siebie w szkole, np. jako system „obok” MS-Windows. Nikt nie każe Wam kasować Waszych Windowsów 😉 Ani nikt nie może zabronić Wam instalacji Linuksa obok. Jeśli chcecie to za udostępniam go na stronie https://free-desktop.pl
Oczywiście warto przy tej okazji pokazać też młodzieży informacji o samym kodzie Morse’a (można wspomnieć o Titanicu), o układach Arduino, kabelkach, diodach, napięciu elektrycznym, opornikach, diodach.
Jest tyle rzeczy, o których możemy przy tej okazji opowiedzieć. A może ktoś się zainteresuje?
Może zamiast kolejnych challenge na YT pomyślą o transmisji danych kodowanych Morsem? A może w ogóle zainteresuje się szyfrowaniem?
Na koniec chciałbym dać Wam drobną zagadkę: zostawiam tu zaszyfrowaną wiadomość (wykorzystałem prosty i popularny rodzaj szyfrowania). Kto go rozszyfruje i wyśle mi na adres adasiek@abixedukacja.eu, wówczas może liczyć na niespodziankę 😉
dgdp mzunlhalfc mhwy kdnhuhp hgzndfml
Cóż dalej?
Myślę, że za jakiś czas przygotuję modyfikację kodu, aby można było z klawiatury inicjować kropki i kreski, a może macie jakieś własne pomysły? W komentarzach możecie napisać, z wielką chęcią będę zamieniał Wasze pomysły w realny kod.
Adam Jurkiewicz – haker edukacji, członek nieformalnej grupy SuperbelfrzyRP. Absolwent kursów Massachusetts Institute of Technology z języka programowania Python.
Trener języka programowania Python, robotyki, mechatroniki, technologii komputerowych ze szczególnym uwzględnieniem otwartych zasobów edukacyjnych oraz oprogramowania OpenSource. Programista, administrator systemów UNIX/Linux, twórca remiksu edukacyjnego FREE_Desktop – remiksu systemu operacyjnego dla wolnych ludzi, legalnego i darmowego dla wszystkich.
Współpracownik Centrum Edukacji Obywatelskiej, w projekcie „Koduj z Klasą” ambasador i trener nauczycieli w zakresie języka programowania Python.
Zdobywca wyróżnienia Listy 100 Szerokiego Porozumienina Rzecz Umiejętności Cyfrowych Polsce w latach 2017, 2020 i 2021, członek zarządu Szkolnej Sekcji Informatyki przy Polskim Towarzystwie Informatycznym. Trener języka programowania Python, robotyki, mechatroniki, technologii komputerowych ze szczególnym uwzględnieniem otwartych zasobów edukacyjnych oraz oprogramowania OpenSource.
Autor książki „Python 3. Projekty dla początkujących i pasjonatów” wydanej przez Helion Edukacja.
Współautor treści z języka Python w projekcie E-Podręczniki do kształcenia ogólnego dla klas ponadgimnazjalnych. Współautor książki "Koduj w Pythonie - tworzymy grę przygodową" oraz publikacji "ENIGMA - Poznaj zagadkę Enigmy, tworząc grę przygodową w Pythonie" wydanych przez Fundację Rozwoju Edukacji Cyfrowej.
- Czy chcemy być „na szmyczy” korporacji? - 31 lipca 2023
- WordPress w edukacji – jak uczyć kompetencji w bezpieczny sposób. - 3 lutego 2023
- Prezent świąteczny – FREE-SERWER - 2 grudnia 2022