[RISOLTO]Problema Ponte H/Arduino StarterKit/ Progetto Zootropio

Buongiorno a tutti, sono un nuovo iscritto al forum ma sopratutto sono un neofita nel campo di arduino e nell'elettronica, tuttavia ho una buona conoscenza di programmazione, sopratutto C/C++/ObjC.

Arriviamo al problema:

Una volta completato il circuito descritto nel tutorial per la costruzione di uno zootropio, contenuto nello starterkit, ed aver caricato lo sketch (quello scritto dagli sviluppatori, all'inizio provo prima il codice contenuto nell'IDE per vedere se il circuito funziona bene, dopodichè lo riscrivo a modo mio e ri-testo) il tutto ha funzionato (tranne per il fatto che il motororino spesso deve essere sollecitato manualmente per partire) per qualche secondo, fino a quando ho premuto il bottone per cambiare il verso del motore. Li sono inziati i problemi.

Il motore non girava o si bloccava, alchè ho pensato subito ad un falso contatto del bottone, così nel codice, appena sotto l'istruzione che controllava se era stato premuto il tasto per cambiare il verso del motore ho inserito un Serial.write (dopo aver opportunamente avviato la connessione tra pc e monitor seriale nel void setup() ) ed ho notato che il tasto veniva premuto da Gesù ( piccolo troll) così l'ho sostituito ed ora il falso contatto non lo fa più.

A questo punto quando do alimentazione e premo il pulsante per accendere il motore si sente lo sforzo ma il motore non gira.
Provando ad alimentarlo direttamente gira invece che è una meraviglia.

Ho provato ad alimentare arduino tramite alimentatore ma niente.

Il motore è alimentato da una 9V.

La scheda è Arduino Uno uscitami dallo starterkit così come lo sono tutti i componenti facendo eccezione per il potenziometro a cui ho saldato dei fili più lunghi dato che sulla BB mi dava fastidio.

Io suppongo che il problema sia dovuto al ponte H, Probabilmente mi sbaglio e dico una cazzata.

Cosa ne pensate?? Il vostro aiuto per me sarebbe "MICIDIALE :)"..Grazie in anticipo!!!Vi Voglio BENE!!

Benvenuto. :slight_smile:
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Penso che potresti aver fatto un errore nei collegamenti, sarebbe utile una foto dei tuoi collegamenti.
Il codice è l'originale o quello da te modificato? Se lo hai modificato sarebbe meglio postarlo, magari hai inserito un errore.

Benvenuto. smiley
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Grazie per la risposta immediata. Ho letto il regolamento ed ho trovato anche divertente il modo in cui è stato scritto, provvederò a presentarmi nell'apposita sezione.

In ogni caso i link li avevo già visitati, ed ho fatto diverse ricerche ahimè senza trovare risposte.
Tuttavia quei link mi sono d'aiuto nella mia avventura in generale con arduino ma ritengo siano inutili per la risoluzione di questo problema sia per me, sia per altri che avranno il mio stesso problema in quanto come aiuto è decisamente generico :).
Ma meglio questo che niente disse un vecchio saggio :slight_smile:

Penso che potresti aver fatto un errore nei collegamenti, sarebbe utile una foto dei tuoi collegamenti.
Il codice è l'originale o quello da te modificato? Se lo hai modificato sarebbe meglio postarlo, magari hai inserito un errore.

I collegamenti li ho controllati diverse volte, provvedo subito a postare una foto (in bassa risoluzione) del circuito.
Il codice è quello originale, ho solo inserito l'istruzione "Serial.write()"

const int controlPin1 = 2; // connected to pin 7 on the H-bridge
const int controlPin2 = 3; // connected to pin 2 on the H-bridge
const int enablePin = 9;   // connected to pin 1 on the H-bridge
const int directionSwitchPin = 4;  // connected to the switch for direction
const int onOffSwitchStateSwitchPin = 5; // connected to the switch for turning the motor on and off
const int potPin = A0;  // connected to the potentiometer's output

// create some variables to hold values from your inputs
int onOffSwitchState = 0;  // current state of the On/Off switch
int previousOnOffSwitchState = 0; // previous position of the on/off switch
int directionSwitchState = 0;  // current state of the direction switch
int previousDirectionSwitchState = 0;  // previous state of the direction switch

int motorEnabled = 0; // Turns the motor on/off
int motorSpeed = 0; // speed of the motor
int motorDirection = 1; // current direction of the motor

void setup(){
  // intialize the inputs and outputs
  pinMode(directionSwitchPin, INPUT);
  pinMode(onOffSwitchStateSwitchPin, INPUT);
  pinMode(controlPin1, OUTPUT);
  pinMode(controlPin2, OUTPUT);
  pinMode(enablePin, OUTPUT);
  
  Serial.begin(9600); // ---------------------------------->>>>>>>>> ho inserito questo.

  // pull the enable pin LOW to start
  digitalWrite(enablePin, LOW);
}

void loop(){
  // read the value of the on/off switch
  onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);
  delay(150);
  
  // read the value of the direction switch
  directionSwitchState = digitalRead(directionSwitchPin);
  
  // read the value of the pot and divide by 4 to get 
  // a value that can be used for PWM
  motorSpeed = analogRead(potPin)/4; 

  // if the on/off button changed state since the last loop()
  if(onOffSwitchState != previousOnOffSwitchState){
    // change the value of motorEnabled if pressed
    if(onOffSwitchState == HIGH){
      motorEnabled = !motorEnabled;
      Serial.write("premuto pulsante ON/OFF/"); // ---------------------------------->>>>>>>>> ho inserito questo.
      
      
    }
  }

  // if the direction button changed state since the last loop()
  if (directionSwitchState != previousDirectionSwitchState) {
    // change the value of motorDirection if pressed 
    if (directionSwitchState == HIGH) {
      motorDirection = !motorDirection;
      Serial.write("Premuto Direzione");
      
    }
  }  

  // change the direction the motor spins by talking
  // to the control pins on the H-Bridge
  if (motorDirection == 1) {
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
  } 
  else {
    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, HIGH);
  }  

  // if the motor is supposed to be on
  if (motorEnabled == 1) {
    // PWM the enable pin to vary the speed
    analogWrite(enablePin, motorSpeed);
  }
  else { // if the motor is not supposed to be on
    //turn the motor off
    analogWrite(enablePin, 0);
  }
  // save the current On/Offswitch state as the previous 
  previousDirectionSwitchState = directionSwitchState;
  // save the current switch state as the previous
  previousOnOffSwitchState = onOffSwitchState;
}

Nella foto non si capisce se hai utilizzato resistenze Pullup o Pulldown sui pulsanti. Puó essere questo la causa di un malfunzionamento non spiegabile.
Ciao Uwe

Ho risolto!!! E vi spiego come:

Premettendo che usavo batterie ricaricabili tra l'altro appena staccate dalla carica (come ho scritto sopra l'ho testata alimentando direttamente il motore e girava!!).

Ho comprato una batteria non ricaricabile di marca buona e tutto ha funzionato a meraviglia!!

Probabilmente le batterie che usavo non alimentavano in maniera uniforme o alimentavano male ( anche se resta un mistero il fatto che collegandole direttamente fanno girare il motore).

Mi scuso se la risoluzione del problema è stata qualcosa di banale, ma caspita su 3 batterie tutte e 3 lo stesso problema.

Nella foto non si capisce se hai utilizzato resistenze Pullup o Pulldown sui pulsanti. Puó essere questo la causa di un malfunzionamento non spiegabile.
Ciao Uwe

Le resistenze sono di "pull-down", per arginare il problema dei falsi contatti ho provato ignorantemente con resistenze più grandi ma solo la sostituzione del bottone è stata d'aiuto..

Grazie ancora per il vostro tempo!! CIAO!!