Добрый день господа ! нужна помощь профессионала в ардуино. была идея собрать робота промоутера на основе ардуино. сталкиваюсь с этим впервые (и программированием тоже) так что прошу за ранее не судить) программировал сам как мог скорее всего не правильно.. робота собрал . работает только через раз.. дальше разобраться не могу нужна помощь видео объясню конструкцию разделен на две части верх и низ. управляются от трех ардуино верх от двух одна на поворот вторая на контейнер с визитками низ от другой низ (работает нормально) : arduino uno 3 датчика движения лево право сзади https://amperka.ru/product/infrared-motion-sensor 2 датчика линии https://amperka.ru/product/digital-line-sensor ИК датчик препятствиий https://amperka.ru/product/infrared-sensor-switch Motor Shield + два мотора. https://amperka.ru/product/arduino-motor-shield // Моторы подключаются к клеммам M1+,M1-,M2+,M2- // Motor shield использует четыре контакта 6,5,7,4 для управления моторами //правй левый датчики движения,ик ддатчики. сигнал блокировки движения от верха // //ик датчик препятсвий #define DIR_RIGHT_SIDE 4 #define SPEED_RIGHT_SIDE 5 #define SPEED_LEFT_SIDE 6 #define DIR_LEFT_SIDE 7 #define LEFT_IK_PIN 9 #define RIGHT_IK_PIN 8 #define LEFT_DD_PIN 10 #define RIGHT_DD_PIN 11 #define RELE 12 #define DP 13 //датчик препятсвий int val1=0; int val2=0; int val3=0; int val4=0; int val5=0; int val6=0; void goLeft (int speed, bool reverseLeft)//присваиваем свойства левому мотору (скорость.направление) { analogWrite(SPEED_LEFT_SIDE, speed); digitalWrite(DIR_LEFT_SIDE, reverseLeft ? LOW : HIGH); } void goRight (int speed, bool reverseRight)//присваиваем свойства правому мотору (скорость.направление) { analogWrite(SPEED_RIGHT_SIDE, speed); digitalWrite(DIR_RIGHT_SIDE, reverseRight ? LOW : HIGH); } void setup() { // Настраивает выводы платы 4,5,6,7 на вывод сигналов for(int i = 4; i <= 7; i++) pinMode(i, OUTPUT); pinMode(LEFT_DD_PIN,INPUT); pinMode(RIGHT_DD_PIN,INPUT); pinMode(LEFT_IK_PIN,INPUT); pinMode(RIGHT_IK_PIN,INPUT); pinMode(RELE,INPUT); pinMode(DP,INPUT); } void loop() { val2=digitalRead(RIGHT_IK_PIN);//считывание сигнала с датчика val1=digitalRead(LEFT_IK_PIN);//считывание сигнала с датчика val3=digitalRead(LEFT_DD_PIN);//считывание сигнала с датчика val4=digitalRead(RIGHT_DD_PIN);//считывание сигнала с датчика val5=digitalRead(RELE);//считывание сигнала с датчика val6=digitalRead(DP);// считывание сигнал с датчика препятствий if(val6==HIGH)//если есть сигнал с датчика препятствиий { goRight(200,false);// то правый назад goLeft (200,false);// то левый назад delay(500); }else if(val5==HIGH)//если есть сигнал от верха { goRight(0,true);// то правый стоп goLeft (0,true);// то левый стоп }else{ if((val1==LOW))// если есть сиггнал c IK датчиков {goRight (200,false);// то левый назад delay(500); }else if ((val2==LOW))// если есть сиггнал c IK датчиков {goLeft(200,false);// то правый назад delay(500); }else{ if(val3==HIGH)// если есть сиггнал c DD пр {goLeft (200,true);// то левый вперед delay(0); }else if(val4==HIGH)//если есть сигнал с DD лев {goRight(200,true);// то правый вперед delay(0); }else{ goRight(0,true);// то правый стоп goLeft (0,true);// то левый стоп } } } } верх контейнер с визитками( работамет нормально) arduino uno 2 датчика линии https://amperka.ru/product/digital-line-sensor сервомотор. //http://cxem.net/arduino/arduino4.php //управление контейнеом с визитками // 1 серво , 2 ик датчика, сигнал блокировки при отсутствии визиток #include <Servo.h> #define IK_PIN1 1//датчик наличия визиток в контейнере #define IK_PIN2 2//датчик наличия визиток для захвата #define RELE 3//сигнал откл Servo servoZ; // Обьект Servo int val1=0; int val2=0; void setup() { servoZ.attach(4); // Servo присоединен к 3 выводу pinMode(IK_PIN1,INPUT); pinMode(IK_PIN2,INPUT); pinMode(RELE,OUTPUT); } void loop() { val1=digitalRead(IK_PIN1);//считывание сигнала с датчика val2=digitalRead(IK_PIN2);//считывание сигнала с датчика if(val1==LOW)//если закончились визитки в контейнере {digitalWrite(RELE,HIGH);//вкл сигнал блокировки руки servoZ.write(91);//серво стоп delay(100);// servoZ.write(92);// delay(100);// }else{// если есть визитки в контейнере то... if(val2==LOW)//если нет визитки для захвата то... {servoZ.write(100); // Повернуть серво влево delay(0); // Пауза 0 сек. }else if (val2==HIGH)// если есть визитка ддля захвата то.. {servoZ.write(91);//серво стоп delay(100);// servoZ.write(92);// delay(100);// } } } верх поворотная часть с рукой (рабоет через раз) непонятные проблемы ..при полностью заряженном аккамуляторе 12v тупит и греется при подъсаженом работает нормально. при малом вольтаже 6в работает как тормоз ))) аккамулятор садит быстро думал развести питание с помощью Power Shield https://amperka.ru/product/arduino-power-shield все равно все греется. arduino uno 4 датчика движения лево, перед ,право, верх https://amperka.ru/product/infrared-motion-sensor 1 датчика линии https://amperka.ru/product/digital-line-sensor 2 сервомотора Power Shield https://amperka.ru/product/arduino-power-shield Music Shield v2 https://amperka.ru/product/arduino-music-shield (в цепи но не подключена) //правый левый верхний датчики движения , визитка рука контейнер, сигнал на блокиировку нижней части #define LEFT_DD_PIN 2//левый датчик движжения #define RIGHT_DD_PIN 3//правый датчик движения #define FRONT_DD_PIN 4//передниий датчик движения #define UP_DD_PIN 5//верхний датчик движкения #define IK_PIN_RUKA 6//ик рука #define RELE_IN 7// сигнал блокировки с контейнера визиток #define RELE_OUT 8// ик визитки #include <Servo.h> //настройки серво Servo servoY;// имя серво Y Servo servoX;// имя серво X int val1=0;// начальной состояние входных контактов от датчик движения лев int val2=0;// начальное состояние входного коетакта от датчика движения прав int val3=0;//сотоячние переднего dd int val4=0;//начальное состояние входного контакта отдатчика движения верх int val5=0;//рука int val6=0;//реле вход void setup() { pinMode(LEFT_DD_PIN,INPUT); pinMode(RIGHT_DD_PIN,INPUT); pinMode(FRONT_DD_PIN,INPUT); pinMode(UP_DD_PIN,INPUT); pinMode(IK_PIN_RUKA ,INPUT); pinMode(RELE_IN,INPUT); pinMode(RELE_OUT,OUTPUT); servoY.attach(0);//выходы серво Y servoX.attach(1);//выходы серво X } void loop() { val1=digitalRead(LEFT_DD_PIN);//считывание сигнала с датчика движ лев val2=digitalRead(RIGHT_DD_PIN);//считывание сигнала с датчика движ прав val3=digitalRead(FRONT_DD_PIN);//считывание сигнала с датчика перед val4=digitalRead(UP_DD_PIN);//считывание сигнала с датчика движ верх val5=digitalRead(IK_PIN_RUKA);//считывание сигнала с датчика рука val6=digitalRead(RELE_IN);//считывание сигнала блокировки digitalWrite(RELE_OUT,LOW);//выкл блокировка низ if(val6==LOW)//еcли есть сигнал что нет визиток в контейнере { if (val5==HIGH)//еслии есть сигнал с ик датчика на руке { if(val4==HIGH)// если есть сигнал с верхнего датчика двиижения {servoX.write(0);// то рука вверх digitalWrite(RELE_OUT,HIGH);//выкл реле delay(0);//задержка при вкл на 1 сек return; }else{ if ((val3==HIGH))// если есть сигнал с переднего DD {servoY.write(90);// то серво Y на (90) servoX.write(90); digitalWrite(RELE_OUT,HIGH);//вкл реле delay(0);//задержка при вкл на 1 сек }else if ((val2==HIGH))// если ечть сигнал с правого ДД и ЗД {servoY.write(180);// то серво Y Нна право (180) servoX.write(90); digitalWrite(RELE_OUT,HIGH);//вкл реле delay(0); // задержка 1 сек }else if ((val1==HIGH))// если есть сигнал с левого ДД И ЗД {servoY.write(0);// то серво Y на лево (0) servoX.write(90); digitalWrite(RELE_OUT,HIGH);//вкл реле delay(0);//задержка при вкл на 1 сек } } }else{//если нет сигналда на руке servoY.write(90);// то серво Y на лево (0) servoX.write(130); delay (200); servoX.write(90); delay (200); } }else{// танцует servoY.write(90);// повернутся вперед servoX.write(0);// то рука вверх delay(500);//задержка при вкл на 0,5 сек servoX.write(10);// то рука вверх delay(500);//задержка при вкл на 0,5 сек } }
проверяйте цепи питания у проблемной части, считайте потребляемые мощности серв и моторов, внимательно проверьте все что воткнуто в разьемы vin, +5v, aref
я понял что проблема в серво... может ли быть проблема что они слишком мощные для ардуино? какие максимально мощные можно ставить хочется поставить аккамулятор помощнее , что бы обеспечить длительную стабильнную работу 2-4 часа думал что (Power shild ) решит проблему. все начитнает стабильно работать когда подсаживается аккамулятор.
вы ведь не привели никаких схем, скажем так в моем хрустальном шаре картинка не прояснилась, вполне возможно что если сервы вы питаете от пина +5v ардуины, то перегружаете стабилизатор или просаживаете питание самой ардуины
пробовал подключать двумя способами 1 через штекер 5,1 ардуино при этом на power shilld пеермычки справа..подключал 12 в греется ардуино , 6 в сервы работаю как при нехватке питания.. 2 через входной разъем на power shild