Оглавление:

Писатель кода Морзе для Arduino: 7 шагов (с изображениями)
Писатель кода Морзе для Arduino: 7 шагов (с изображениями)

Видео: Писатель кода Морзе для Arduino: 7 шагов (с изображениями)

Видео: Писатель кода Морзе для Arduino: 7 шагов (с изображениями)
Видео: Лаба 2 АИ196 2024, Июль
Anonim
Image
Image
Писатель кода Морзе для Arduino
Писатель кода Морзе для Arduino

Я сделал робота, который может преобразовать любой заданный текст в азбуку Морзе, а затем записать его !! Он сделан из картона и 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 ("пробел готов"); }

Рекомендуемые: