Per controllare un motore DC (funzionante in corrente continua) con Arduino, devi utilizzare il circuito integrato Ponte H (nel mio caso un L293NE

Documenti analoghi
Telecontrollo escavatore LEGO con board Arduino

Corso Arduino Maggio Riccardo Binetti Lezione 1 - Blinking LEDs with style

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

FONDAMENTI DI ARDUINO

I SENSORI DI PROSSIMITA

ARDUINO. Colleghiamolo al PC/MAC - FUNZIONA?

8^ parte: Pilotare Motori passo-passo bipolari usando l integrato SN754410NE. Author: Ing. Sebastiano Giannitto (ITIS M.

FC-51: IR Infrared Obstacle Detection Sensor Module 2-30cm

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Far lampeggiare un led o forse un semaforo?

ELECTRONICS LAB [WITH ARDUINO]

Tipologie dei dati nell SDK di Arduino come in un vero LP ad alto livello :

ACCENDERE E SPEGNERE UN DIODO LED

Programmazione di Base Variabili Array Funzioni Strutture di controllo. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Corso Arduino Maggio Riccardo Binetti Lezione 2 - Il calore dell analogico

Automobile Bluetooth

PRIMI PASSI CON ARDUINO

Relazione auto a trazione elettrica comandata con ARDUINO

Facciamo lampeggiare un led

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

LEGO Mindstorms e Arduino nella scuola secondaria di secondo grado: alcune esperienze didattiche. Pietro Bonora Liceo Scientifico A.B.

Esercitazione Monitoraggio temperatura via WEB mediante Arduino YUN

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Lezione 3 PWM e motori. Stefano Panichi e Giulio Fieramosca

Corso Arduino Maggio Riccardo Binetti Lezione 1 - Blinking LEDs with style

Macchina con Arduino Uno comandata tramite dispositivo Android e sensore ultrasuoni per fermarsi istantaneamente di fronte ad un ostacolo

Arduino. Laboratorio Arduino Base. HackLab Terni. Laboratorio aperto a tutti di elettronica, scienza e arte. hacklabterni.

Cablaggio ponte H con integrato L293B

Display numerico con i LED

8^ parte : Come pilotare i motori passo-passo unipolari. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Controllo di una soglia analogica

Introduzione a Arduino

SENSORI OTTICI - FOTORESISTENZE

ARDUINO. Ing. Francesco Giurlanda

Fisica, tecnologia, scienze applicate: ulab2, un laboratorio portatile basato su arduino e due piccoli robot, LEMU e MOMOLAB, vanno a scuola

5^ parte : Controllare un LED RGB con 3 potenziometri. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Università degli studi di Roma LA SAPIENZA

Relazione attività di laboratorio - Arduino

AUTOMAZIONE CANCELLO SCORREVOLE A MICROCONTROLLORE con ARDUINO

8^ parte : Pilotare Motori passo-passo bipolari usando l integrato L298N. Author: Ing. Sebastiano Giannitto (ITIS M.

Arduino: Programmazione

Non solo Uatsap. Andrea Garattini 1

ELECTRONICS LAB [WITH ARDUINO]

8^ parte : Pilotare Motori passo-passo bipolari usando l integrato L298N. Author: Ing. Sebastiano Giannitto (ITIS M.

CONTASECONDI CON DISPLAY A 7 SEGMENTI ARDUINO LIKE

14^ parte : Sensore a ultrasuoni HC SR04 e Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

CORSO ARDUINO. Giulio Fieramosca Stefano Panichi. Corsi GOLEM 2014

Relazione Tecnica Sensore di Temperatura con interfacciamento microcontroller Arduino 1.3

8^ parte : Motor shield FE e motore passo-passo bipolare. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Circuito logico AND / AND Gate

In questo tutorial decodificheremo i segnali provenienti da un telecomando qualsiasi e utilizzeremo gli stessi segnali per comandare Arduino a

Per vedere tutti i tutorial:

La piattaforma hardware e software Arduino Corso completo di autoapprendimento Aggiornato a Arduino Yun

SEA Descrizione. Centralina Controllo Strip LED RGB

Andrea Di Dato. e fu così che i maker misero le ali

Fisica, tecnologia, scienze applicate: ulab2, un laboratorio portatile basato su arduino e due piccoli robot, LEMU e MOMOLAB, vanno a scuola

12 - timer da cucina display a 4 cifre

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

Progetti reali con ARDUINO

Questo sistema si è poi diffuso in tutto il mondo, soprattutto in ambito didattico e hobbistico. Arduino mette a disposizione:

Corso Base Arduino ed Elettronica

Esercitazione Controllo di un motore DC mediante Arduino YUN

Arduino Uno INTRODUZIONE CONOSCENZE NECESSARIE

Corso Base Arduino ed Elettronica

TM1638 BOARD con ARDUINO

My First Robot. My First Robot. I m Learning Robotics. 1 Scarica l ultima versione della Arduino IDE (

ARDUINO. Misurare e controllare. Riccardo Barberi. Dip. di Fisica Univ. Della Calabria Rende (CS), Italy

Genere DATA Generalità Note Distribuzione

HP LED Driver Shield. EtherMania di Signorini Marco Via Cadore MALNATE (VA) P.I REA VA

La programmazione di Arduino

CTU Presenta. Contest Automation con Arduino. IK0XBX - Francesco

Alunna: Gennuso Ylenia classe VB a.s. 2014/2015

INSEGUITORE SOLARE CON ARDUINO. Dispositivo che insegue il movimento solare realizzato con: 1. Arduino 2. 2 foto resistenze 3.

SENSORE AD ULTRASUONI HC-SR04 E ARDUINO

Laboratorio di Elettronica. Arduino Lezione 1 Descrizione della board e installazione

CEDMEGA Rev 1.2 CONNECTION TUTORIAL

6^ parte : Acquisizione della temperatura con LM35. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Arduino - Tutorial #2 - Iniziamo a programmare

Arduino. Led, pulsanti, PWM, tastierino, display sette segmenti, display LCD

La piattaforma hardware e software Arduino: parte II. Corso di autoapprendimento

SVOLGIMENTO SECONDA PROVA 2017 SISTEMI AUTOMATICI: PARTE 1

IZ1MHN e IW1ALX. Prima di iniziare. Domande sulla lezione scorsa? Come è andato il compito a casa?

Progetto Esami Di Stato Anno 2014/2015

void setup() // funzione di configurazione dei Input/Output { pinmode(pin, OUTPUT); // setta il 'pin' come uscita (output) } 1

Robot Beginner Kit 4WD

Attuatore a relè Manuale di istruzioni

Gestione dell'interrupt con il microcontrollore ATMega328 (scheda Arduino)

11^ parte : Come gestire i servomotori con Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

CORSO ARDUINO. Jacopo Beli Giulio Fieramosca Luca Mati GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii 1

Strutture di controllo e cicli

POLITECNICO DI BARI! DIPARTIMENTO DI INGEGNERIA ELETTRICA E DELL INFORMAZIONE!

Robot Beginner Kit con Arduino l elettronica

Programma di simulazione per Arduino

Descrizione dell'obiettivo dello sketch per Arduino ed eventualmente differenze rispetto ai precedenti.

La Keyes 4 relay non è proprio una shield nel senso classico definito nel mondo arduino in quanto una shield dovrebbe essere concepita per essere

Introduzione all'uso di Arduino lezione 1

STUDIO PER UN SIMULATORE DI CONTROLLORE PER MOTORI

Progetto per il corso di Microcontrollori: Gestore Ambientale

Arduino. Sezione di Misure e Tecniche Sperimentali

Arduino Tutorial #7 - Nunchuk materiale utilizzato Arduino, cavi elettrici, breadboard, nunchuk, 3 led.

Transcript:

Controllo di velocità e verso di un motore DC con Arduino con L293NE Per controllare un motore DC (funzionante in corrente continua) con Arduino, devi utilizzare il circuito integrato Ponte H (nel mio caso un L293NE della Texas Instruments o L293D o SN754410) Il ponte H può, invertendo la polarità dell uscita a cui è collegato il motore, variarne il verso di rotazione.

Controllo di velocità e verso di un motore DC con Arduino con L293NE Nella tabella sottostante puoi vedere il comportamento del motore a seconda dei settaggi dei pin dell integrato e lo schema del circuito. Controllando l'en pin del chip con un pin digitale di Arduino: settandolo HIGH o LOW accenderemo 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. Sei l motore che usate può andare a 5V e a meno di 500 ma potete usare i 5V di Arduino. Questo é molto raro. 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.

1 SCHEMA Il primo pulsante serve ad accendere o spegnere il motore, il secondo cambia la direzione di rotazione, mentre il potenziometro aumenta o diminuisce la velocità di rotazione.

SKETCH 1/4 Definiamo le costanti e le variabili poi recuperate nel loop(). const int controlpin1 = 2; const int controlpin2 = 3; const int accendimotore = 9; const int pulsantedirezione = 4; const int pulsanteonoff = 5; const int potenziometro = A0; int statopulsanteonoff; int statopulsanteonoffprecedente; int statopulsantedirezione; int statopulsantedirezioneprecedente; //costanti di riferimento //ai pin //variabili di stato int motoreattivo; int velocitamotore; int direzionemotore = 1;

SKETCH 2/4 Nel setup() inizializziamo i pin dei pulsanti in INPUT e quelli collegati al ponte H in OUTPUT. void setup() { pinmode(pulsantedirezione, INPUT); //inizializzazione della modalità dei pin pinmode(pulsanteonoff, INPUT); pinmode(controlpin1, OUTPUT); pinmode(controlpin2, OUTPUT); pinmode(pulsanteonoff, OUTPUT); //imposto accendimotore su LOW digitalwrite(accendimotore, LOW); //inizialmente il motore sarà spento

SKETCH 3/4 Nel loop() associo dei valori a delle variabili, con digitalread(). Alla variabile velocitamotore viene associata la lettura analogica di potenziometro, che genera un numero che va da 0 a 1023. Siccome la funzione analogwrite() che verrà utilizzata più avanti (riga 55) vuole un numero compreso tra 0 e 255, il valore restituito da analogread() è diviso per 4. void loop() { statopulsanteonoff = digitalread(pulsanteonoff); delay(1); statopulsantedirezione = digitalread(pulsantedirezione); velocitamotore = analogread(potenziometro)/4; if (statopulsanteonoff!= statopulsanteonoffprecedente) { if (statopulsanteonoff == HIGH) { motoreattivo =! motoreattivo; if (statopulsantedirezione!= statopulsantedirezioneprecedente) { if (statopulsantedirezione == HIGH) { direzionemotore =! direzionemotore;

SKETCH 4/4 if (direzionemotore == 1) { digitalwrite(controlpin1, HIGH); digitalwrite(controlpin2, LOW); else { digitalwrite(controlpin1, LOW); digitalwrite(controlpin2, HIGH); if (motoreattivo == 1) { analogwrite(accendimotore, velocitamotore); else { analogwrite(accendimotore, 0); statopulsantedirezioneprecedente = statopulsantedirezione; statopulsanteonoffprecedente = statopulsanteonoff;

Sono poi presenti tre quattro if: Se lo stato del pulsante di accensione del motore è diverso da quello precedente ed ha stato logico alto, lo stato logico del motore cambia (se prima era acceso ora è spento e viceversa) Stesso ragionamento per il pulsante di cambio direzione Se direzionemotore corrisponde a 1, il primo pin di controllo ha stato logico alto, mentre il secondo ha stato logico basso. Altrimenti viceversa Se il motore è attivo viene eseguita la funzione analogwrite() sul pin accendimotore (9) ed associato il valore di velocitamotore. In questo modo, grazie ad una modulazione in PWM, la velocità cambia Infine associamo alle variabili in -Precedente le corrispondenti dell' attuale loop(). In questo modo nel successivo loop() possono essere richiamate. Guarda il video https://www.youtube.com/watch?v=iyxwsqwglh0

2 SCHEMA

Con Alimentazione esterna

Codice 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.

Codice 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 // 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);

Codice test motori via seriale 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

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 fino 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

COME FUNZIONA UN PONTE H 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).