diagramma per usare Mosfet IRF520 (e domandone...)

ho cercato di riportare il circuito per usare l’IRF520 e comandare 12V (presto posto un video girato l’altra sera in cui comandiamo una luce da sirena con l’input analogico).
Imgur

la mia domanda é un’altra:
come faccio ad invertire la polarità dell’elettricità in uscita?
Se l’input analogico é >550, la macchina deve andare avanti, se < di 500, indietro.

(il motore di cui stiamo parlando é bidirezionale)

mi sono spiegato? :-/ :-/ :-/

p.s. qualcuno riesce a postare l’immagine che ho linkato…merci…

Con un solo mosfet non credo che tu possa farlo devi usare un ponte H(usa google), oppure qualcosa di simile: http://www.robot-italy.com/product_info.php?cPath=6_34&products_id=203

X postare l'immagine la devi salvare sul tuo pc poi la carichi tramite "imageshack.us" (o qlc di simile) infine inserisci il link che ottieni dentro "(img] [/img)" tutte parentesi quadre

grazie. cerco di capirne.

vi tengo informato qualora approdi a una qualche soluzione.-

dunque, questo é il mio diagramma di funzionamento per il ponte h

ho usato questo codice,

int potPin0 = 0;    // select the input pin for the potentiometer
int potPin1 = 1;
int potPin2 = 2; 
int potPin3 = 3; 


int ledPin = 13;   // select the pin for the LED
int val0 = 0;       // variable to store the value coming from the sensor
int val1 = 0;
int val2 = 0;
int val3 = 0;

int motor1Pin = 3;    // H-bridge leg 1 (pin 2, 1A)
int motor2Pin = 4;    // H-bridge leg 2 (pin 7, 2A)
int enablePin = 9;    // H-bridge enable pin

int dir1Pin = 5;    // H-bridge leg 1 (pin 2, 1A)
int dir2Pin = 6;    // H-bridge leg 2 (pin 7, 2A)
int enable2Pin = 10;    // H-bridge enable pin

void setup() {
  
  pinMode(ledPin, OUTPUT);  // declare the ledPin as an OUTPUT
  
  //pinMode(lucina, OUTPUT);
  
  // set all the other pins you're using as outputs:
  pinMode(motor1Pin, OUTPUT); 
  pinMode(motor2Pin, OUTPUT); 
  pinMode(enablePin, OUTPUT);
  
    // set enablePin high so that motor can turn on:
  digitalWrite(enablePin, HIGH); 

  
  
  Serial.begin(9600);
}

void loop() {
 val0 = analogRead(potPin0);    // read the value from the sensor
 val1 = analogRead(potPin1);
 val2 = analogRead(potPin2);
 val3 = analogRead(potPin3);


/// **************************************************************************
 val0 = 0;
  for (int i = 0; i < 10; i++) {
    val0 = val0 + analogRead(potPin0);
  }
  val0 = val0 / 10;

/// **************************************************************************  
   val1 = 0;
  for (int i = 0; i < 10; i++) {
    val1 = val1 + analogRead(potPin1);
  }
  val1 = val1 / 10;
 
 /// ************************************************************************** 
   val2 = 0;
  for (int i = 0; i < 10; i++) {
    val2 = val2 + analogRead(potPin2);
  }
  val2 = val2 / 10;
  
  /// **************************************************************************
   val3 = 0;
  for (int i = 0; i < 10; i++) {
    val3 = val3 + analogRead(potPin3);
  }
  val3 = val3 / 10;
  
 
  
 Serial.print(val0);
 
 Serial.print(" , ");
 Serial.print(val3);
 
 Serial.print(" , ");
 Serial.print(val1);

 Serial.print(" , ");
 Serial.print(val2);
 Serial.print(" , ");
Serial.println(" ");
//**************************MOTORE DIETRO **********************
  if (val0 < 65) {
    digitalWrite(motor1Pin, LOW);   // set leg 1 of the H-bridge low
    digitalWrite(motor2Pin, HIGH);  // set leg 2 of the H-bridge high
      } 
  // if the switch is low, motor will turn in the other direction:
  if (val0 > 75)  {
    digitalWrite(motor1Pin, HIGH);  // set leg 1 of the H-bridge high
    digitalWrite(motor2Pin, LOW);   // set leg 2 of the H-bridge low
  }
  if (val0 > 65 && val0 <75){
  digitalWrite(motor1Pin, LOW);  
  digitalWrite(motor2Pin, LOW);  
  }
 //************************DIREZIONE****************************
  if (val2 < 445) {
    digitalWrite(enable2Pin, HIGH); 
    digitalWrite(dir1Pin, LOW);   // set leg 1 of the H-bridge low
    digitalWrite(dir2Pin, HIGH);  // set leg 2 of the H-bridge high
    
      } 
  // if the switch is low, motor will turn in the other direction:
  if (val2 > 465)  {
    digitalWrite(enable2Pin, HIGH); 
    digitalWrite(dir1Pin, HIGH);  // set leg 1 of the H-bridge high
    digitalWrite(dir2Pin, LOW);   // set leg 2 of the H-bridge low
    
  }
  if (val2 > 445 && val2 <465){
  digitalWrite(enable2Pin, LOW); 
  //digitalWrite(dir1Pin, LOW);  
  //digitalWrite(dir2Pin, LOW);  
  } 
}

che ho adattato da quello del tutorial molto carino
http://itp.nyu.edu/physcomp/Labs/DCMotorControl

Funziona!

ho solo un grande problema: Appena cerco di rendere il progetto portabile (e.g alimentarlo esternamente da 9V)
non funziona.

ho tolto i 5v arduino - breadboard, ma lasciato il gnd in comune (ma ho anche provato togliendo tutto)

ho provato ad alimentare un motore per volta.

non ne ho la più pallida idea: qualcuno mi da una mano?
il motori funzionano alla grande con le stesse batterie con il mosfet, per esempio…