Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Как построить Саурона, повелителя роботов

Компоненты и расходные материалы

Arduino Mega 2560
× 1
1Sheeld
× 1
Android-устройство
× 1

Необходимые инструменты и машины

Лазерный резак (универсальный)

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Вы поклонник сериала «Властелин колец»? Если да, то вы точно знаете «Саурон»!

В этом проекте мы построим полугуманоидного робота человеческого размера, похожего на Саурона :)

Робот имеет две руки с 3 степенями свободы, голову с 3 степенями свободы и фиксированное основание. Робот Саурон может работать в трех режимах, и вы можете переключаться между ними с помощью двух кнопок, прикрепленных к двум контактам цифрового входа:

1. Режим ожидания Этот режим для демонстрации корпуса робота в любом случае. Робот выполняет последовательность движений для привлечения посетителей.

2. Режим геймпада В этом режиме участники мероприятия могут управлять роботом с помощью экрана геймпада из приложения 1Sheeld.

3. Имитационный режим В этом режиме робот может имитировать движения участников мероприятия, как ребенок в Real Steal Movie. Таким образом, вы будете носить перчатки с закрепленным на нем смартфоном, и Arduino будет считывать значения датчиков вашего смартфона, такие как ориентация и гироскоп, а затем использовать эти значения для управления руками робота.

Я создал этот проект для участия в New York Maker Faire, чтобы сделать детей счастливыми и вдохновить их использовать современные технологии, особенно развивающие платформы, такие как Arduino и 1Sheeld, для создания своих персонажей из фильмов, таких как ATOM в фильме Real Steal или Саурон из Властелина колец. сериал. Я включил все необходимые файлы (чертежи САПР, схемы и макеты цепей, коды Arduino и файлы dxf для лазерного резака), чтобы помочь любому создать свой собственный Саурон :)

Приступим к созданию Lord Of The Robots.

Шаг 1. Создание головы робота

Чтобы сэкономить время и силы, я решил не изобретать велосипед, поэтому вместо разработки новой роботизированной головы я использовал эту фантастическую роботизированную голову с открытым исходным кодом «Fritz» от xyzbot. Я загружаю их файлы для лазерной резки, затем я использовал лазерный резак в соседнем производственном пространстве, чтобы вырезать части головы. В моем случае я попытался сократить время и стоимость, поэтому я пропустил 3D-печать частей глаз, затем я пропустил губы и брови. .

Я использовал лист фанеры толщиной 3 мм для изготовления частей головы. После резки этих частей с помощью лазерного резака, следуйте прилагаемому видео, чтобы собрать комплект, но позаботьтесь о следующих моментах:

1. Вы пропустите сборку базы.

2. Вы пропустите все шаги, связанные с 3D-печатью частей глаз.

3. Вы пропустите все шаги, связанные с бровями и губами.

Open_Source_Files.zip FFRDB2LIKJ8MS1G.dxf

Шаг 2. Создание тела робота

Как обычно, я делаю свои проекты портативными, чтобы их можно было легко собрать за короткое время, если я поеду с ним на такое мероприятие, как Maker Faire, поэтому я построил тело робота, используя стержни Artelon и 3-миллиметровые листы фанеры.

Я использовал Tongue and Groove Joints, чтобы зафиксировать грудь с плечами, шеей и спиной. Затем я использовал винты 4 мм x 20 мм, чтобы закрепить деревянную раму с каркасом Artelon и винт 12 мм x 30 мм, чтобы прикрепить каркас Artelon к основанию робота. Я использовал винт 4 мм x 10 мм, чтобы закрепить серводвигатели с деревянной рамой. Каркас Artelon состоит из 5 частей:

1. Базовый стержень изготовлен из 50-миллиметрового прутка Artelon.

2. Скелет изготовлен из стержня Artelon 25 мм.

3. Ширина стержней -> робот имеет 3 части для фиксации груди со спиной с помощью каркаса Artelon, эти части сделаны из стержня Artelon 15 мм.

Вы можете проверить прилагаемые чертежи для получения дополнительной информации об изготовлении всех этих деталей.

F7DSZV7IKMXH73S.pdf FI5J5H6IKMXH73X.pdf FYPCBU7IKMXH748.pdf FXN90VDIKMXH75Z.pdf F3LCJDQIKMXH763.pdf FZ2QN61IKMXH769.pdf FA2UEZBIKMXH90J.zip

Шаг 3. Создание базы робота

  • Я использовал Solidworks для создания этой базы, чтобы прикрепить робота к моему столу, вы можете использовать три винта, чтобы прикрепить его к столу, или вы можете использовать два 4-дюймовых C-образных зажима.
  • Для изготовления этой основы я использовал лист толщиной 6 мм и сделал эти отверстия, чтобы уменьшить ее вес.
  • Я использовал винт 12 мм x 30 мм, чтобы закрепить основание с каркасом Artelon.
  • Вы можете использовать прикрепленный файл .dxf для реализации своего.
FMZODFWIKMXHHIV.dxf

Шаг 4. Создание рук робота

Руки робота были самой сложной задачей в этом проекте. Я хотел, чтобы они были модульными, чтобы их можно было легко собирать и разбирать, чтобы я мог путешествовать с роботом в США.

Я хотел, чтобы эти руки были общего назначения, и я мог легко их модифицировать. Если бы я хотел, чтобы этот робот был пиратом, я мог бы использовать меч и крюк, и если бы я хотел, чтобы робот был боксером, как Атом в фильме «Настоящая кража», я могу добавить два кулака и два захвата, чтобы сделать его универсальным. робот, поэтому я сконструировал сустав предплечья для этой цели.

Я использовал 3-миллиметровые фанерные листы для изготовления рамы руки и алюминиевого поворотного механизма для плечевых суставов, затем я использовал листы бальзы, чтобы разрезать оружие, меч и крюк.

Я использовал Solidworks для расчета требуемого крутящего момента, и в результате мне нужно было использовать серводвигатели 3 кг / см, но я использовал более крупные двигатели, чтобы робот мог что-то поднять. суставы Я использовал Autodesk 123D Make, чтобы разделить их на ряды срезов, а затем вырезал их с помощью лазерного резака.

Я прикрепил конструкцию роботизированной руки к Solidworks, чтобы вы могли внести изменения и рассчитать крутящий момент.

Шаг 5:косплей шлема и доспехов Саурона

До сих пор робот выглядит как АТОМ из настоящего фильма «Кража», пусть АТОМ будет Сауроном:D

Мой друг Карим помог мне воплотить в жизнь косплей. Мы следовали этим фантастическим инструкциям по созданию шлема и брони робота, но я немного изменил их, чтобы они соответствовали размерам робота.

http://www.instructables.com/id/Sauron-Cosplay/

http://www.instructables.com/id/Sauron-Cosplay-Hel ...

Если у вас есть какие-либо вопросы по поводу косплея, вы можете задать ему через его страницу в FB

Спасибо Нейту Спейсу.

Шаг 6. Электроника робота

1. Я использовал Arduino Mega с 1Sheeld для управления сервомоторами рук и головы робота.

2. Я использовал источник питания 5 В / 5 А для питания двигателей и Arduino.

3. Я использовал небольшую макетную плату для соединения всех двигателей Vcc и GND вместе с источником питания

4. Я использовал 1Sheeld для управления роботом с помощью своего смартфона. 1Sheeld - это платформа быстрого прототипирования для Arduino, которая позволяет вам использовать датчики и возможности вашего смартфона и использовать их в ваших проектах Arduino. По сути, это аппаратный щит, который находится поверх вашей платы Arduino и связывается через Bluetooth с этим приложением Android для передачи данных между ним и вашим смартфоном.

Мобильное приложение 1Sheeld имеет длинный список экранов, из этого списка следует выбрать экран геймпада, экран ориентации, экран музыкального проигрывателя, экран терминала и кнопку переключения.

1. Экран геймпада который представляет собой графический интерфейс на моем смартфоне, который имеет несколько кнопок, таких как джойстик PlayStation, и подключен к Arduino через Bluetooth, и я использовал его для ручного управления сервомоторами. Когда вы нажимаете любую кнопку на экране геймпада, приложение отправляет данные в 1Sheeld, а затем Arduino будет управлять серводвигателями рук и головы робота.

2. Экран ориентации :Я ношу перчатки с закрепленным на них смартфоном, затем сопоставляю значения с датчиков смартфона, чтобы отправить их в виде углов на серводвигатели.

3. Защита музыкального проигрывателя . Я использую щит музыкального плеера, чтобы проиграть звуковую дорожку, в которой звучит голос Саурона, когда он двигает ртом вверх и вниз.

4. Кнопка переключения экрана: Я использую этот экран для выбора желаемого режима вместо добавления физических кнопок

5. Клеммный щиток: Я использую этот экран вместо последовательного монитора Arduino IDE, потому что 1Sheeld не может одновременно связываться с ПК и модулем Bluetooth.

Шаг 7. Код Arduino

Шаг 1: Поместите 1Sheeld на плату Arduino, затем подключите Arduino к ноутбуку или ПК.

Шаг 2: Загрузите приложение 1Sheeld на свой смартфон. Приложение доступно в магазине Google Play по адресу http://1sheeld.com/app

.

Шаг 3: Загрузите библиотеку 1Sheeld Загрузите библиотеку OneSheeld на свой компьютер по этой ссылке.

Шаг 4: Извлеките папку, скопируйте ее и вставьте в каталог библиотек Arduino.

Шаг 5: Откройте мой Arduino Sketch (вы найдете его в прикрепленных файлах)

Шаг 6: Загрузите свой набросок

Вот самая важная часть всего руководства, переключите 1Sheeld в режим загрузки (это переключатель с надписью UART Switch на плате), прежде чем загружать свой скетч на плату Arduino, чтобы избежать последовательных конфликтов между 1Sheeld и Arduino, затем нажмите кнопку "Загрузить" в среде IDE.

Режим загрузки включается, когда переключатель UART отводится от логотипа 1Sheeld. После завершения загрузки вам необходимо переключить 1Sheeld обратно в рабочий режим.

Не забывайте! Если вы не переключите переключатель UART обратно в рабочий режим, ваш проект не будет работать должным образом, так как у вас не будет связи между 1Sheeld и платой Arduino. Рабочий режим включается, когда переключатель UART находится ближе всего к логотипу 1Sheeld.

Шаг 7: Использование приложения 1Sheeld Откройте приложение 1Sheeld на своем смартфоне Android. Приложение сначала просканирует через Bluetooth ваш 1Sheeld, это займет несколько секунд, и телефон найдет его. Как только он появится на вашем экране как 1Sheeld #xxxx, вам потребуется ввести код сопряжения (код сопряжения по умолчанию - 1234) и подключиться к 1Sheeld через Bluetooth.

ПРИМЕЧАНИЕ. Если у вас возникли проблемы, убедитесь, что на вашем телефоне Android включен Bluetooth и что телефон Android находится близко к вашему 1Sheeld.

Шаг 8: Выберите Gamepad Shield, Orientation Shield, Music Player Shield и кнопку переключения Shield и Terminal Shield из списка щитов и нажмите на значок нескольких щитов в правом верхнем углу приложения.

Шаг 9: После включения робота он будет работать в режиме ожидания по умолчанию, если вы хотите управлять им вручную с помощью геймпада, откройте экран переключателя и выберите контакт 2, затем нажмите «Вкл.». Если вы хотите вернуться в режим ожидания, нажмите ВЫКЛ.

Шаг 10: Если вы хотите управлять им вручную с помощью датчика ориентации, откройте экран переключателя и выберите контакт 3, затем нажмите «Вкл.». и убедитесь, что состояние контакта 2 - НИЗКИЙ.

F5KJZGXIKMXG3DG.ino

Шаг 8:Саурон в Maker Faire New York

А теперь давайте посмотрим, как Саурон общается с фанатами в Maker Faire New York :)

Шаг 9:Дальнейшая работа

С уважением: Я запишу для себя видео, в котором собираю робота, а затем пробую три режима .

Касательно головы робота: В этой итерации я решил снизить стоимость, поэтому я использовал только 3 мотора в голове. В следующей итерации я добавлю остальные моторы и напечатаю на 3D-принтере части глаз, такие как (веко, скоба для глаз, глаза, шпилька, глазное яблоко оболочка)

Касательно базы робота: Я заменю фиксированную базу на базу робота с 4 механическими колесами, чтобы дать роботу возможность свободно перемещаться. Я закончил проектирование базы в Solidworks, но у меня нет времени объединить ее с роботом.

Код

  • Код Sauron Arduino
Код Sauron Arduino Arduino
 #define CUSTOM_SETTINGS #define INCLUDE_GAMEPAD_SHIELD # define INCLUDE_MUSIC_PLAYER_SHIELD #define INCLUDE_TERMINAL_SHIELD #define INCLUDE_ORIENTATION_SENSOR_SHIELD / * Включить библиотеку 1SHIELD. * / # include  #include  Сервопривод rightArm_Motor1; Сервопривод rightArm_Motor2; Сервопривод rightArm_Motor3; Сервопривод leftArm_Motor1; Сервопривод leftArm_Motor2; Сервопривод leftArm_Motor3; Серво-параметр шеиHorizontal; Servo NeckVertical; int modePin2 =3; volatile int modeState1 =LOW; volatile int modeState2 =LOW; volatile boolean gamepadMode_Enabled =false; volatile boolean imitationMode_Enabled =false; const int ledPin1 =A0; const int ledPin2 =A1; // ------- ----------------------------------- настройка void ------------- -------------------------------------- void setup () {// Начать общение OneSheeld.begin (); // Устанавливаем некоторые выводы в качестве вывода pinMode (modePin1, INPUT); pinMode (modePin2, ВХОД); // Установить светодиод как выход и ВЫСОКИЙ "Глаз Саурона" pinMode (ledPin1, OUTPUT); pinMode (ledPin2, ВЫХОД); digitalWrite (ledPin1, HIGH); digitalWrite (ledPin2, HIGH); // Цифровые выводы, используемые для прерываний при использовании Mega, Mega2560, MegaADK (2, 3, 18, 19, 20, 21) attachInterrupt (digitalPinToInterrupt (modePin1), gampadMode_ChangeISR, CHANGE); attachInterrupt (digitalPinToInterrupt (modePin2), imitationMode_ChangeISR, CHANGE); / * Подключите сигнальные контакты (оранжевый) от двигателей к мега-выводам ШИМ Arduino напрямую, затем запитайте двигатели от источника питания, а НЕ от Arduino, затем подключите оба заземления Arduino и источник питания друг к другу * / rightArm_Motor1.attach (4); rightArm_Motor2.attach (5); rightArm_Motor3.attach (6); leftArm_Motor1.attach (7); leftArm_Motor2.attach (8); leftArm_Motor3.attach (9); NeckHorizontal.attach (10); шейкаVertical.attach (11); рот. прикрепить (12); // исходное положение rightArm_Motor1.write (95); rightArm_Motor2.write (150); rightArm_Motor3.write (20); leftArm_Motor1.write (90); leftArm_Motor2.write (45); leftArm_Motor3.write (180); NeckHorizontal.write (105); NeckVertical.write (30); mouth.write (100);} // ---------------------------------- void loop ---- ----------------------------------------------- пустая петля ( ) {modeState1 =digitalRead (modePin1); modeState2 =digitalRead (modePin2); // Всегда проверять желаемый режим if (modeState1 ==HIGH) {Terminal.println ("Был выбран режим GamePad"); gamePadMode (); } // Вывод 12 =Высокий -> Режим геймпада else if (modeState2 ==HIGH) {Terminal.println ("Был выбран режим имитации"); imitationMode (); } // Вывод 13 =Высокий -> Режим имитации else {Terminal.println ("Режим ожидания был выбран"); Режим ожидания(); }} // цикл void // ----------------------------------------- void Режим ожидания --------------------------------------------- void standbyMode ( ) {// Режим ожидания Terminal.println ("Режим ожидания активирован"); // исходная позиция Terminal.println ("1-я позиция"); rightArm_Motor1.write (95); rightArm_Motor2.write (150); rightArm_Motor3.write (20); leftArm_Motor1.write (90); leftArm_Motor2.write (45); leftArm_Motor3.write (180); NeckHorizontal.write (105); NeckVertical.write (30); // Устанавливаем громкость // MusicPlayer.setVolume (10); MusicPlayer.play (); для (int я =0; я <=19; я ++) {рот.write (100); OneSheeld.delay (150); рот. писать (75); OneSheeld.delay (150); } // для MusicPlayer.pause (); рот. писать (100); OneSheeld.delay (3000); // ------------------------------------------------ ---- // Всегда проверяйте желаемый режим if (gamepadMode_Enabled ==true) {Terminal.println ("Система была прервана и теперь она активирует режим GamePad"); gamePadMode (); } // Контакт 12 =Высокий -> Режим геймпада else if (imitationMode_Enabled ==true) {Terminal.println ("Система была прервана, и теперь она активирует режим имитации"); imitationMode (); } // Вывод 13 =Высокий -> Режим имитации else {// Завершаем оставшуюся часть последовательности // Перемещаем голову на 90 -> 0 -> 180 -> 90 Terminal.println ("2nd position"); rightArm_Motor1.write (95); rightArm_Motor2.write (150); rightArm_Motor3.write (20); leftArm_Motor1.write (90); leftArm_Motor2.write (45); leftArm_Motor3.write (180); NeckHorizontal.write (105); OneSheeld.delay (1500); NeckHorizontal.write (65); OneSheeld.delay (1500); NeckHorizontal.write (140); OneSheeld.delay (1500); NeckHorizontal.write (105); NeckVertical.write (30); // Устанавливаем громкость // MusicPlayer.setVolume (10); MusicPlayer.play (); для (int я =0; я <=19; я ++) {рот.write (100); OneSheeld.delay (150); рот. писать (75); OneSheeld.delay (150); } // для MusicPlayer.pause (); рот. писать (100); OneSheeld.delay (3000); } // else -> завершаем оставшуюся часть последовательности // ----------------------------------- ----------------- // Всегда проверяйте желаемый режим if (gamepadMode_Enabled ==true) {Terminal.println ("Система была прервана и теперь она активирует режим GamePad"); gamePadMode (); } // Контакт 12 =Высокий -> Режим геймпада else if (imitationMode_Enabled ==true) {Terminal.println ("Система была прервана, и теперь она активирует режим имитации"); imitationMode (); } // Pin 13 =High -> Imitation Mode else {// Завершаем оставшуюся часть последовательности // Перемещаем руки и голову на 45 градусов Terminal.println ("3-я позиция"); rightArm_Motor1.write (15); rightArm_Motor2.write (180); rightArm_Motor3.write (0); leftArm_Motor1.write (180); leftArm_Motor2.write (30); leftArm_Motor3.write (145); NeckHorizontal.write (65); NeckVertical.write (30); // Устанавливаем громкость // MusicPlayer.setVolume (10); MusicPlayer.play (); для (int я =0; я <=19; я ++) {рот.write (100); OneSheeld.delay (150); рот. писать (75); OneSheeld.delay (150); } // для MusicPlayer.pause (); рот. писать (100); OneSheeld.delay (3000); } // else -> завершаем оставшуюся часть последовательности // ----------------------------------- -------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence // Move right hand and head to 135 degree Terminal.println("4th position"); rightArm_Motor1.write(15); rightArm_Motor2.write(150); rightArm_Motor3.write(30); leftArm_Motor1.write(180); leftArm_Motor2.write(30); leftArm_Motor3.write(145); neckHorizontal.write(140); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=19; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); OneSheeld.delay(3000); }//else --> complete the rest of the sequence //--------------------------------------------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence // Move head to the center Terminal.println("5th position"); rightArm_Motor1.write(15); rightArm_Motor2.write(150); rightArm_Motor3.write(30); leftArm_Motor1.write(180); leftArm_Motor2.write(30); leftArm_Motor3.write(145); neckHorizontal.write(105); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=19; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); OneSheeld.delay(3000); }//else --> complete the rest of the sequence //---------------------------------------------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence // Move hands up Terminal.println("6th position"); rightArm_Motor1.write(110); rightArm_Motor2.write(0); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(145); neckHorizontal.write(105); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=19; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); OneSheeld.delay(3000); }//else --> complete the rest of the sequence //------------------------------------------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence /* Move hands to sides o -- | -- ^ */ Terminal.println("7th position"); rightArm_Motor1.write(110); rightArm_Motor2.write(80); rightArm_Motor3.write(60); leftArm_Motor1.write(90); leftArm_Motor2.write(115); leftArm_Motor3.write(140); neckHorizontal.write(105); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=19; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); OneSheeld.delay(3000); }//else --> complete the rest of the sequence //--------------------------------------------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence // Strike right hand Terminal.println("8th position"); rightArm_Motor1.write(0); rightArm_Motor2.write(0); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); OneSheeld.delay(500); rightArm_Motor1.write(180); rightArm_Motor2.write(0); rightArm_Motor3.write(45); OneSheeld.delay(1000); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); neckHorizontal.write(105); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=19; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); OneSheeld.delay(3000); }//else --> complete the rest of the sequence //-------------------------------------------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence // Strike left hand Terminal.println("9th position"); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(110); OneSheeld.delay(500); leftArm_Motor1.write(0); leftArm_Motor2.write(180); leftArm_Motor3.write(110); OneSheeld.delay(1000); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); neckHorizontal.write(105); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=19; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); OneSheeld.delay(3000); }//else --> complete the rest of the sequence //----------------------------------------------------- // Always check the desired mode if (gamepadMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate GamePad Mode Now"); gamePadMode(); } //Pin 12 =High --> Gamepad mode else if (imitationMode_Enabled ==true) { Terminal.println("System Was Interrupted And It Will Activate Imitation Mode Now"); imitationMode(); } //Pin 13 =High --> Imitation Mode else { // Complete the rest of the sequence // Play Music Player and move the robot's mouth Terminal.println("Return to the home position"); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); neckHorizontal.write(105); neckVertical.write(30); // Set the volume// MusicPlayer.setVolume(10); MusicPlayer.play(); for (int i =0; i <=49; i++) { mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); }//for MusicPlayer.pause(); mouth.write(100); Terminal.println("Done"); }//else --> complete the rest of the sequence}// void standby mode//----------------------------------------- void Gamepad Mode ---------------------------------------------void gamePadMode() { Terminal.println("Gamepad mode activated"); // Always check the status of gamepad buttons if (GamePad.isUpPressed()) { // Move both hands up Terminal.println("Up is pressed"); rightArm_Motor1.write(110); rightArm_Motor2.write(0); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(145); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Up is pressed if (GamePad.isDownPressed()) { // Move both hands up Terminal.println("Down is pressed"); rightArm_Motor1.write(110); rightArm_Motor2.write(170); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(20); leftArm_Motor3.write(145); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Down is pressed if (GamePad.isRightPressed()) { // Move right hand side Terminal.println("Right is pressed"); rightArm_Motor1.write(110); rightArm_Motor2.write(80); rightArm_Motor3.write(60); leftArm_Motor1.write(90); leftArm_Motor2.write(20); leftArm_Motor3.write(145); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Right is pressed if (GamePad.isLeftPressed()) { // Move left hand side Terminal.println("Left is pressed"); rightArm_Motor1.write(110); rightArm_Motor2.write(170); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(115); leftArm_Motor3.write(140); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Left is pressed if (GamePad.isRedPressed()) { // Combo 1 Terminal.println("Red is pressed"); rightArm_Motor1.write(180); rightArm_Motor2.write(45); rightArm_Motor3.write(100); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(110); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Red is pressed if (GamePad.isOrangePressed()) { // Combo 2 Terminal.println("Orange is pressed"); rightArm_Motor1.write(15); rightArm_Motor2.write(100); rightArm_Motor3.write(0); leftArm_Motor1.write(180); leftArm_Motor2.write(100); leftArm_Motor3.write(180); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Orange is pressed if (GamePad.isGreenPressed()) { // Combo 3 Terminal.println("Green is pressed"); rightArm_Motor1.write(95); rightArm_Motor2.write(45); rightArm_Motor3.write(120); leftArm_Motor1.write(90); leftArm_Motor2.write(135); leftArm_Motor3.write(60); neckHorizontal.write(105); neckVertical.write(10); mouth.write(100); }//Green is pressed if (GamePad.isBluePressed()) { // Combo 4 Terminal.println("Blue is pressed"); rightArm_Motor1.write(90); rightArm_Motor2.write(0); rightArm_Motor3.write(90); leftArm_Motor1.write(180); leftArm_Motor2.write(45); leftArm_Motor3.write(180); neckHorizontal.write(105); neckVertical.write(30); mouth.write(100); }//Blue is pressed}// Gamepad mode//----------------------------------------- void Imitation Mode -------------------------------------------void imitationMode() { // Imitation mode Terminal.println("Imitation mode activated"); if (OrientationSensor.getY()> -90 &&OrientationSensor.getY() <=90) { leftArm_Motor1.write(map(OrientationSensor.getY(), -90, 90, 0, 180)); } if (OrientationSensor.getZ()> -70 &&abs(OrientationSensor.getZ()) <=70) { leftArm_Motor2.write(map(OrientationSensor.getZ(), 0, 60, 100, 160)); leftArm_Motor3.write(map(OrientationSensor.getZ(), 0, 60, 160, 100)); }}// void imitation mode//-----------------------------------------------------------------------------------------------------------//-------------------------------------------- Modes ISR ----------------------------------------------------//-----------------------------------------------------------------------------------------------------------void gampadMode_ChangeISR() { if (gamepadMode_Enabled &&!imitationMode_Enabled) { gamepadMode_Enabled =false; imitationMode_Enabled =false; } else { gamepadMode_Enabled =true; imitationMode_Enabled =false; }}//gampadMode_ChangeISR//------------------------------------------------------------------------------------------------------------void imitationMode_ChangeISR() { if (imitationMode_Enabled &&!gamepadMode_Enabled) { gamepadMode_Enabled =false; imitationMode_Enabled =false; } else { gamepadMode_Enabled =false; imitationMode_Enabled =true; }}//imitationMode_ChangeISR

Схема


Производственный процесс

  1. Как роботы-распылители улучшают согласованность
  2. Как роботы-рисовальщики сокращают количество доработок
  3. Как снизить затраты на переделку в производстве
  4. Какова реальность видения роботов?
  5. Что, черт возьми, такое самопрограммирующийся робот?
  6. Промышленный робот
  7. Как занять роботов
  8. Как создать идеальную команду внедрения ERP
  9. Робот SCARA | Как собрать собственного робота на базе Arduino
  10. Насколько светло будущее автоматизации?