Tipos de motores:
Conexión básica de un motor de corriente alterna con relé:
Consta de:
Sirve para controlar marcha/paro y sentido de giro de hasta dos motores de DC. Se vende de un circuito integrado DIP16.
Se controla mediante tres pines:
Es probable que la alimentación USB no baste para mantener Arduino + motores.
Los H-bridges son circuitos diseñados para cambiar el sentido de giro de motores DC. Recuerdan mucho a los rectificadores de onda completa por puente de Graetz:
El L293 es un puente en H con los diodos (en el dibujo transistores) integrados:
Realiza un control todo/nada de un motor DC usando un L293. Programa la siguiente secuencia:
Tabla de funcionamiento del L293:
Ahora cablea el motor usando una salida PWM (~) en la pata ENABLE. Modifica el programa para tener 5 tramos de velocidad (0, 51, … 255). La secuencia será:
Son más caros, pero mucho más par que los motores DC. Se utilizan, por ejemplo, en coches teledirigidos (en la dirección o en el acelerador). En industria los hay con muchísimo más “par”. Según el ancho de pulso, se colocan en una posición u otra.
La programación es complicada… pero alégrate, alguien ha escrito la librería Servo.h
Una librería es una colección de funciones que sirven para facilitar la vida al programador al usar programas orientados a un ámbito concreto. Por ejemplo, matemáticas
math.h
, o periféricos como tarjetas de redethernet.h
Prueba el ejemplo Knob para comprender el uso de Servo.h
:
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Hacer un programa que reciba por puerto serie una posición (izquierda, centro, derecha) y coloque el servo en consecuencia.
Recuerda: Serial.available()
, caracter = Serial.read()
Aportan el control más preciso. Se usan en impresoras. Tienen muchas bobinas que colocan y bloquean el motor en una posición concreta.
Usaremos la librería Stepper.h
para programar.
Básate en este: https://www.tinkercad.com/things/ik4eHFlIzxe-nivel-basico-motor-paso-a-paso-1
Prueba el ejemplo stepper motor knob.
/*
* MotorKnob
*
* A stepper motor follows the turns of a potentiometer
* (or other sensor) on analog input 0.
*
* http://www.arduino.cc/en/Reference/Stepper
* This example code is in the public domain.
*/
#include <Stepper.h>
// change this to the number of steps on your motor
#define STEPS 100
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);
// the previous reading from the analog input
int previous = 0;
void setup() {
// set the speed of the motor to 30 RPMs
stepper.setSpeed(30);
}
void loop() {
// get the sensor value
int val = analogRead(0);
// move a number of steps equal to the change in the
// sensor reading
stepper.step(val - previous);
// remember the previous value of the sensor
previous = val;
}
+0,25 en nota del trimestre
Pídeme el motor, programa una aplicación que permita gobernar un stepper por teclado con Serial.read()
, muéstramela en funcionamiento y envíame el código.
https://www.inventable.eu/2018/02/09/uln2003-driver-salida-microcontroladores/
¡Qué pena haberlo descubierto tarde! https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino?view=all
Más adelante: LCDs, ethernet:
Fuente: “Introducción ao Arduino” - David Touceda Bugallo, 2014