Controllare 2 motori

Dato che vorrei evitare di fare danni, vi chiedo: collegare 2 motori dc(alimentati a 9v)ad Arduino Uno tramite un solo L293D potrebbe creare problemi di corrente e danneggiare qualcosa?

Inoltre, sarebbe possibile controllare questi 2 motori indipendentemente l'uno dall'altro senza dover utilizzare una motor shield?

il L293D comanda 2 motori DC Non c'e' nessun problema se la corrente assorbita da ciascun motore e' minore di 600mA Semmai si danneggia il L293D

Inoltre, sarebbe possibile controllare questi 2 motori indipendentemente l'uno dall'altro senza dover utilizzare una motor shield?

Non capisco la domanda, se hai una scheda con L293D comandi gia' i motori in modo indipendente

ora che ci penso effettivamente la risposta era ovvia :sweat_smile:

comunque per controllarli ho scritto questo codice, che funziona, ma vorrei sapere se è possibile in qualche modo rielaborarlo diversamente

const int controlPinAnt1 = 4;        // Motore Anteriore 
const int controlPinAnt2 = 2; 
const int enablePinAnt = 9;
const int controlPinPost3 = 5;       // Motore Posteriore 
const int controlPinPost4 = 6;
const int enablePinPost = 3;

const int leftSwitch = 10;
const int rightSwitch = 11;
int rightState;
int leftState;

const int forwardSwitch = 13;
const int backwardSwitch = 12;
int motorSpeed = 85;                 

void setup()
{
  pinMode(controlPinAnt1 , OUTPUT);
  pinMode(controlPinAnt2 , OUTPUT);
  pinMode(enablePinAnt , OUTPUT);
  pinMode(controlPinPost3 , OUTPUT);
  pinMode(controlPinPost4 , OUTPUT);
  pinMode(enablePinPost , OUTPUT);
  pinMode(leftSwitch , INPUT);
  pinMode(rightSwitch , INPUT);
  pinMode(forwardSwitch , INPUT);
  pinMode(backwardSwitch , INPUT);
  digitalWrite(enablePinAnt , LOW);
  digitalWrite(enablePinPost , LOW);
}

void loop()
{
  rightState = digitalRead(rightSwitch);
  leftState = digitalRead(leftSwitch);
  if(rightState == HIGH && leftState == LOW)
  {
    digitalWrite(enablePinAnt , HIGH);
    digitalWrite(controlPinAnt2 , HIGH);
    digitalWrite(controlPinAnt1 , LOW);
    delay(1);
    digitalWrite(enablePinAnt , LOW);
  }
  if(leftState == HIGH && rightState == LOW)
  {
    digitalWrite(enablePinAnt , HIGH);
    digitalWrite(controlPinAnt2 , LOW);
    digitalWrite(controlPinAnt1 , HIGH);
    delay(1);
    digitalWrite(enablePinAnt , LOW);
  } 
  while(digitalRead(forwardSwitch) == HIGH && digitalRead(backwardSwitch) == LOW)
  {
    digitalRead(forwardSwitch);
    digitalRead(backwardSwitch);
    analogWrite(enablePinPost , motorSpeed);
    digitalWrite(controlPinPost3 , HIGH);
    digitalWrite(controlPinPost4 , LOW);
    rightState = digitalRead(rightSwitch);
    leftState = digitalRead(leftSwitch);
    if(rightState == HIGH && leftState == LOW)
    {
      digitalWrite(enablePinAnt , HIGH);
      digitalWrite(controlPinAnt2 , HIGH);
      digitalWrite(controlPinAnt1 , LOW);
      delay(1);
      digitalWrite(enablePinAnt , LOW);
    }
    if(leftState == HIGH && rightState == LOW)
    {
      digitalWrite(enablePinAnt , HIGH);
      digitalWrite(controlPinAnt2 , LOW);
      digitalWrite(controlPinAnt1 , HIGH);
      delay(1);
      digitalWrite(enablePinAnt , LOW);
    } 
  }
  digitalWrite(enablePinPost , LOW);
  while(digitalRead(forwardSwitch) == LOW && digitalRead(backwardSwitch) == HIGH)
  {
    digitalRead(backwardSwitch);
    digitalRead(forwardSwitch);
    analogWrite(enablePinPost , motorSpeed);
    digitalWrite(controlPinPost3 , LOW);
    digitalWrite(controlPinPost4 , HIGH);
    rightState = digitalRead(rightSwitch);
    leftState = digitalRead(leftSwitch);
    if(rightState == HIGH && leftState == LOW)
    {
      digitalWrite(enablePinAnt , HIGH);
      digitalWrite(controlPinAnt2 , HIGH);
      digitalWrite(controlPinAnt1 , LOW);
      delay(1);
      digitalWrite(enablePinAnt , LOW);
    }
    if(leftState == HIGH && rightState == LOW)
    {
      digitalWrite(enablePinAnt , HIGH);
      digitalWrite(controlPinAnt2 , LOW);
      digitalWrite(controlPinAnt1 , HIGH);
      delay(1);
      digitalWrite(enablePinAnt , LOW);
    }
  }
}

mi servono per far muovere una specie di robot che ho costruito; il motore posteriore è un dc che mando in avanti premendo "forwardSwitch" ed in retromarcia con "backwardSwitch", mentre del motore anteriore se ne è parlato qui: http://forum.arduino.cc/index.php?topic=245917.0 Quest'ultimo, non essendo un servo, può, in teoria, essere portato soltanto tutto a destra o tutto a sinistra, senza posizioni intermedie, ma utilizzando

      delay(1);
      digitalWrite(enablePinAnt , LOW);

con un rapido rilascio del pulsante riesco ad ottenere 3-4 stadi intermedi da ogni lato

Non è così che si fà un controllo di posizione con un motore DC, serve un encoder

http://www.dmxpassion.altervista.org/pg016.html