Нужна помощь в написании скетча управления двумя моторами одним Джойстиком на базе 2х потенциометров

apassirob
Offline
Зарегистрирован: 06.01.2014
Проблема такая:
 
Есть два мотора которые потключены к АРДУИНО скажем пинам 10 и9 есть Джойстик потэнциометры которого подключённые к аналоговым пинам( сакжем 0 и 1.) Поткиньте хоть один пример как мне заставить эти двигатели синхронно работать при подачи рычага джойстика вперёд( оба крутит вперёд)В ЭТОМ ЖЕ ПОЛОЖЕНИИ при смещении рычага  в лево( Один затухает второй остаёться на полных оборотах)Ну и в право тоже самое только наоборот При подачи назад ( Оба крутит назад ) При подачи в левоНЕЙТРАЛЬНОЕ ПОЛОЖЕНИЕ ХОДА В ПЕРЁД (КРУТИТ один вперёд - один назад)
 
Зарание блогодарен.
kimmel.dima
Offline
Зарегистрирован: 20.02.2014

analogRead и математика.

com
Offline
Зарегистрирован: 06.09.2013

... и русский язык!

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Ну и это тоже))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот. подправите под свои нужды


#include <Servo.h> 
#include <Wire.h>
#include <ArduinoNunchuk.h>
ArduinoNunchuk nunchuk = ArduinoNunchuk();
Servo myservo;
int dir = 4;
int pwm = 5;

void setup() 
{ 
  myservo.attach(6);
  nunchuk.init(); 
  pinMode(dir, OUTPUT);
  pinMode(pwm, OUTPUT);
} 
 
void loop() 
{ 
  nunchuk.update();
  
  int val = map(nunchuk.analogX, 0, 255, 50, 115);
  myservo.write(val);
  if(nunchuk.analogY == 128){
    digitalWrite(dir, 0);
    analogWrite(pwm, 0);
  }
  if(nunchuk.analogY > 128){
    digitalWrite(dir, 0);
    analogWrite(pwm, nunchuk.analogY*2-255);
  }
  if(nunchuk.analogY < 128){
    digitalWrite(dir, 1);
    analogWrite(pwm, nunchuk.analogY*2);
  }
  
  
  
} 

 

apassirob
Offline
Зарегистрирован: 06.01.2014

С руским беда :-)   Язык не родной :-) так что тут никак с граматикой :-) 

ну за скетч ОГРОМНОЕ спосибо .. :-)

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Sorry...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

  if(Y == 511){
    digitalWrite(dir, 0);
    analogWrite(pwm, 0);
  }
  if(Y > 511){
    digitalWrite(dir, 0);
    analogWrite(pwm, nunchuk.analogY*2-255);
  }
  if( < 511){
    digitalWrite(dir, 1);
    analogWrite(pwm, nunchuk.analogY*2);
  }

должно получится для одной оси в идеале (не с обычными "круговыми" джойстиками, с обычными нужно сложнее писать программу)

там или 511 или 512 (должно быть по идее 511, хотя не тестировал чему равна средняя точка)

Levstepan
Offline
Зарегистрирован: 30.05.2014

А помогите для ДС движков через мотор шилд L293D с помощью джостика управлять, можно даже без регулировки скорости просто включение и выключение. Пытался составить сам, искал инфу из разных источников, не получается

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Там в arduino ide есть хорошие примеры по этому шилду. В примерах посмотрите stepper motor.

Levstepan
Offline
Зарегистрирован: 30.05.2014

Большое спасибо, сейчас гляну

vvadim
Offline
Зарегистрирован: 23.05.2012
Levstepan
Offline
Зарегистрирован: 30.05.2014

Удалось всетаки соорудить нечто рабочее :)

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

http://freeduino.ru/arduino/mshield.html#Biblioteka_AFMotor

http://amperka.ru/collection/boards/product/arduino-uno

И джостик с ебея

//переменные для значений с джойстика
int xValue, yValue;

#include <AFMotor.h>  //Подключаем заголовочный файл библиотеки
AF_DCMotor motor(1);//Создаем объект для двигателя на 1 канале (M1)
AF_DCMotor motor2(2);//Создаем объект для двигателя на 2 канале (M2)
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  //читаем значения с джойстика и ремапим их от 0 до 252
  xValue = map(analogRead(A0), 0, 1024, 0, 252);
  yValue = map(analogRead(A1), 0, 1024, 0, 252);

  Serial.print(xValue);    //выводим значение x
  Serial.print("\t");      //отступ
  Serial.print(yValue);    //выводим значение y
  Serial.print("\t");      //отступ

  if (xValue <= 100)
  {
    motor.run(FORWARD);
  }
  else if (xValue > 101 && xValue <149)
  {
    motor.run(RELEASE);
  }
  if (xValue >= 150)
  {
    motor.run(BACKWARD);
  }
  else if (xValue > 101 && xValue <149)
  {
    motor.run(RELEASE);
  }
  /////////////////////
  if (yValue <= 100)
  {
    motor2.run(FORWARD);
  }
  else if (yValue > 101 && yValue <149)
  {
    motor2.run(RELEASE);
  }
  if (yValue >= 150)
  {
    motor2.run(BACKWARD);
  }
  else if (yValue > 101 && yValue <149)
  {
    motor2.run(RELEASE);
  }
}
 

Aleksej37
Offline
Зарегистрирован: 23.07.2018

А как сделать так, чтобы если двигать джойстик по оси Х, то крутится серва, а если по оси У, то мотор меняет свою скорость, а также он мог крутиться в обе стороны, или менять передачу(передняя передача, задняя передача) управление мотором через L298N, ардуино уно. Заранее спасибо.

vvadim
Offline
Зарегистрирован: 23.05.2012

Aleksej37 пишет:

А как сделать так, чтобы если двигать джойстик по оси Х, то крутится серва, а если по оси У, то мотор меняет свою скорость, а также он мог крутиться в обе стороны, или менять передачу(передняя передача, задняя передача) управление мотором через L298N, ардуино уно. Заранее спасибо.

 

для начала создать свою тему.

потом взять и написать программу.
если не хочется самому делать или знаний нет - идти в раздел "Ищу исполнителя" за денежку.

если решили сами написать и что то не получается - публикуем схему и отформатированный код.

может помогут бесплатно.

Усман Инаркеев
Усман Инаркеев аватар
Offline
Зарегистрирован: 08.12.2018

Помогите пожалуста нужен скейч на две сервы и на один моторчик подсоединеный l293d спасибо

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Усман Инаркеев, Вы пост как раз перед Вашим читали?

sadman41
Offline
Зарегистрирован: 19.10.2016

Порой мне кажется, что тут мало кто читает. Копипаст, копипаст и в продакшн, так сказать.