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.
- WordPress w edukacji – jak uczyć kompetencji w bezpieczny sposób. - 3 lutego 2023
- Prezent świąteczny – FREE-SERWER - 2 grudnia 2022
- ChomeOS Flex – czy warto się zainteresować? - 5 listopada 2022