martedì 22 luglio 2014

Arduino Tutorial 19: programmare arduino mini pro 5v 328p

vediamo come programmare arduino mini con il convertitore pl 2303 rs232/usb                                             


Arduino pro mini pin:
per prima cosa bisogna individuare i pin da collegare tra arduino e il convertitore


Convertitore:

il nostro convertitore potrebbe presentarsi così o in altro modo non importa.


 ciò che importa è individuare i pin necessari alla programmazione della nostra scheda....

i pin che ci servono sono:                                                                                                                                
  • 5V (+)
  • GND (-)
  • TX
  • RX
  • DTR
adesso che abbiamo individuato i pin necessari alla programmazione di arduino mini pro, dobbiamo saldare un filo nel pin DTR del nostro convertitore, gli altri dovrebbero esserci già altrimenti eseguite la stessa operazione anche per gli atri pin


Adesso colleghiamo arduino mini pro al convertitore USB, nel seguente modo.


 come potete vedere dall'immagine in basso, i pin dal basso verso l'alto ci sono i primi due pin GND, il terzo VCC 5V, il quarto RX, il quinto TX e il sesto DTR molto importante ai fini della programmazione senza questo pin l'IDE di arduino restituisce un errore.



Convertitore             Arduino PRO Mini Bootloader
VCC  —————– VCC (5)
RXD —————– TXO (TXD)
TXD —————— RXI (RXD)
DTR —————— RESET (this is the pad lable as “GRN”)
RTS —————— NC (Not Connected), ignore this pin
GND —————— GND
il pin RX convertitore va incrociato con il TX di arduino e TX convertitore con RX arduino, il Pin DTR convertitore collegato al pin RESET
Per poter utilizzare il convertitore bisogna installare i driver  per windows.
scompattate il file zip e installate il driver tramite il file .exe 
successivamente verificate la corretta installazione e riconoscimento da parte del pc del convertitore appena installato:
Pannello di controllo-------Sistema--------Hardware---------Gestione Periferiche---------port COM & LPT.
vedremo il nome del driver e laporta su cui è collegato questo sarà molto utile dopo...

Adesso che abbiamo collegato arduino con il convertitore ed installato i driver, apriamo l'ide di arduino:
Strumenti------Tipo di arduino scegliamo il nostro arduino pro mini 5v 16Mhz 328.
poi Strumenti-------porta seriale quella indicata nella finestra "Gestione periferiche".
adesso caricate uno sketch ad esempio un blink con delay 100 o quello che volete.



Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.

giovedì 10 luglio 2014

Arduino Tutorial 18: Controllare un Motore DC con un ponte H (L293D)

con il componente L293D è possibile controllare fino a due motori in corrente continua ad una tensione che va da 4,5v a 36v.
La prima operazione da fare è collegare un interruttore al pin 2 di arduino come in figura 1.



Come funziona un ponte H?

L'L293NE/SN754410 é un ponte-H molto semplice. E' costituito da due "ponti", uno sul lato sinistro del chip ed uno sul lato destro, e può controllare 2 motori. Può controllare dino ad 1 ampere di corrente, e funziona tra i 4.5 V e i 36 V.
I pin del ponte H:
  • Pin 1 (1,2EN) attiva/disattiva il nostro motore a seconda che sia HIGH o LOW
  • Pin 2 (1A) é un pin logico per il nostro motore (ppuò essere HIGH o LOW)
  • Pin 3 (1Y) é uno dei due poin a cui metteremo il motore (motor terminals)
  • Pin 4-5 sono per la massa (GND)
  • Pin 6 (2Y) é per l'altro motor terminal
  • Pin 7 (2A)é un pin logico per il nostro motore (ppuò essere HIGH o LOW)
  • Pin 8 (VCC2) é l'alimentazione per il nostor motore, a cui dovremmo dare il voltaggio giusto per il nostro motore
  • Pin 9-11 non sono utilizzati (stiamo controllando solo un motore in questa lezione)
  • Pin 12-13sono per la massa (GND)
  • Pin 14-15 non sono connessi
  • Pin 16 (VCC1) é connesso a 5V
Qui sotto c'é un diagramma sui pin che useremo e su come li useremo nel nostro esempio. Nella tabella sottostante potete vedere il comportamento del motore seconda si come vengono settati i pin dell'integrato (controllati da Arduino).
Per questa lezione controlleremo l'EN pin del chip con un pin digitale di Arduino: settandolo HIGH o LOW accennderemo o spegneremo il motore. anche i pin logici del chip saranno connessi a dei pin digitali di Arduino, in modo da andare in una direzione con HIGH e LOW, nella direzione opposta con LOW e HIGH. L'alimentazione del motore é comunemente esterna. Seil motore che usate può andare a 5V e a meno di 500 mA potete usare i 5V di Arduino. Questo é molto raro.


Connettiamo il motore al Ponte H

Se avete bisogno di un'alimentazione esterna, potete usare una fonte di energia 9 - 15V (se compatibile con il vostro motore).
Attaccate un alimentazion esterna ad Arduino. Potete mantenere l'Arduino attaccato via USb al computer per riprogrammare velocemente il microcontrollore. Qualunque motore usiate, assicuratevi che sia compatibile con l'alimentazione (e.g. non usate batterie da 9V con un motore sa 3V!). Il pin Vin restituisce il valore dell'alimentazione esterna.
Se notate che il vostro microcontrollore va in reset quando il motore si accende, aggiungete in condensatore tra alimentazione e massa vicino al motore. Il condensatore spianerà lo sbalzo elettrico che avviene quando il motore si accende. 


Alimentazione Esterna



Il codice:

controlla il motore tramite l'interruttore

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);
    }
  }

Codice test motori via seriale

Controllo motore tramite monitor seriale digitando: "H", "J", "L"
Usando analogWrite() sul pin 9, il pin di attivazione (Enable) del chip e potrete variare la velocità del motore.
Codice:
// testing motors
//
  
  
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
  
int incomingByte;      // a variable to read incoming serial data into
  
  
void setup() {
  Serial.begin(9600); // open serial port to receive data
  
  
  // 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, LOW);
  
}
  
void loop() {
  // see if there's incoming serial data:
  if (Serial.available() > 0) {
    // read the oldest byte in the serial buffer:
    incomingByte = Serial.read();
    // if it's a capital H (ASCII 72), turn on the LED:
    if (incomingByte == 'H') {
      digitalWrite(enablePin, HIGH);  // accende  il motore
      digitalWrite(motor1Pin, LOW);   // set leg 1 of the H-bridge low
      digitalWrite(motor2Pin, HIGH);  // set leg 2 of the H-bridge high
    }
    else if (incomingByte == 'J') {
      digitalWrite(enablePin, HIGH);  // accende il motore,
      digitalWrite(motor1Pin, HIGH);   // set leg 1 of the H-bridge low
      digitalWrite(motor2Pin, LOW);  // set leg 2 of the H-bridge high
    }    
    else if (incomingByte == 'L') {
      digitalWrite(enablePin, LOW);  // spegne il motore
    }
  
  }
  
}

modificando "HIGH" con un valore che va da 0 a 255 si può agire sulla velocità
digitalWrite(enablePin, HIGH);
adesso non vi resta che sperimentare ed adattarlo alle vostre esigenze.

Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.