Cześć,
Tak jak w tytule, chciałbym zaprezentować Wam prosty projekt na Arduino skierowany głównie do początkujących użytkowników.
Zaszyfrujecie dzięki niemu dowolny wyraz w kodzie Morse’a, a nawet go wysłuchacie. Zatem do dzieła!
Co będzie potrzebne?
- Dowolne Arduino (ja korzystałem z UNO)
- Wyświetlacz LCD I2C (najlepiej 20×4)
- 3 przyciski (tact switch)
- Dioda LED z odpowiednim rezystorem
- Buzzer, brzęczyk lub inny generator hałasu na 5V :)
Ogólny zamysł i połączenie…
Do Arduino podłączamy wyświetlacz (łączymy piny z wyświetlacza z Arduino – VCC z 5V, GND z GND, SDA z SDA i SCL z SCL). Dodatkowo, na płytce stykowej umieszczamy 3 przyciski. Dwa z nich będą służyły do przewijania liter przez alfabet w górę i w dół, trzeci do zatwierdzania wyboru. Z jednej strony przyciski łączymy do masy, z drugiej zaś strony do pinów cyfrowych Arduino – 3, 4 i 5. Na koniec, wrzucamy na płytkę stykową nasz buzzer oraz diodę LED, połączone równolegle. Plus (anody) łączymy z pinem Arduino 11, katody do masy. Tak przygotowany zestaw jest już gotowy do wgrania programu. Poniżej załączam obrazek, jak powinno wyglądać prawidłowe połączenie.
Siadamy do kodu
Mój gotowy kod z komentarzami i objaśnieniami dostępny jest poniżej:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,20,4); String morse[26] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}; int kursor=0; //pozycja kursora na LCD char wybierana = 'A'; //aktualnie wybierana litera (którą zmieniamy przyciskami) String slowo = ""; //słowo do przetłumaczenia, tu dopisujemy kolejne litery void wyswietlWybierana() { lcd.setCursor(kursor,1); lcd.print(wybierana); } void(* resetKodu) (void) = 0; //funkcja resetująca void setup() { pinMode(11,OUTPUT); pinMode(3,INPUT_PULLUP); pinMode(4,INPUT_PULLUP); pinMode(5,INPUT_PULLUP); lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("Wpisz tekst do szyf."); wyswietlWybierana(); } void loop() { if(!digitalRead(3)) //naciskamy przycisk litery w górę { wybierana++; if(wybierana > 90) //wyjechaliśmy poza alfabet, wracamy na początek { wybierana = 'A'; } wyswietlWybierana(); while(!digitalRead(3)); //czekamy aż użytkownik puści przycisk delay(200); } if(!digitalRead(4)) //naciskamy przycisk litery w dół { wybierana--; if(wybierana < 65) //wyjechaliśmy poza alfabet, idziemy na koniec { wybierana = 'Z'; } wyswietlWybierana(); while(!digitalRead(4)); //czekamy aż użytkownik puści przycisk delay(200); } if(!digitalRead(5)) //naciskamy przycisk zatwierdzenia { slowo += wybierana; //dopisujemy literę do słowa kursor++; delay(1000); if(digitalRead(5)) //jeśli po sekundzie przycisk już nie jest trzymany, dodajemy kolejną literę { wybierana = 'A'; wyswietlWybierana(); } else //przytrzymanie przycisku - koniec wejścia, tłumaczymy { String zaszyfrowane = ""; for(int i=0; i<slowo.length(); i++) { zaszyfrowane += morse[slowo[i]-65]; //dopisujemy odpowiednik litery w kodzie Morse'a zaszyfrowane += ' '; } lcd.setCursor(0,0); lcd.print("Zaszyfrowany wyraz: "); lcd.setCursor(0,1); lcd.print(zaszyfrowane); for(int i=0; i<zaszyfrowane.length(); i++) //po wyświetleniu na LCD dajemy na wyjście 11 stosowny dźwięk/impuls { if(zaszyfrowane[i] == '.') { digitalWrite(11, HIGH); delay(300); digitalWrite(11, LOW); delay(300); } else if(zaszyfrowane[i] == '-') { digitalWrite(11, HIGH); delay(600); digitalWrite(11, LOW); delay(300); } else if(zaszyfrowane[i] == ' ') { delay(1000); } } delay(3000); resetKodu(); //na koniec resetujemy całe arduino } } } |
Działanie
Dwoma przyciskami przewijamy alfabet w górę i w dół, gdy mamy odpowiednią literę, klikamy trzeci przycisk i wybieramy kolejną. Aby zakończyć wprowadzanie liter przytrzymujemy trzeci przycisk przez ponad sekundę. Na wyświetlaczu pojawia się zaszyfrowane słowo.
Prezentacja działania na filmie poniżej:
Mam nadzieję, że projekt się spodobał lub kogoś zainspirował. Po skończeniu możemy również zabawić się w np. wysyłanie zaszyfrowanego komunikatu drogą radiową, ale to już sprawa na zupełnie osobny poradnik. Wszelkie uwagi mile widziane w komentarzach.
Pozdrawiam
Mikołaj
1) Kod Morse’a nie jest szyfrem, więc do szyfrowania temu daleko
2) Brak regulacji prędkości i tonu – to nawet nie jest standardowy ton, po prostu kluczujesz głośniczek bez tranzystora…
3) Wpisywanie na klawiszach… można było użyć chociaż enkodera, serio. Różnica cenowa prawie żadna, a znacznie lepsza obsługa.
Przykro mi to mówić, ale to kolejny projekt w stylu połączenia paru kabelków. Naprawdę, można było to ulepszyć (odpowiedni ton, regulacja szybkości, wybieranie znaku enkoderem, przyciski pause/stop/replay), aktualnie to wygląda jak słaby tutorial. Wiem że ostatnio narzekam na tej stronie, ale naprawdę na głównej są znacznie lepsze projekty, nie wyglądające jak tutorial do Arduino, z obudową i odpowiednio przemyślane. Jeżeli społeczność zadecyduje że ok to spoko, ja niestety jestem na nie. Po prostu nie podoba mi się projekt zbudowany z godzinę z losowego pomysłu, pozostawiony na breadboardzie, nieprzemyślany.
Kod Morse’a to jak łatwo się domyśleć kodowanie, a nie szyfrowanie.
Nie za bardzo przekonuje mnie projekt, do którego na dobrą sprawę nie trzeba ani Arduino ani żadnej amatorskiej elektroniki – wystarczy napisać prosty programik w Pythonie, C# albo Javie. Na dobrą sprawę są nawet strony internetowe, które realizują tę funkcjonalność – to czyni projekt dosyć mocno niepraktycznym. Można byłoby go odratować np. umieszczeniem w obudowie z jakimś zasilaniem żeby zrobić z niego moduł przenośny; potem umożliwić przesyłanie komunikatów laserem i na koniec zbudować i oprogramować odbiornik, który umiałby je odczytać i wyświetlić. Moim zdaniem fakt, że projekt działa to jeszcze trochę za mało, żeby trafił na główną stronę.
Ciekawy artykuł, spróbuje sobie złożyć coś takiego po zakupie buzzera
a co jeśli nie posiadam konwertera do wyświetlacza, jak wtedy to połączyć?
Potrzebuje pomocy! Jestem początkującym z Arduino (mam 13 lat) i nie wiem jak podłączyć wyświetlacz bezpośrednio do Arduino i jak zmienić kod aby to działało
A ogólnie to artykuł super😀
Sposób podłączenia masz w filmie:
https://www.youtube.com/watch?v=qKgldxcOKCg
Masz tam też bibliotekę, którą należy użyć.
W kodzie programu zamieniasz linijkę nr 2 na pierwszą linijkę z filmu.
Linijkę nr 4 zmieniasz na drugą wpisaną w filmie.
Wywalasz z kodu linijkę 30.
W linii 29 wpisujesz lcd.begin(16,2) – jeżeli masz wyświetlacz 2×16 znaków. Jeśli inny, wpisujesz tak, jak masz u siebie.
Jeśli będziesz miał nadal problem, napisz na forum.majsterko.pl, łatwiej będzie pomóc.