Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Budowanie bazy
- Krok 2: Kawałek serwa
- Krok 3: Dodawanie serwomotoru i rolki papieru do podstawy
- Krok 4: Budowanie ramy silnika krokowego
- Krok 5: Wykończenie akcentów
- Krok 6: Elektronika
- Krok 7: Rozwiązywanie problemów
Wideo: Arduino Morse Code Writer: 7 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:27
Stworzyłem robota, który potrafi przekonwertować dowolny tekst na kod Morse'a, a następnie go zapisać! Jest zrobiony z tektury i klocków Lego, a do elektroniki użyłem Arduino i tylko dwóch silników.
Kieszonkowe dzieci
Płytka Arduino Uno Silnik krokowy Mikro serwo SG90ULN2003 Moduł sterownika silnika krokowego Moduł zasilania Płytka stykowa 4× Przewody połączeniowe 6× Przewody dupont żeńsko-męskie Adapter 9V1AKabel USB Karton 2× Kołki drewniane 2× Sprężyny Słoma Biały papierLegoSuper klej Pistolet do klejenia na gorąco Elastyczna opaska (do wykonania uchwyt na długopis) Nożyczki Cutter
Krok 1: Budowanie bazy
Zacznij od zbudowania podstawy. Mój ma 4 sztyfty i 20 sztyftów długi, po zbudowaniu jednej warstwy o tych długościach zbudowałem wokół niej obrzeże o szerokości jednego sztyftu, pozostawiając lukę z jednej strony, aby zostawić miejsce na silnik krokowy, a następnie dodałem kawałki płytek do środkowej części, w której będzie pasek papieru. Korzystanie z Lego sprawiło, że jest bardzo wytrzymały i łatwy do modyfikacji. Aby zrobić rolkę papieru, wycinam paski papieru A4 o szerokości 1,2cm (wybrałem tę szerokość, ponieważ jest taka sama jak koło Lego, którego użyłem, możesz powiększyć lub zmniejszyć w zależności od koła) i skleiłem ich końce razem aby uformować jeden bardzo długi pasek, a następnie owinąłem go wokół koła.
Krok 2: Kawałek serwa
Do tego kroku potrzebujesz:
- dwa drewniane kołki o długości 4cm
- dwie sprężyny o długości 2cm
- jedna słomka pocięta na dwa kawałki o długości 2 cm każda
- jeden kawałek tektury o wymiarach 12 cm na 4 cm;
- dwa kawałki tektury 4 cm na 1,5 cm
- jeden kawałek tektury 4 cm na 2 cm
Najpierw przyklej kołki do jednego z 4 x 1,5 kawałków, następnie włóż sprężyny i słomki do kołków, a następnie przyklej drugi kawałek kartonu po drugiej stronie, aby utrzymać wszystko na swoim miejscu.
Po drugie, przyklej kawałek 4 cm na 2 cm na wierzchu słomek.
Po trzecie, odwróć cały kawałek i przyklej mały kołek z tyłu, nie pośrodku, ale nieco w lewo. (zapomniałem dodać mały kołek na pierwszym zdjęciu)
Na koniec wytnij otwór w dużym kawałku kartonu wielkości przodu silnika serwo i wklej go, a następnie przyklej kawałek, który właśnie zrobiliśmy za pomocą kołków do dużego kawałka, aby serwo poruszało się, popychało mały kołek w dół, który z kolei popycha również sprężyny.
Skończyło się na odcięciu około 3cm od dolnej części kawałka o wymiarach 12cm na 4cm i przyklejeniu do niego jeszcze dwóch kawałków o wymiarach 4cm na 1,5cm, a następnie przykryłem kawałkiem kartonu o wymiarach 5,5cm na 4cm. A do trzymania markera zrobiłem mały pętlę gumki i przykleiłem do małego kawałka tektury, następnie przykleiłem to do kawałka 4cm na 2cm, który będzie przesuwał się w dół, gdy serwo wystartuje. Te dodatki powstrzymały znacznik przed przesuwaniem się z boku na bok, gdy sprężyny wracają do góry.
Krok 3: Dodawanie serwomotoru i rolki papieru do podstawy
Dodałem jeszcze dwa klocki z jednej strony podstawy, aby podeprzeć element serwa i przykleiłem go na miejscu. Następnie dodałem koło na drugim końcu podstawy.
Krok 4: Budowanie ramy silnika krokowego
Ten krok był nie lada wyzwaniem, ponieważ silnik nie był idealnie dopasowany do klocków Lego. Udało mi się jednak to zrobić, używając dwóch otworów w silniku, aby zabezpieczyć go na miejscu. Następnie przykleiłem koło Lego do końcówki silnika, a następnie położyłem je tuż przy podstawie po stronie, którą pozostawiłem otwartą w kroku 1.
Krok 5: Wykończenie akcentów
Dodałem dwa kawałki łuku, aby zakryć koło, aby zamocować papier na miejscu. I dodałem dwa mniejsze kawałki łuku, jeden do trzymania przewodów silnika krokowego, a drugi do trzymania papieru. Na koniec zmieniłem koło silnika krokowego na nieco większe, które przesuwało papier lepiej niż stare koło.
Krok 6: Elektronika
Na koniec musisz podłączyć silniki do Arduino i wgrać kod.
Zaczniemy od serwosilnika, podłącz brązowy przewód (przewód uziemienia) do pinu GND, następnie czerwony przewód (przewód zasilania) do pinu 5V, a pomarańczowy przewód (przewód sygnałowy) do Dig #5 Szpilka. Następnie silnik krokowy podłącz 1N1 do gniazda #11, 1N2 do gniazda #10, 1N3 do gniazda #9, 1N4 do gniazda #8, 5V do dodatniej strony płytki stykowej, a pin uziemienia do ujemnej strony deska do krojenia chleba. I nie zapomnij podłączyć modułu zasilacza do płytki stykowej, upewniając się, że jego dodatnie i ujemne strony są prawidłowo wyrównane z odpowiednimi bokami płytki stykowej. Jeśli zapomnisz o tym, odwrócisz moc swojego projektu, a nie chcesz tego robić.
W przypadku kodu napisałem cztery metody, jedną do pisania kropki, jedną do pisania myślnika i dwie do pozostawienia odstępu między każdą literą a każdym słowem. W ten sposób mogę po prostu wywoływać te metody, gdy ich potrzebuję, zamiast pisać je ponownie dla każdej litery. Następnie napisałem pętlę for, która przechodzi przez każdą literę tekstu i zapisuje ją. Wewnątrz napisałem instrukcję if dla każdej litery, ale jeśli wolisz, możesz napisać ją w instrukcji switch. Oczywiście możesz dodać do kodu, aby umożliwić programowi odczytywanie liczb. Kiedy całe okablowanie jest gotowe, po prostu skopiuj i wklej kod do swojego IDE. Nie zapomnij zainstalować bibliotek krokowych, serwo i stringów. Potem możesz już iść.
Jak to działa
Po uruchomieniu Arduino program patrzy na pierwszą literę tekstu i w zależności od tego, która to jest, wywołuje funkcje, które zapisują go alfabetem Morse'a. Na przykład, gdy wywołana jest funkcja kropki, serwomotor jest ustawiony na 160, co przesuwa pióro w dół, a następnie jest ustawiany z powrotem na 90, co pozwala sprężynom wrócić do góry, przesuwając pióro razem z nimi. A jeśli wywołana zostanie funkcja kreski, serwo przesuwa pióro w dół, a następnie silnik krokowy obraca koło, które ciągnie papier, co powoduje, że pióro pisze kreskę. A jeśli jedna z funkcji spacji jest nazywana, silnik krokowy obraca się, ale z piórem do góry, tak że ciągnie papier, tworząc odstęp między literami lub słowami. Po zakończeniu przechodzi do następnej litery i powtarza ten sam proces. Mam nadzieję, że to lubisz;)
Kod
#włączać
#include #include #include const int stepsPerRevolution = 150; // To jest zmienna silnika krokowego String sentencja = "*hello"; //Zmień tę zmienną, aby pisać różne słowa, ale pisz tylko małymi literami i rozpoczynaj słowo od "*" Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); Serwo myServo; // To jest metoda, która powoduje, że robot zapisuje kropkę void dot() { Serial.println("dot start"); mojeSerwo.zapis(160); opóźnienie (1000); mojeSerwo.write(90); opóźnienie (1000); myStepper.step(krokiNaRewolucję); opóźnienie (1000); Serial.println("kropka zrobione"); } // To jest metoda, która powoduje, że robot zapisuje myślnik void dash() { Serial.println("rozpoczęcie myślnika"); mojeSerwo.zapis(160); opóźnienie (1000); myStepper.step(krokiNaRewolucję); opóźnienie (1000); mojeSerwo.write(90); opóźnienie (1000); myStepper.step(krokiNaRewolucję); opóźnienie (1000); Serial.println("kreska gotowe"); } // To jest metoda, która powoduje, że robot zostawia spację między każdą literą void space() { Serial.println("spacja start"); mojeSerwo.write(90); opóźnienie (1000); mójStepper.krok(200); opóźnienie (1000); Serial.println("zakończono spację"); } // Jest to metoda, która powoduje, że robot zostawia większą spację między każdym słowem void bigSpace() { myServo.write(90); mójKrok.krok(250); opóźnienie (1000); } void setup() { // wstaw tutaj swój kod konfiguracyjny do jednorazowego uruchomienia: Serial.begin(9600); mójStepper.setSpeed(100); mojeSerwo.attach(5); int first = zdanie.indexOf('*'); // ta pętla for przechodzi przez każdą literę ciągu, a następnie wywołuje odpowiednie metody do jej zapisania for (int i = 0; i < sentencja.length(); i++) { if (sentence.charAt(first + i) == 'a') { Serial.print(".- "); kropka(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'b') { Serial.print("-… "); kropla(); kropka(); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'c') { Serial.print("-.-. "); kropla(); kropka(); kropla(); kropka(); przestrzeń(); } else if (zdanie.charAt(first + i) == 'd') { Serial.print("-.. "); kropla(); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'e') { Serial.print(". "); kropka(); przestrzeń(); } else if (zdanie.charAt(first + i) == 'f') { Serial.print("..-. "); kropka(); kropka(); kropla(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'g') { Serial.print("--. "); kropla(); kropla(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'h') { Serial.print("…. "); kropka(); kropka(); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'i') { Serial.print(".. "); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'j') { Serial.print(".--- "); kropka(); kropla(); kropla(); kropla(); przestrzeń(); } else if (zdanie.charAt(first + i) == 'k') { Serial.print("-.-"); kropla(); kropka(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'l') { Serial.print(".-.. "); kropka(); kropla(); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'm') { Serial.print("--"); kropla(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'n') { Serial.print("-. "); kropla(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'o') { Serial.print("---"); kropla(); kropla(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'p') { Serial.print(".--. "); kropka(); kropla(); kropla(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 'q') { Serial.print("--.-"); kropla(); kropla(); kropka(); kropla(); przestrzeń(); } else if (zdanie.charAt(first + i) == 'r') { Serial.print(".-. "); kropka(); kropla(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 's') { Serial.print("…"); kropka(); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == 't') { Serial.print("-"); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'u') { Serial.print("..- "); kropka(); kropka(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'v') { Serial.print("…-"); kropka(); kropka(); kropka(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'w') { Serial.print(".-- "); kropka(); kropla(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'x') { Serial.print("-..-"); kropla(); kropka(); kropka(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'y') { Serial.print("-.--"); kropla(); kropka(); kropla(); kropla(); przestrzeń(); } else if (sentence.charAt(first + i) == 'z') { Serial.print("--.. "); kropla(); kropla(); kropka(); kropka(); przestrzeń(); } else if (sentence.charAt(first + i) == ' ') { Serial.print("/ "); duża przestrzeń(); } } } void loop() { //Nic tu nie pisz }
Krok 7: Rozwiązywanie problemów
Koło się nie porusza
Może wystąpić zbyt duże tarcie między kołem a papierem, spróbuj nieco unieść koło lub je zmienić.
Kółko ciągnie papier, ale potem obraca się bez ciągnięcia papieru
Upewnij się, że przykleiłeś koło w środku silnika krokowego
Kropki i kreski są połączone
Sprawdź, czy funkcje kropki, myślnika i spacji są napisane poprawnie, powinny wyglądać tak:
// To jest metoda, która powoduje, że robot zapisuje kropkę kropkową() { Serial.println("dot start"); mojeSerwo.zapis(160); opóźnienie (1000); mojeSerwo.write(90); opóźnienie (1000); myStepper.step(kroki na rewolucję); opóźnienie (1000); Serial.println("kropka zrobione"); }
// To jest metoda, dzięki której robot pisze myślnik
void kreska() { Serial.println("początek myślnika"); mojeSerwo.zapis(160); opóźnienie (1000); myStepper.step(kroki na rewolucję); opóźnienie (1000); mojeSerwo.write(90); opóźnienie (1000); myStepper.step(kroki na rewolucję); opóźnienie (1000); Serial.println("kreska gotowe"); }
// To jest metoda, która sprawia, że robot zostawia spację między każdą literą
void space() { Serial.println("spacja start"); mojeSerwo.write(90); opóźnienie (1000); mójStepper.krok(200); opóźnienie (1000); Serial.println("zakończono spację"); }
Zalecana:
Dekoder Morse'a z drzewa binarnego: 7 kroków (ze zdjęciami)
Dekoder Morse'a z drzewa binarnego: a.articles {font-size: 110,0%; grubość czcionki: pogrubiona; styl czcionki: kursywa; dekoracja tekstu: brak; background-color: red;} a.articles:hover {background-color: black;} Ta instrukcja wyjaśnia, jak dekodować kod Morse'a za pomocą Arduino Uno R3.T
Crack the Code Game, Puzzle oparte na Arduino: 4 kroki (ze zdjęciami)
Crack the Code Game, Arduino Based Puzzle Box: W tej instrukcji pokażę ci, jak zbudować własną grę z kodem, w której używasz obrotowego pokrętła, aby odgadnąć losowo wygenerowany kod do sejfu. Z przodu sejfu znajduje się 8 diod LED, które informują, ile
Nadajnik Arduino Morse Code: 11 kroków
Nadajnik kodu Morse'a Arduino: W tej instrukcji użyjesz Arduino Uno do utworzenia nadajnika kodu Morse'a i użyj monitora szeregowego do odczytania przesłanych wiadomości. Potrzebne części: Arduino UnoBreadboard BrzęczykPrzyciskiPrzewody połączeniowe
Generator Arduino Yún Morse'a: 4 kroki (ze zdjęciami)
Arduino Yún Morse Generator: Czy byłeś kiedyś w barze, gdzie nie mogłeś porozmawiać z przyjacielem, ponieważ muzyka była zbyt głośna? teraz możesz poprosić go o piwo alfabetem Morse'a! Zacznijmy
Morse Code Touch Keyer/Autocoder: 12 kroków (ze zdjęciami)
Morse Code Touch Keyer/Autocoder: Stworzyłem ten projekt jakiś czas temu, ale pomyślałem, że ktoś może wykorzystać ten pomysł. Jestem radioamatorem i wszedłem w to trochę późno w życiu, kiedy przeszedłem na emeryturę i miałem czas. Mam teraz licencję generalną i używam telefonu (vo