Оглавление:
- Запасы
- Шаг 1: создание базы
- Шаг 2: сервопривод
- Шаг 3: Добавление серводвигателя и рулона бумаги к основанию
- Шаг 4: Сборка рамы шагового двигателя
- Шаг 5: завершающие штрихи
- Шаг 6: Электроника
- Шаг 7. Устранение неполадок
Видео: Писатель кода Морзе для Arduino: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
Я сделал робота, который может преобразовать любой заданный текст в азбуку Морзе, а затем записать его !! Он сделан из картона и Lego, а для электроники я использовал Arduino и только два двигателя.
Запасы
Плата Arduino Uno Шаговый двигатель Микро-сервопривод SG90ULN2003 Модуль драйвера шагового двигателя Модуль питания Макетная плата4 × Перемычки 6 × Дюпон проводов между штекерами 9V1A Адаптер USB-кабель Картон 2 × Деревянные дюбеля 2 × Пружины Солома Белая бумага LegoSuper glue Пистолет для горячего клея Резинка (для изготовления держатель ручки) Ножницы Резак
Шаг 1: создание базы
Начните с создания основы. Шахта имеет ширину 4 шпильки и длину 20 шпилек, после создания одного слоя такой длины я построил вокруг нее границу шириной в одну шпильку, оставив зазор с одной стороны, чтобы оставить место для шагового двигателя, затем добавил кусочки плитки до средней части, где будет бумажная полоска. Использование Lego сделало его очень прочным и легко модифицируемым. Чтобы сделать рулон бумаги, я нарезал полоски бумаги формата A4 шириной 1,2 см (я выбрал эту ширину, потому что она такая же, как у колеса Lego, которое я использовал, вы можете сделать свое колесо больше или меньше, в зависимости от вашего колеса) и склеил их концы вместе. чтобы сформировать одну очень длинную полосу, я обернул ее вокруг колеса.
Шаг 2: сервопривод
Для этого шага вам понадобятся:
- два деревянных дюбеля длиной 4 см
- две пружины длиной 2см
- одну соломинку разрезать на две части по 2 см каждая
- один кусок картона размером 12 на 4 см
- два куска картона размером 4 на 1,5 см
- один кусок картона размером 4 на 2 см
Сначала приклейте дюбели к одной из частей 4 на 1,5, затем вставьте пружины и соломинки в дюбели, затем приклейте другой кусок картона с другой стороны, чтобы все было на месте.
Во-вторых, приклейте кусок размером 4 на 2 см поверх соломинки.
В-третьих, переверните всю деталь и приклейте к ней небольшой дюбель не посередине, а немного левее. (Я забыл добавить маленький дюбель на первой картинке)
Наконец, вырежьте отверстие в большом куске картона размером с переднюю часть серводвигателя и приклейте двигатель, затем приклейте кусок, который мы только что сделали с помощью дюбелей, к большому куску, чтобы при движении сервопривода он толкал небольшой дюбель, который, в свою очередь, толкает пружины вниз.
В итоге я отрезал примерно 3 см от нижней части куска размером 12 на 4 см и приклеил к нему еще два куска размером 4 на 1,5 см, а затем накрыл это куском картона размером 5,5 на 4 см. И чтобы удерживать маркер, я сделал небольшой петлю из эластичной ленты и приклеил ее к небольшому куску картона, затем я приклеил ее к части 4 см на 2 см, которая будет двигаться вниз при запуске сервопривода. Эти дополнения не позволяли маркеру перемещаться из стороны в сторону, когда пружины возвращаются в исходное положение.
Шаг 3: Добавление серводвигателя и рулона бумаги к основанию
Я добавил еще два кирпича к одной стороне основания, чтобы поддержать серво, и приклеил его на место, а затем добавил колесо к дальнему концу основания.
Шаг 4: Сборка рамы шагового двигателя
Этот шаг был немного сложным, потому что двигатель не был идеально приспособлен к Lego. Однако мне удалось это сделать, используя два отверстия в двигателе, чтобы закрепить его на месте. Затем я приклеил колесо Lego к кончику мотора, а затем я положил его рядом с основанием со стороны, которую я оставил открытой на шаге 1.
Шаг 5: завершающие штрихи
Я добавил две части дуги, чтобы покрыть колесо, чтобы зафиксировать бумагу на месте. И я добавил две дуги меньшего размера: одну для удержания проводов шагового двигателя, а другую - для бумаги. Наконец, я заменил колесо шагового двигателя на колесо немного большего размера, которое перемещало бумагу лучше, чем старое колесо.
Шаг 6: Электроника
Наконец, вам нужно подключить моторы к Arduino и загрузить код.
Мы начнем с серводвигателя, подключите коричневый провод (провод заземления) к контакту GND, затем красный провод (провод питания) к контакту 5V и оранжевый провод (сигнальный провод) к Dig # 5. штырь. Затем, шаговый двигатель, подключите 1N1 к Dig # 11, 1N2 к Dig # 10, 1N3 к Dig # 9, 1N4 к Dig # 8, 5V к положительной стороне макета и заземляющий контакт к отрицательной стороне макет. И не забудьте подключить модуль питания к макетной плате, убедившись, что его положительная и отрицательная стороны правильно совмещены с соответствующими сторонами на макетной плате. Если вы забудете это сделать, вы измените силу вашего проекта, а вы не захотите этого делать.
Для кода я написал четыре метода: один для записи точки, один для записи тире и два, чтобы оставить пробел между каждой буквой и каждым словом. Таким образом, я могу просто вызывать эти методы, когда они мне нужны, вместо того, чтобы писать их снова для каждой буквы. Затем я написал цикл for, который просматривает каждую букву текста и записывает его. Внутри я написал оператор if для каждой буквы, но вы можете записать его в операторе switch, если хотите. Конечно, вы можете добавить в код, чтобы программа могла читать числа. Когда вся проводка будет готова, просто скопируйте и вставьте код в свою IDE. Не забудьте установить библиотеки шагового двигателя, сервопривода и строки. После этого все готово.
Как это работает
Когда Arduino запускается, программа смотрит на первую букву текста и, в зависимости от того, какая это буква, вызывает функции, которые записывают ее в азбуке Морзе. Например, когда вызывается точечная функция, серводвигатель устанавливается на 160, который перемещает перо вниз, затем он устанавливается обратно на 90, что позволяет пружинам возвращаться вверх, перемещая перо вместе с ними. И если вызывается функция тире, сервопривод перемещает ручку вниз, затем шаговый двигатель вращает колесо, которое тянет бумагу, заставляя ручку писать тире. И если одна из функций пробела называется, шаговый двигатель вращается, но пером вверх, поэтому он тянет бумагу, оставляя пространство между буквами или словами. Когда это будет сделано, он переходит к следующей букве и повторяет тот же процесс. Я надеюсь тебе это понравится;)
Код
#включают
#include #include #include const int stepsPerRevolution = 150; // Это переменная для шагового двигателя String предложение = "* hello"; // Измените эту переменную, чтобы писать разные слова, но писать только маленькими буквами и начинать слово с "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Серво myServo; // Это метод, который заставляет робота писать точку void dot () {Serial.println ("dot start"); myServo.write (160); задержка (1000); myServo.write (90); задержка (1000); myStepper.step (stepsPerRevolution); задержка (1000); Serial.println («точка сделана»); } // Это метод, который заставляет робота писать тире void dash () {Serial.println ("dash start"); myServo.write (160); задержка (1000); myStepper.step (stepsPerRevolution); задержка (1000); myServo.write (90); задержка (1000); myStepper.step (stepsPerRevolution); задержка (1000); Serial.println ("чертёж готов"); } // Это метод, который заставляет робота оставлять пробел между каждой буквой void space () {Serial.println ("space start"); myServo.write (90); задержка (1000); myStepper.step (200); задержка (1000); Serial.println ("пробел готов"); } // Это метод, который заставляет робота оставлять большее пространство между каждым словом void bigSpace () {myServo.write (90); myStepper.step (250); задержка (1000); } void setup () {// поместите сюда ваш установочный код, чтобы запустить его один раз: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int first = предложение.indexOf ('*'); // цикл for перебирает каждую букву строки, а затем вызывает нужные методы, чтобы записать ее for (int i = 0; i <предложение.length (); i ++) {if (предложение.charAt (first + i) == 'а') {Serial.print (".-"); точка (); бросаться(); Космос(); } иначе, если (предложение.charAt (first + i) == 'b') {Serial.print ("-…"); бросаться(); точка (); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'c') {Serial.print ("-.-."); бросаться(); точка (); бросаться(); точка (); Космос(); } иначе, если (предложение.charAt (first + i) == 'd') {Serial.print ("-.."); бросаться(); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'е') {Serial.print ("."); точка (); Космос(); } иначе, если (предложение.charAt (first + i) == 'f') {Serial.print ("..-."); точка (); точка (); бросаться(); точка (); Космос(); } иначе, если (предложение.charAt (first + i) == 'g') {Serial.print ("-."); бросаться(); бросаться(); точка (); Космос(); } иначе, если (предложение.charAt (first + i) == 'h') {Serial.print ("…."); точка (); точка (); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'я') {Serial.print (".."); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'j') {Serial.print ("---"); точка (); бросаться(); бросаться(); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'k') {Serial.print ("-.-"); бросаться(); точка (); бросаться(); Космос(); } иначе, если (предложение.charAt (first + i) == 'l') {Serial.print (".-.."); точка (); бросаться(); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'м') {Serial.print ("-"); бросаться(); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'п') {Serial.print ("-."); бросаться(); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'о') {Serial.print ("---"); бросаться(); бросаться(); бросаться(); Космос(); } иначе, если (предложение.charAt (first + i) == 'p') {Serial.print ("-."); точка (); бросаться(); бросаться(); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'q') {Serial.print ("--.-"); бросаться(); бросаться(); точка (); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'г') {Serial.print (".-."); точка (); бросаться(); точка (); Космос(); } иначе, если (предложение.charAt (first + i) == 's') {Serial.print ("…"); точка (); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == 'т') {Serial.print ("-"); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'и') {Serial.print ("..-"); точка (); точка (); бросаться(); Космос(); } иначе, если (предложение.charAt (first + i) == 'v') {Serial.print ("… -"); точка (); точка (); точка (); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'ш') {Serial.print ("-"); точка (); бросаться(); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'x') {Serial.print ("-..-"); бросаться(); точка (); точка (); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'y') {Serial.print ("-.--"); бросаться(); точка (); бросаться(); бросаться(); Космос(); } иначе, если (предложение.charAt (первый + я) == 'z') {Serial.print ("-.."); бросаться(); бросаться(); точка (); точка (); Космос(); } иначе, если (предложение.charAt (первый + я) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Здесь ничего не пишите}
Шаг 7. Устранение неполадок
Колесо не движется
Возможно, между колесом и бумагой слишком сильное трение, попробуйте немного приподнять колесо или поменять его.
Колесо тянет бумагу, но затем продолжает вращаться, не вытягивая бумагу
Убедитесь, что вы приклеили колесо в центре шагового двигателя.
Точки и тире соединены
Проверьте, правильно ли написаны функции точки, тире и пробела, они должны быть такими:
// Это метод, который заставляет робота писать dotvoid dot () {Serial.println ("dot start"); myServo.write (160); задержка (1000); myServo.write (90); задержка (1000); myStepper.step (stepsPerRevolution); задержка (1000); Serial.println («точка сделана»); }
// Это метод, который заставляет робота писать прочерк
void dash () {Serial.println ("начало тире"); myServo.write (160); задержка (1000); myStepper.step (stepsPerRevolution); задержка (1000); myServo.write (90); задержка (1000); myStepper.step (stepsPerRevolution); задержка (1000); Serial.println ("чертёж готов"); }
// Это метод, который заставляет робота оставлять пробел между каждой буквой
void space () {Serial.println ("начало пробела"); myServo.write (90); задержка (1000); myStepper.step (200); задержка (1000); Serial.println ("пробел готов"); }
Рекомендуемые:
Как сделать переводчик кода Морзе с помощью Arduino: 10 шагов
Как сделать переводчик азбуки Морзе с помощью Arduino: обзор Закодированное общение, помимо увлекательности, имеет множество приложений в различных областях. Одним из наиболее распространенных методов передачи кода является азбука Морзе. В этом руководстве вы узнаете, как настроить переводчик для отправки и повторного
Преобразование кода Морзе в текст с помощью Arduino: 5 шагов
Код Морзе в текст с использованием Arduino: IDEA Описание Мы все общаемся друг с другом через наши естественные сенсоры (язык, жесты и т. Д.). Захватывающая часть начинается, когда вы хотите поделиться с кем-то секретной информацией. Вопрос в том, как это сделать? Итак, ответ заключается в том, как вы передаете
Передатчик кода Морзе Arduino: 11 шагов
Передатчик кода Морзе Arduino: в этом руководстве вы будете использовать Arduino Uno для создания передатчика кода Морзе и использовать монитор последовательного порта для чтения переданных сообщений. Детали, которые вам понадобятся: Arduino Uno, макет, кнопки, перемычки, провода, перемычки
Простой писатель Брайля (речь для Брайля): 8 шагов (с изображениями)
Simple Braille Writer (Speech to Braille): Привет всем, все это началось с создания простого XY плоттера после его успешного завершения, я подумал разработать простой конвертер речи в текст Брайля. Я начал искать его в Интернете, и неожиданно цены были слишком высоки , это воодушевило меня
Сенсорный манипулятор / автокодер кода Морзе: 12 шагов (с изображениями)
Сенсорный манипулятор / автокодировщик кода Морзе: я действительно создал этот проект некоторое время назад, но подумал, что кто-нибудь сможет использовать эту идею. Я любитель радиолюбителей и начал заниматься этим немного поздно, когда вышел на пенсию и у меня было время. Теперь у меня есть общая лицензия, и я пользуюсь телефоном (vo