Documentos de Académico
Documentos de Profesional
Documentos de Cultura
:
Taller de
Arduino
Presentación
Contenido
Hardware
Software
Comunidad
Componentes
arduino
protoboard
un servomotor
un potenciometro
- al inicio
Circuito
Los servomotores son motores eléctricos con un mecanismo
interno de control que nos da la posibilidad de controlarlo su
posición. Normalmente están construidos para girar en un angulo
de de 0 a 180 grados en ambos sentidos, aunque los hay que
tienen giro continuo.
El servomotor de nuestro kit es un servomotor de 5 volts y tiene
tres cables para hacerlo funcionar. Un cable rojo, que se debe
conectar a 5 volts. Un cable negro, que se debe conectar a tierra.
Y un tercer cable, amarillo en nuestro motor, que es el cable de
control y que vamos a conectar a un pin de salida del arduino.
- al inicio
Diagrama
- al inicio
Código
Para utilizar los servomotores desde el Arduino contamos con la
biblioteca Servo, que nos permite controlarlo de manera muy
simple.
Lo primero que debemos hacer es incorporar la biblioteca Servo
en nuestro sketch, que es una de las bibliotecas que ya viene con
el software del Arduino.
Con esta biblioteca primero hay que crear un objeto Servo.
Despues hay que ligarlo al pin con el que vamos a controlarlo y
finalmente con la función write() lo colocamos en la posición
deseada.
En este caso lo que vamos a hacer es leer el valor de un
potenciometro, entre 0 y 1023, y usando la función map() lo
vamos a convertir a un valor entre 0 y 180 grados, con el que
moveremos el servo.
/*
*/
void setup() {
miservo.attach(pinServo); // liga el servo al pin 9
}
void loop() {
valPot = analogRead(pinPotenciometro); // leemos el
valor del potenciometro
angulo = map(valPot, 0, 1023, 0, 180); // convertimos
los valores del potenciometro a los del servo
Variantes
Puedes hacer que el potenciometro gire en un sentido y el servo
en el otro.
Puedes usar otros sensores analógicos para mover el servo.
- al inicio
Referencias:
Arduino Reference: Servo Library
Referencia Arduino: Biblioteca Servo
Biblioteca para el manejo y control de servomotores
- al inicio
- al inicio
Esta página está siendo creada para apoyar las actividades del
Taller de Arduino en la Fac. de Ciencias de la UNAM.
Para mayor información comunicarse con eduardosac (at) gmail.com
http://arduineando.matem.unam.mx/proyectos/potenciometroServo
Categorie
o
About
Chi siamo
Ebook
PackPost
Partecipa anche tu
Area Riservata
Policy
Meccatronici, risulta inevitabile acquisire i dati, processarli e generare un’uscita da inviare ad esempio ad un motore elettrico.
Nonostante la sua semplicità, la capacità di calcolo dell’Arduino è ridotta, non si può di certo pensare alla creazione di matrici ed
operazioni ad esse annesse, risulta quindi molto conveniente sfruttare le capacità di un software di calcolo numerico come
Matlab.
COME INIZIARE
Innanzitutto occorre stabilire una comunicazione client-server tra Arduino e Matlab, rifacendoci al precedente
1
sudo chmod 777 usr/local/matlab/R2012a/toolbox/local/pathdef.m
1
install_arduino
Installati i protocolli di comunicazione, occorre infine collegare Arduino, e digitare da Matlab il comando:
Matla copy code
b M | | ?
2
a=arduino('port')
in cui al posto di port per gli utenti di Windows bisogna specificare la porta COM dove l’Arduino è collegato, ad esempio
Se è andato tutto a buon fine, sulla Command Window di Matlab appare il seguente messaggio:
copy code
C | | ?
2
>> a=arduino('/dev/ttyUSB1');
3
Attempting connection ........
4
Basic I/O Script detected !
5
Arduino successfully connected !
6
>>
REAL TIME PLOT
Instaurata la connessione con Arduino, possiamo raccogliere i dati letti da una porta, ed effettuare su di essi varie operazioni, tra
le più comuni visualizzare l’andamento grafico in tempo reale. Per prima cosa colleghiamo un sensore all’Arduino, in questo
esempio è stato utilizzato un potenziometro angolare multigiro, di seguito viene riportato lo schema circuitale in Fritzing
In questo caso si è considerato come pin di lettura l’AnalogIn 0, di conseguenza la caduta di tensione ai capi del potenziometro
viene letta da tale pin e, digitalizzata mediante l’A/D converter dell’Arduino assumerà un valore che varia tra 0 e 1023.
Inizializziamo il tempo, il vettore in cui verranno salvati i valori in ingresso all’Arduino, il passo del ciclo, e la condizione di ciclo:
Matla copy code
b M | | ?
2
t=0;
3
x=0;
4
interv=1000; % consideriamo 1000 campioni
5
passo=1; %abbassando il passo si ha un numero di cicli e quindi si acquisiscono più dati
6
successivamente facciamo partire un ciclo while al cui interno, viene recuperato il dato dalla porta analogica, salvato in coda al
vettore x e plottato:
Matla copy code
b M | | ?
2
while(t<interv)
3
b=a.analogRead(0);
4
x=[x,b];
5
plot(x);
6
Bisogna però aggiungere qualche riga di codice per completare il tutto ovvero manca di definire le caratteristiche (limite
inferiore e superiore) dell’asse dell’ascissa e dell’ordinata, inserire la griglia, incrementare la variabile t, ed infine aggiornare il
grafico. Nel caso in questione il potenziometro adottato varia all’interno della fascia in ordinata tra i valori 680 e 800.
Matla copy code
b M | | ?
2
%sempre all'interno del ciclo while
3
axis([0,interv,680,800]) %asse_x [0-interv] asse_y [680,800]
4
grid %disegna la griglia
5
t=t+passo; %aggiornamento della variabile t
6
drawnow
7
end %fine del ciclo while
CODICE COMPLETO
in definitiva il codice completo da utilizzare in Matlab è il seguente:
Matla copy code
b M | | ?
01
02
t=1;
03
x=0;
04
while(t<interv)
05
b=a.analogRead(0);
06
x=[x,b];
07
plot(x);
0
8
axis([0,interv,680,800]);
09
grid
10
t=t+passo;
11
drawnow;
12
end
Oss
Per valori troppo grandi della variabile interv, o per un valore di passo troppo basso, la dimensione del vettore x potrebbe
ecco il risultato…
http://www.xploreautomation.com/arduinomatlab-real-time-plot/
CONTROL DE MOTORES
CC
con Arduino.
Dom 26.10.2014 CRTL+D, para volver a visitarnos.Creado por: V.
García.
Buscar
Tema:
PROLOGO.
Este artículo, se puede considerar como una aplicación que
puede ser puesta en práctica, de la teoría que se describe, en la
que se emplean dos motores de corriente continua cuya aplicación
puede responder a la necesidad de un proyecto, utilizando su
propia placa PCB o si se prefiere a un pequeño robot, en la que
adquirir cierta experiencia en esta materia.
EL CIRCUITO L293.
El circuito integrado en el que nos basaremos es el L293d, en
sus hojas de datos, podemos ver que, está compuesto por cuatro
amplificadores con salida triestado, capaz de proporcionar una
corriente de salida de hasta 1A por canal a tensiones de
alimentación desde 4'5V a 36V y con una entrada habilitable (chip
Enable) que permite un control de salida de dos amplificadores.
Todas sus entradas son compatibles TTL. En el L293b, se deben
utilizar diodos de alta velocidad externos, en la salida, para la
supresión de transitorios inductivos. En la figura que sigue, se
puede apreciar la tabla de la verdad, con la cual debe
familiarizarse para tener un conocimiento más amplio de como se
comporta este circuito.
No debemos olvidar:
1)- Refrigerar en lo posible este circuito integrado, ya que puede
adquirir bastante temperatura, compruebe este dato, si va a
aplicar de forma continuada este chip.
2)- Utilice un pequeño puente tipo W01F, para evitar disgustos
con las tensiones inducidas del motor.
EL ESQUEMA ELÉCTRICO.
El circuito eléctrico en el que nos basaremos es el recomendado
por el fabricante del IC y que es mostrado en la siguiente figura.
Podemos distinguir dos pares de amplificadores con salidas
triestado, con un control habilitador (EN) común para ambos,
cuyas propiedades descubriremos más adelante. Por el momento
nos ocuparemos de la parte sencilla.
INICIO SENCILLO.
La figura anterior es bastante explicita. Muestra dos montajes
distintos como ya he mencionado. Vamos a empezar por el control
de un motor de juguete M1. En este ejercicio, he supuesto que no
es necesario utilizar el chip L293, ya que, en muchos casos, no
tendremos que desembolsar el costo del circuito integrado, con un
pequeño transistor podemos salir al paso.
CÓDIGO: SELECCIONAR TODO
//
// motorcc.pde
//
void setup() {
void loop() {
digitalWrite(transistorPin, HIGH);
delay(1000);
digitalWrite(transistorPin, LOW);
delay(1000);
}
CÓDIGO: SELECCIONAR TODO
//
// motordc.pde
//
int getPot() {
int v;
v = analogRead(pot);
v /= 4;
v = max(v, 50);
v = min(v, 255);
return v;
}
int motorFoward() {
analogWrite(motorPin, getPot());
delay(10);
digitalWrite(motorPin, LOW);
}
CÓDIGO: SELECCIONAR TODO
//
// Funccion: CC_motor_control_pot
//
// Utilizar un potenciometro para controlar motor
CC
//
void setup() {
Serial.begin(9600);
pinMode(motor_pin, OUTPUT)
}
void loop() {
int pot_val, motor_speed;
pot_val = analogRead( sensor_pin );
motor_speed = pot_val*255.0/1024.0; // Incluir
decimal
/* Sutil: No utilice valores enteros como 255 y
1024 aquí. Compiladores agresivo pre-cálculo
la división entera del 255/1024 como cero.
*/
analogWrite( motor_pin, motor_speed); // hacer
cosas útiles
}
y = f(x)
donde f es un
mapeado lineal.
int int_scale(int x, int xmin, int xmax, int ymin, int ymax) {
int y; y = ymin + float(ymax - ymin)*float( x -
xmin )/float(xmax - xmin);
return(y);
}
Nota.- int Devuelve un entero.
int_scale Es el nombre de la función.
int x Es la primera entrada llamada x.
float Se usa float para una mejor precisión.
return(y) Devuelve el valor almacenado en y.
Donde: return(y) = motor_speed
CÓDIGO: SELECCIONAR TODO
//
// Funccion: CC_motor_control_pot
//
// Utilizar un potenciometro para controlar motor
CC
void setup() {
Serial.begin(9600);
pinMode(motor_pin, OUTPUT)
}
void loop() {
EL CÓDIGO.
La teoría es bastante sencilla. Se trata de poner, un estado lógico
1 en la entrada A1, al mismo tiempo que en la A2 ponemos un 0
lógico. El código para este caso es sencillo, veamos un ejemplo:
CÓDIGO: SELECCIONAR TODO
/*
* motorpwmpot.pde
*
* Hace girar un motor de CC mediante un L293
conectado a los pines digitales
* 7 y 8 controlando la velocidad por PWM sobre el
pin Enable del L293 en base
* a la lectura de un potenciometro conectado al
pin analógico 2
*
* Basado en un código de: Miguel Grassi
* www.miguelgrassi.com.ar
*
* Modificado por: V. García el 07.02.2011
*
*/
void loop() {
digitalWrite( pinA1, HIGH); // Valores ALTO en A
y BAJO en B simulaneamente
digitalWrite( pinB1, LOW); // hacen girar el
motor 1 hacia ADELANTE
valorPot = analogRead(pinPot); // Lee el valor
del potenciometro
valorVeloc = map(valorPot, 0, 1023, 55, 255);
//Convierte un valor entre 0 y 1023 al rango 0-
255
// valorVeloc = valorPot / 4 ; // segunda
opción
analogWrite(pinEN1, valorVeloc);// y establece la
velocidad del motor con ese valor
}
/* blinks an LED */
void blink(int whatPin, int cuantoTiempo, int
milliSecs) {
for (int i = 0; i < cuantoTiempo; i++) {
digitalWrite(whatPin, HIGH);
delay(milliSecs/2);
digitalWrite(whatPin, LOW);
delay(milliSecs/2);
}
}
Vídeo.
EL L293
El circuito integrado L293B, es un driver de 4 canales, capaz de
proporcionar una corriente de salida de hasta 1A por canal. Cada
canal, se puede controlar por señales de entrada compatibles TTL
y cada pareja de canales dispone de una señal de habilitación que
desconecta las salidas de los mismos.
CÓDIGO: SELECCIONAR TODO
/* Control de un motor DC con puente H
* motorL293h.pde
*
* http://itp.nyu.edu/physcomp/Labs/DCMotorControl
*
* Modificado por V. Garcia el 08.02.2011
*
* Puede adaptarse a un bot con un motor en las
ruedas de traccion
* y una rueda de giro libre que pivote cambiando
la direccion
*
void setup() {
// pone el switch como una entrada
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH);
// pone todos los otros pines usados como
salidas
pinMode(motor1Pin, OUTPUT);
pinMode(motor2Pin, OUTPUT);
pinMode(speedPin, OUTPUT);
pinMode(ledPin, OUTPUT);
void loop() {
// si el switch es high, motor gira en una
direccion
if (digitalRead(switchPin) == HIGH) {
digitalWrite(motor1Pin, LOW); // pone motor1
del H-bridge low
digitalWrite(motor2Pin, HIGH); // pone motor2
del H-bridge high
}
/* blinks an LED */
void blink(int whatPin, int cuantoTiempo, int
milliSecs) {
int i = 0;
for ( i = 0; i < cuantoTiempo; i++) {
digitalWrite(whatPin, HIGH);
delay(milliSecs/2);
digitalWrite(whatPin, LOW);
delay(milliSecs/2);
}
}
Una vez más, si lo desea, puede copiar y pegar este código, déle
un nombre y cárguelo en su Arduino.
Esto es todo, por este simple tutorial. Si tiene interés en leer más
sobre Arduino, revele esta sección. (Mostrar/Ocultar)
Volver al Ídice de artículos Arduino.
http://hispavila.com/3ds/atmega/motorescc.html