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

Контроллер джойстика для робота MeArm - запись координат

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

Arduino UNO
× 1
Аналоговый джойстик (общий)
× 2
Резистор 10 кОм
× 2
Резистор 680 Ом
× 1
5 мм светодиод:красный
× 1
Микро сервопривод SG90
× 4

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

IDE Arduino

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

Контроллер джойстика Arduino Uno для манипулятора (MeArm®) с записью координат. Позволяет повторять записанные координаты один раз при нажатии кнопки или несколько раз. Использует базовую плату Arduino Uno без дополнительных плат. Требуется USB-подключение (2 А) или источник питания 6 В / 2 А. Протестировано с использованием четырех сервоприводов SG90.

Нажмите кнопку на джойстике1, чтобы начать запись координат. Нажмите кнопку на джойстике1, чтобы завершить запись координат.

Нажмите кнопку на джойстике2, чтобы начать воспроизведение записанных координат. Нажмите кнопку на джойстике2, чтобы остановить воспроизведение записанных координат. Удерживайте кнопку на джойстике2, чтобы начать автоматическое воспроизведение записанных координат в цикле.

Напоминание:Мы также сделали более простую версию этого программного обеспечения, не требующую дополнительных резисторов и светодиодных диодов:MeArm Robot - Запись координат (минимизированная версия)

Если у вас есть плата джойстика MeArm, вот версия для вас:MeArm 1.6.1 Робот-джойстик Запись движений (IR)

Код

  • Джойстик-контроллер Arduiono для робота MeArm® с записью координат. (версия 1.3.1)
Arduiono Джойстик-контроллер для робота MeArm® с записью координат. (версия 1.3.1) Arduino
Используйте Arduino IDE для программирования базовой платы Arduiono UNO через порт USB.
 / * Аналоговые джойстики meArm версии 1.3.1 - UtilStudio.com, декабрь 2018 г. Используются два аналоговых джойстика и четыре сервопривода. В версии 1.3 улучшена запись координат. Устранены некоторые ошибки. Первый джойстик перемещает захват вперед, назад, влево и вправо, кнопки запуска / остановки записи. Второй джойстик перемещает захват вверх, вниз, закрывается и открывается, кнопка запускает / останавливает воспроизведение записанных позиций. Нажмите кнопку в течение 2 секунд для автозапуска. Контакты:Arduino Stick1 Stick2 Base Shoulder Elbow Gripper Record / GND GND GND Коричневый Коричневый Коричневый Коричневый Коричневый Автозапуск 5V VCC VCC Красный Красный Красный Красный LED A0 HOR A1 VER PD2 BUTT A2 HOR A3 VER PD3 BUTT 11 Желтый 10 Желтый 9 Желтый 6 Желтый PD4 X * / # include  bool RepeatePlaying =false; / * Многократно выполняется записанный цикл * / int delayBetweenCycles =2000; / * Задержка между циклами * / int basePin =11; / * Базовый сервопривод * / int плечоPin =10; / * Сервопривод плеча * / int elbowPin =9; / * Сервопривод колена * / int gripperPin =6; / * Сервопривод захвата * / int xdirPin =0; / * База - джойстик1 * / int ydirPin =1; / * Плечо - джойстик1 * / int zdirPin =3; / * Локоть - джойстик2 * / int gdirPin =2; / * Захват - джойстик2 * /// int pinRecord =A4; / * Запись кнопки - обратная совместимость * /// int pinPlay =A5; / * Воспроизведение по кнопке - обратная совместимость * / int pinRecord =PD2; / * Запись кнопки - рекомендуется (A4 устарел, будет использоваться для дополнительного джойстика) * / int pinPlay =PD3; / * Кнопочное воспроизведение - рекомендуется (A5 не рекомендуется, будет использоваться для дополнительного джойстика) * / int pinLedRecord =PD4; / * Светодиод - указывает режим записи (светится) или автоматического воспроизведения (мигает один) * / bool useInternalPullUpResistors =false; const int buffSize =512; / * Размер буфера записи * / int startBase =90; int startShoulder =90; int startElbow =90; int startGripper =0; int posBase =90; int posShoulder =90; int posElbow =90; int posGripper =0; int lastBase =90; int lastShoulder =90; int lastElbow =90; int lastGripper =90; int minBase =0; int maxBase =150; int minShoulder =0; int maxShoulder =150; int minElbow =0; int maxElbow =150; int minGripper =0; int maxGripper =150; const int countServo =4; int buff [buffSize]; int buffAdd [countServo]; int recPos =0; int playPos =0; int buttonRecord =HIGH; int buttonPlay =HIGH; int buttonRecordLast =LOW; int buttonPlayLast =LOW; bool record =false; bool play =false; bool debug =false; String command ="Manual"; int printPos =0; int buttonPlayDelay =20; int buttonPlayCount =0; bool ledLight =false; Servo servoBase; Servo servoShoulder; Servo servoElbow; Servo servoGripper; пустая настройка () {Serial.begin (9600); если (useInternalPullUpResistors) {pinMode (pinRecord, INPUT_PULLUP); pinMode (pinPlay, INPUT_PULLUP); } еще {pinMode (pinRecord, INPUT); pinMode (pinPlay, ВХОД); } pinMode (xdirPin, INPUT); pinMode (ydirPin, ВХОД); pinMode (zdirPin, ВХОД); pinMode (gdirPin, ВХОД); pinMode (pinLedRecord, ВЫХОД); servoBase.attach (basePin); servoShoulder.attach (плечоPin); servoElbow.attach (elbowPin); servoGripper.attach (gripperPin); StartPosition (); digitalWrite (pinLedRecord, HIGH); задержка (1000); digitalWrite (pinLedRecord, LOW);} недействительный цикл () {buttonRecord =digitalRead (pinRecord); buttonPlay =digitalRead (pinPlay); // Serial.print (buttonRecord); // Serial.print ("\ t"); // Serial.println (buttonPlay); // в целях тестирования if (buttonPlay ==LOW) {buttonPlayCount ++; если (buttonPlayCount> =buttonPlayDelay) {RepeatePlaying =true; }} еще buttonPlayCount =0; если (buttonPlay! =buttonPlayLast) {если (запись) {запись =ложь; } если (buttonPlay ==LOW) {play =! play; RepeatePlaying =false; если (играть) {StartPosition (); }}} if (buttonRecord! =buttonRecordLast) {if (buttonRecord ==LOW) {запись =! запись; если (запись) {воспроизведение =ложь; RepeatePlaying =false; recPos =0; } else {если (отладка) PrintBuffer (); }}} buttonPlayLast =buttonPlay; buttonRecordLast =buttonRecord; float dx =map (analogRead (xdirPin), 0, 1023, -5.0, 5.0); float dy =map (analogRead (ydirPin), 0, 1023, 5.0, -5.0); float dz =map (analogRead (zdirPin), 0, 1023, 5.0, -5.0); float dg =map (analogRead (gdirPin), 0, 1023, 5.0, -5.0); если (abs (dx) <1.5) dx =0; если (abs (dy) <1,5) dy =0; если (abs (dz) <1,5) dz =0; если (abs (dg) <1.5) dg =0; posBase + =dx; posShoulder + =dy; posElbow + =dz; posGripper + =dg; если (играть) {если (playPos> =recPos) {playPos =0; если (RepeatePlaying) {задержка (delayBetweenCycles); StartPosition (); } else {play =false; }} bool endOfData =false; while (! endOfData) {если (playPos> =buffSize - 1) перерыв; если (playPos> =recPos) перерыв; int data =бафф [playPos]; int угол =данные &0xFFF; int servoNumber =данные &0x3000; endOfData =данные &0x4000; переключатель (servoNumber) {case 0x0000:posBase =angle; ломать; case 0x1000:posShoulder =angle; ломать; case 0x2000:posElbow =angle; ломать; case 0x3000:posGripper =angle; dg =posGripper - lastGripper; ломать; } playPos ++; }} если (posBase> maxBase) posBase =maxBase; если (posShoulder> maxShoulder) posShoulder =maxShoulder; если (posElbow> maxElbow) posElbow =maxElbow; если (posGripper> maxGripper) posGripper =maxGripper; если (posBase  0) {posGripper =maxGripper; waitGripper =true; } servoGripper.write (posGripper); если (играть &&waitGripper) {задержка (1000); } if ((lastBase! =posBase) | (lastShoulder! =posShoulder) | (lastElbow! =posElbow) | (lastGripper! =posGripper)) {if (record) {if (recPos  

Схема

Контроллер джойстика для робота MeArm ® с записью координат - принципиальная схема Тестирование платы только с двумя подключенными сервоприводами. См. Принципиальную схему для подключения 4 серводвигателей.

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

  1. Игровой контроллер Arduino
  2. Рука робота MeArm - Ваш робот - V1.0
  3. Радиоуправляемая машина с джойстиком
  4. Робот-последователь линии
  5. Простой калькулятор UNO
  6. Робот, управляемый речью
  7. Постоянство видения
  8. Джойстик Arduino
  9. Контроллер тестера Arduino DMX-512
  10. Робот для супер-крутой навигации внутри помещений