Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
Группа состоит из 2 инженеров по автоматизации из UCN, которые придумали блестящую идею, которую мы заинтересованы в реализации и развитии. Идея основана на плате Arduino, управляющей роботизированной рукой. Плата Arduino - это мозг операции, а затем исполнительный механизм операции, роботизированная рука, будет делать то, что ей нужно. Более подробное объяснение будет позже.
Шаг 1: оборудование
Рука робота:
Робот-манипулятор Phantomx Pincher Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Программное обеспечение для робота - https://www.arduino.cc/en/Main/OldSoftwareRelease… Камера обнаружения цвета:
Камера CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Программное обеспечение - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Шаг 2: Настройка Arduino
Вы можете увидеть настройку на доске здесь, что очень просто.
Слева находится блок питания.
Средний - для первого сервопривода, который позже подключается к другим сервоприводам, сервопривод за сервоприводом.
Нижний - это то место, где мы управляем платой с ПК или ноутбука, у которого есть USB-вход на другом конце.
Шаг 3: Заключительная программа
||| ПРОГРАММА |||
#включают
#include #include "poses.h" #include // Библиотека Pixy #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; логический IDCheck; boolean RunCheck;
void setup () {pinMode (0, ВЫХОД); ax12SetRegister2 (1, 32, 50); // установить регистр 32 номера соединения 1 на скорость 50. ax12SetRegister2 (2, 32, 50); // установить регистр 32 номера соединения 2 на скорость 50. ax12SetRegister2 (3, 32, 50); // устанавливаем регистр 32 соединения 3 на скорость 50. ax12SetRegister2 (4, 32, 50); // устанавливаем регистр 32 номера соединения 4 на скорость 50. ax12SetRegister2 (5, 32, 100); // устанавливаем регистр номера соединения 5 32 на скорость 100. // инициализируем переменные id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // открываем последовательный порт Serial.begin (9600); задержка (500); Serial.println ("##########################"); Serial.println («Последовательная связь установлена»);
// Проверяем напряжение аккумулятора Lipo CheckVoltage ();
// Сканируем сервоприводы, возвращаем позицию MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }
void loop () {// считываем датчик: int inByte = Serial.read ();
switch (inByte) {
case '1': MovePose1 (); перерыв;
case '2': MovePose2 (); перерыв; case '3': MovePose3 (); перерыв;
case '4': MovePose4 (); перерыв;
case '5': MoveHome (); перерыв; case '6': Grab (); перерыв;
case '7': LEDTest (); перерыв;
case '8': RelaxServos (); перерыв; }}
void CheckVoltage () {// ждем, затем проверяем напряжение (безопасность LiPO) float Voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("##########################"); Serial.print («Системное напряжение:»); Serial.print (напряжение); Serial.println («вольт»); if (Voltage 10.0) {Serial.println («Номинальные уровни напряжения»); } если (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }
void MoveHome () {задержка (100); // рекомендуемая пауза bioloid.loadPose (Home); // загружаем позу из FLASH в буфер nextPose bioloid.readPose (); // считываем текущие позиции сервопривода в буфер curPose Serial.println ("##########################"); Serial.println («Перевод сервоприводов в исходное положение»); Serial.println ("##########################"); задержка (1000); bioloid.interpolateSetup (1000); // настраиваем интерполяцию от текущей до следующей более 1/2 секунды while (bioloid.interpolating> 0) {// делаем это, пока мы не достигли нашей новой позы bioloid.interpolateStep (); // при необходимости перемещаем сервоприводы. задержка (3); } если (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {задержка (100); // рекомендуемая пауза bioloid.loadPose (Pose1); // загружаем позу из FLASH в буфер nextPose bioloid.readPose (); // считываем текущие позиции сервопривода в буфер curPose Serial.println ("##########################"); Serial.println («Перемещение сервоприводов в 1-е положение»); Serial.println ("##########################"); задержка (1000); bioloid.interpolateSetup (1000); // настраиваем интерполяцию от текущей до следующей более 1/2 секунды while (bioloid.interpolating> 0) {// делаем это, пока мы не достигли нашей новой позы bioloid.interpolateStep (); // при необходимости перемещаем сервоприводы. задержка (3); } SetPosition (3, 291); // устанавливаем положение сочленения 3 на «0» delay (100); // ждем, пока сочленение переместится if (RunCheck == 1) {MenuOptions (); }}
void MovePose2 () {задержка (100); // рекомендуемая пауза bioloid.loadPose (Pose2); // загружаем позу из FLASH в буфер nextPose bioloid.readPose (); // считываем текущие позиции сервопривода в буфер curPose Serial.println ("##########################"); Serial.println («Перемещение сервоприводов во вторую позицию»); Serial.println ("##########################"); задержка (1000); bioloid.interpolateSetup (1000); // настраиваем интерполяцию от текущей до следующей более 1/2 секунды while (bioloid.interpolating> 0) {// делаем это, пока мы не достигли нашей новой позы bioloid.interpolateStep (); // при необходимости перемещаем сервоприводы. задержка (3); } SetPosition (3, 291); // устанавливаем положение сочленения 3 на «0» delay (100); // ждем, пока сочленение переместится if (RunCheck == 1) {MenuOptions (); }} недействительным MovePose3 () {задержка (100); // рекомендуемая пауза bioloid.loadPose (Pose3); // загружаем позу из FLASH в буфер nextPose bioloid.readPose (); // считываем текущие позиции сервопривода в буфер curPose Serial.println ("##########################"); Serial.println («Перемещение сервоприводов в 3-ю позицию»); Serial.println ("##########################"); задержка (1000); bioloid.interpolateSetup (1000); // настраиваем интерполяцию от текущей до следующей более 1/2 секунды while (bioloid.interpolating> 0) {// делаем это, пока мы не достигли нашей новой позы bioloid.interpolateStep (); // при необходимости перемещаем сервоприводы. задержка (3); } SetPosition (3, 291); // устанавливаем положение сочленения 3 на «0» delay (100); // ждем, пока сочленение переместится if (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {задержка (100); // рекомендуемая пауза bioloid.loadPose (Pose4); // загружаем позу из FLASH в буфер nextPose bioloid.readPose (); // считываем текущие позиции сервопривода в буфер curPose Serial.println ("##########################"); Serial.println («Перемещение сервоприводов в 4-ю позицию»); Serial.println ("##########################"); задержка (1000); bioloid.interpolateSetup (1000); // настраиваем интерполяцию от текущей до следующей более 1/2 секунды while (bioloid.interpolating> 0) {// делаем это, пока мы не достигли нашей новой позы bioloid.interpolateStep (); // при необходимости перемещаем сервоприводы. задержка (3); } SetPosition (3, 291); // устанавливаем положение сочленения 3 на «0» delay (100); // ждем, пока сочленение переместится if (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("###########################"); Serial.println («Инициализация теста движения знака»); Serial.println ("##########################"); задержка (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Идентификатор движущегося сервопривода:"); Serial.println (id);
в то время как (позиция> = 312) {SetPosition (id, pos); pos = pos--; задержка (10); }
в то время как (позиция <= 512) {SetPosition (id, pos); pos = pos ++; задержка (10); }
// переходим к следующему идентификатору сервопривода id = id ++;
} если (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("###########################"); Serial.println («Пожалуйста, введите опцию 1-5, чтобы снова запустить отдельные тесты.»); Serial.println ("1) 1-я позиция"); Serial.println ("2) 2-я позиция"); Serial.println ("3) 3-я позиция"); Serial.println («4) 4-я позиция»); Serial.println ("5) Исходное положение"); Serial.println («6) Проверить напряжение в системе»); Serial.println («7) Выполнить тест светодиода»); Serial.println ("8) Relax Servos"); Serial.println ("##########################"); }
void RelaxServos () {id = 1; Serial.println ("##########################"); Serial.println («Расслабляющие сервоприводы»); Serial.println ("##########################"); в то время как (id <= SERVOCOUNT) {Relax (id); id = (id ++)% SERVOCOUNT; задержка (50); } если (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("##########################"); Serial.println («Запуск теста светодиодов»); Serial.println ("##########################"); в то время как (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print («Светодиод горит - ID сервопривода:»); Serial.println (id); задержка (3000); ax12SetRegister (id, 25, 0); Serial.print («Светодиод не горит - ID сервопривода:»); Serial.println (id); задержка (3000); id = id ++; } если (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // устанавливаем положение сочленения 1 на '0' delay (100); // ждем, пока сочленение переместится
}
Мы основали нашу программу на программе производителя PincherTest с некоторыми существенными изменениями в позиционировании. Мы использовали poses.h, чтобы робот сохранял позиции в памяти. Сначала мы попытались сделать нашу игровую руку с Pixycam автоматической, но из-за проблем со светом и маленьким экраном этого не произошло. Робот имеет базовое исходное положение, после загрузки программы он проверит все сервоприводы, найденные в роботе. Мы установили позы для кнопок 1-4, так что их будет легко запомнить. Не стесняйтесь пользоваться программой.
Шаг 4. Видеогид
Шаг 5: Заключение
В заключение хочу сказать, что робот - это для нас забавный маленький проект, в котором можно поиграть и поэкспериментировать. Я рекомендую вам попробовать и настроить его.
Рекомендуемые:
Пи-азер лазерное пианино: 9 шагов
Пи-азер лазерное пианино: Привет, я студент. Мультимедиа & Creative Technology в Howest Belgium. Вы всегда хотели заниматься музыкой, но не так, как все? Тогда это может быть что-то для вас! Я сделал пианино из лазеров. Вам просто нужно положить пальцы выше
Простое пианино Arduino: 8 шагов
Простое пианино Arduino: сегодня мы создадим простое однооктавное пианино Arduino, которое может стать отличной отправной точкой для других проектов. Этот проект представит основные компоненты Arduino и программирование на уровне средней школы. Пока код готовится индивидуально c
Простой робот-пес (сделанный из клавиш пианино, игрушечного пистолета и мыши): 20 шагов (с изображениями)
Простой робот-пес (сделанный из клавиш пианино, игрушечного пистолета и мышки): Ах, Азербайджан! Страна огня, гостеприимство, дружелюбные люди и красивые женщины (… прости, женщина! Конечно, я смотрю только на тебя, моя жена gözəl balaca ana ördəkburun!). Но, честно говоря, это очень трудное место для мейкера, особенно когда у
Воздушное пианино с ИК-датчиком приближения, динамиком и Arduino Uno (обновлено / часть 2): 6 шагов
Воздушное пианино с ИК-датчиком приближения, динамиком и Arduino Uno (обновлено / часть 2): это обновленная версия предыдущего проекта воздушного фортепиано?. Здесь я использую динамик JBL в качестве выхода. Я также добавил сенсорную кнопку для изменения режимов в соответствии с требованиями. Например, режим Hard Bass, Normal, High fr
Балансировочный робот / 3-колесный робот / STEM-робот: 8 шагов
Робот-балансировщик / 3-колесный робот / STEM-робот: мы создали комбинированный балансировочный и 3-колесный робот для использования в учебных заведениях и после школьных образовательных программ. Робот основан на Arduino Uno, специальном щите (предоставлены все детали конструкции), литиево-ионном аккумуляторном блоке (все стро