Go Down

Topic: Motori con arduino!!! (Read 6 times) previous topic - next topic

lesto

non confondere la read (lettura) con la write (srittura). si SCRIVE sul PWM, e si legge sugli ANALOGICI
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

guggio97

Hai ragione!!!! è vero io ho usato analog read non Write, ok allora appena mi arriva il modulo interno l293ne lo provo sperando che funzioni...

GRAZIE DI TUTTO!!! :D

guggio97

Ho riscontrato un altro problema, come mi ha detto lesto ho usato i comandi analogWrite ma neanche con quelli funziona, la mia sintassi di esempio che ho usato è questa

Code: [Select]
void setup(){
   pinMode(11, OUTPUT);
}

void loop(){
   analogWrite(11, HIGH);
   delay(1000);
   analogWrite(11, LOW);
   delay(1000);
}


Ho sbagliato qualcosa??? (sono sicuro che è tutto sbagliato avendolo fatto in assenza di guida e totalmente a caso spero che mi sappiate aiutare)

Non ho ancora provato la servo libreria (provero domani)...


Ma vi volevo chiedere cosa devo attaccare a cosa?? nel senso dove ho il filo rosso del motore ci devo attaccare i 5v oppure il PWR pin (o qualunque altro pin) a quello nero grosso il ground, e a quello piccolo??

Non so come facciate ad avere tutta questa pazienza per aiutarmi :D

guggio97

Non ce proprio nessuno che mi sa aiutare??? Ho diversi problemi ancora con Arduino spero di risolverli presto  =(

lesto

essendo un valore analogico, non va da 0 a 1, ,a da 0 a 255... quì trovi l'elenco di funzioni base dell'arduino:
http://arduino.cc/en/Reference/HomePage

e c'è anche per le librerie base:
http://arduino.cc/en/Reference/Libraries

evita di fare cose "a caso", se non vuoi rischiare di friggere la scheda o i componenti.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

guggio97

Ragazzi ho provato sia con HIGH LOW e analogWrite proprio come mi aveva detto lesto ma ancora nulla da fare non vuole funzionare...

ditemi se sbaglio qualcosa:



se non vedete bene ve lo spiego:

Ho attaccato il motore (a tre fili : ancora non ho capito a cosa serve quello piccolo nero) alla breadboard, nel filo rosso ci ho messo il pin PWR 9 e 9v provenienti da una batteria esterna che non faccio vedere in foto e nel nero grande la terra (in quello piccolo niente), ho inserito questo codice:

Code: [Select]
int ledPin = 9;      // LED connected to digital pin 9
int analogPin = 3;   // potentiometer connected to analog pin 3
int val = 0;         // variable to store the read value

void setup()
{
  pinMode(9, OUTPUT);   // sets the pin as output
  pinMode(3, INPUT);
}

void loop()
{
  val = analogRead(analogPin);   // read the input pin
  analogWrite(9, val / 4);  // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}


Ma non vuole funzionare... Vi prego aiutatemi devo fare un progetto per la scuola :(

lesto

usa la libreria servo.h, se non erro nell'ide c'è già il programma di esempio
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

guggio97

ma come lo ho montato va bene oppure devo usare un ponte h??

lesto

no, se è un servo NON serve il ponte h... se fosse un normale motore da ponte h, se colleghi il + e il - dovrebbe partire, e probabilmente il filo in più sarebbe un qualcosa per contare il numero di giri.
ma dato che fin'ora non è partito sembra essere qualcosa di più complesso.

usa la libreria servo, scrivi 0 per 10/15 secondi, e poi incrementi il valore fino al suo massimo (255), e poi torno a 0.

il 0 iniziale serve perchè molto esc hanno una protezione per cui se il segnale non è a 0 per qualche tempo allora il circuito non viene attivato, per evitare accensioni accidentali... Immagina di accendere il tuo arduino e vederlo schizzare via alla velocità della luce :)
senza contare che di solito questi esc si usano su aerei RC, quindi pale in vista che girano anche a 5000 RPM
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

guggio97

Ragazzi mi sa che mi sono spiegato male, il motore funziona con il ponte H attaccato ad una battiria da 9v il problema è che non riesco a programmarlo nel senso: premere un bottone per spegnerlo e premerlo un altra volta per accenderlo lho fatto ma non funziona...

ps: comunque provero sicuramente anche con la libreria servo.h

lesto

ma allora cambia tutto, se funziona con il ponte H....
spiega il collegamento che hai fatto e come funzionava.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

guggio97

Ho usato un ponte h l293ne, ho messo i 5 volt dove andavano messi (in alto a tutte e due i lati), ho messo il collegamento alla batteria nel primo pin in basso a sinistra, nel terminale del motore 1 ci ho messo il filo rosso e nel terminale del motore 2 ci ho messo il filo nero... ho messo la terra sia a destra che a sinistra(nei due pin centrali) e poi ho programmato cosi:

Code: [Select]
const int switchPin = 2;    // switch input
  const int motor1Pin = 3;    // H-bridge leg 1 (pin 2, 1A)
  const int motor2Pin = 4;    // H-bridge leg 2 (pin 7, 2A)
  const int enablePin = 9;    // H-bridge enable pin
  const int ledPin = 13;      // LED

  void setup() {
    // set the switch as an input:
    pinMode(switchPin, INPUT);

    // set all the other pins you're using as outputs:
    pinMode(motor1Pin, OUTPUT);
    pinMode(motor2Pin, OUTPUT);
    pinMode(enablePin, OUTPUT);
    pinMode(ledPin, OUTPUT);

    // set enablePin high so that motor can turn on:
    digitalWrite(enablePin, HIGH);

    // blink the LED 3 times. This should happen only once.
    // if you see the LED blink three times, it means that the module
    // reset itself,. probably because the motor caused a brownout
    // or a short.
    blink(ledPin, 3, 100);
  }

  void loop() {
    // if the switch is high, motor will turn on one direction:
    if (digitalRead(switchPin) == HIGH) {
      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:
    else {
      digitalWrite(motor1Pin, HIGH);  // set leg 1 of the H-bridge high
      digitalWrite(motor2Pin, LOW);   // set leg 2 of the H-bridge low
    }
  }

  /*
    blinks an LED
   */
  void blink(int whatPin, int howManyTimes, int milliSecs) {
    int i = 0;
    for ( i = 0; i < howManyTimes; i++) {
      digitalWrite(whatPin, HIGH);
      delay(milliSecs/2);
      digitalWrite(whatPin, LOW);
      delay(milliSecs/2);
    }
  }


Proprio come sul sito guida qui http://scuola.arduino.cc/it/content/controlla-motore-dc-ponte-h-l293d pero al posto di usare un interruttore ho usato un bottone poi ho costruito il tutto come nel sito...
Spero che possa essere daiuto anche se ho fatto un bel po di casino :D

guggio97

Ragazzi non ce proprio nessuno che mi sa aiutare, è abbastanza urgente :)

leo72

Non me ne intendo assolutamente ma su quel sito c'è scritto di usare un L293D mentre tu hai usato un L293NE. Il primo ha i diodi integrati, il secondo no.
Il primo fornisce meno corrente per canale del secondo.

Non sono proprio uguali, non so se la differenza risiede in questo. Il codice non l'ho guardato, non so come si pilotano i motori.

guggio97

si è vero all'inizio dice di usare un modulo integrato l293d ma se poi scendi un po vedi che usa il modulo integrato l293ne che è quello che appunto uso io.... Comuque grazie per l'interessamento :D

Go Up