Professional Documents
Culture Documents
2016
Entrad
as
Salid
UAR
Memo
ria
32kb
7,5
12
32kb
10
54
16
14
256kb
12,5
14
32kb
2,5
Modelo
digital
es
Uno r3
16
Leonardo
20
Mega r3
Mini 05
analgi
cas
as
PWR
Precio
FRITZING
Fritzing es el programa por excelencia para la realizacin de
esquemas elctricos en proyectos con Arduino. Dispone bibliotecas con
la mayora de componentes, incluido por supuesto los propios Arduino,
placas de conexiones, led, motores, displays etc. Adems permite hacer
esquemas elctricos, cambiar el color de los cables, disear nuestro PCB
final un sin fin de opciones que convierten a este programa en una
herramienta muy til.
PREPARAR LA CONEXIN
En primer lugar, conectamos nuestra placa Arduino mediante un
cable USB A-B, del tipo que se emplean habitualmente para conectar
impresoras. De momento no hace falta la conexin de alimentacin o
cable adicional, para realizar la programacin es suficiente nicamente
con el USB.
Funcion setup: Esta funcin se ejecuta cada vez que se enciende la placa de
Arduino, o se pulsa la tecla Reset. Realiza funciones de inicializacin de
perifricos, comunicaciones, variables, etc.
CARGANDO UN EJEMPLO
Para probar el funcionamiento de nuestro montaje vamos a emplear
uno de los ejemplos incluidos en el IDE de Arduino.
void loop() {
digitalWrite(led, HIGH); // encender LED
delay(1000);
// esperar un segundo
digitalWrite(led, LOW); // apagar LED
delay(1000);
// esperar un segundo
}
ALIMENTACIN EXTERNA
Una vez hemos programado nuestra placa es momento de quitar el
cable USB y realizar una alimentacin externa. Arduino UNO y
MEGA pueden ser alimentados mediante dos medios. El origen de la
alimentacin se selecciona automticamente.
{
// establece el pin digital como salida:
pinMode(ledPin, OUTPUT);
}
void loop()
{
// Aqu es donde pondramos el cdigo que debe ejecutarse durante todo el
// tiempo.
//
//
//
//
CONDICIONAL ABREVIADO
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
{
// accion B
}
if (variable < 10)
{
// accion A
}
else if (variable >= 100)
{
// accion B
}
else
{
// accion C
}
BUCLE FOR
BUCLE WHILE
1 variable = 0;
2
3 while(variable < 100){
4
// accion
5
variable++;
6}
BUCLE DO WHILE
1 do
2{
3
//accion
4
variable++;
5 } while (variable < 100);
QU ES EL PUERTO DE SERIE?
Un puerto es el nombre genrico con que denominamos a los
interfaces, fsicos o virtuales, quepermiten la comunicacin entre dos
ordenadores o dispositivos.
Un puerto serie enva la informacin mediante una secuencia de
bits. Para ello se necesitan al menos dos conectores para realizar la
comunicacin de datos, RX (recepcin) y TX (transmisin). No obstante,
pueden existir otros conductores para referencia de tensin,
sincronismo de reloj, etc.
Por el contrario, un puerto paralelo enva la informacin mediante
mltiples canales de forma simultnea. Para ello necesita un nmero
superior de conductores de comunicacin, que varan en funcin del tipo
de puerto. Igualmente existe la posibilidad de conductores adicionales
adems de los de comunicacin.
CDIGOS DE EJEMPLO
RECIBIR INFORMACIN DESDE EL
ARDUINO
En este primer cdigo vamos a recibir el valor de un contador enviado
desde la placa Arduino. Este valor se incrementa cada segundo.
Podemos observar como se reciben los valores desde del monitor serial.
1
2
3
4
5
6
7
8
9
1
0
1
1
int cont=0;
void setup(){
//iniciamos el puerto de serie
Serial.begin(9600);
}
void loop(){
//Imprimimos el valor del contador
Serial.print("Contador: ");
Serial.println(cont);
//incrementamos el contador y esperamos un segundo
1
2
1
3
cont++;
1
delay(1000);
4
}
1
5
1
6
ENVIAR INFORMACIN AL
ARDUINO
En este ejemplo empleamos el puerto de serie para encender o apagar
el LED integrado en la placa Arduino. Para ello enviamos un carcter a la
placa Arduino, empleando el monitor serial. En caso de enviar a la placa
Arduino apaga el LED, y en caso de enviar b lo enciende.
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
int option;
int led = 13;
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop(){
//si existe datos disponibles los leemos
if (Serial.available()>0){
//leemos la opcion enviada
option=Serial.read();
if(option=='a') {
digitalWrite(led, LOW);
Serial.println("OFF");
}
if(option=='b') {
digitalWrite(led, HIGH);
Serial.println("ON");
}
}
}
int option;
int led = 13;
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop(){
//si existe informacin pendiente
if (Serial.available()>0){
//leeemos la opcion
char option = Serial.read();
//si la opcion esta entre '1' y '9'
if (option >= '1' && option <= '9')
{
//restamos el valor '0' para obtener el numeroenviado
option -= '0';
for(int i=0;i<option;i++){
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
}
}
}
MONTAJE
Por su parte, el montaje elctrico en una protoboard quedara de la
siguiente manera.
EJEMPLOS DE CDIGO
A continuacin tenis algunos ejemplos de cdigo. En el siguiente,
usamos las entradas digitales para hacer parpadear el LED integrado en
la placa mientras el LDR recibe luz suficiente.
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
const
const
const
const
long A = 1000;
//Resistencia en oscuridad KO
int B = 15;
//Resistencia a la luz (10 Lux) KO
int Rc = 10;
//Resistencia calibracion KO
int LDRPin = A0; //Pin del LDR
int V;
int ilum;
void setup()
{
Serial.begin(115200);
}
void loop()
{
V = analogRead(LDRPin);
//ilum = ((long)(1024-V)*A*10)/((long)B*Rc*V); //usar si
ilum = ((long)V*A*10)/((long)B*Rc*(1024-V)); //usar si
Serial.println(ilum);
delay(1000);
}
1
8
1
9
2
0
2
1
2
2
2
3
ESQUEMA ELCTRICO
El esquema elctrico sera el siguiente.
MONTAJE
Por su parte, el montaje elctrico en una protoboard quedara de la
siguiente manera.
EJEMPLOS DE CDIGO
A continuacin un ejemplo de cdigo. El siguiente cdigo realiza la
lectura de la resistencia del termistor, y emplea la ecuacin de SteinhartHart para calcular la temperatura y mostrarla por puerto de serie.
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
#include <math.h>
const int Rc = 10000; //valor de la resistencia
const int Vcc = 5;
const int SensorPIN = A0;
float A = 1.11492089e-3;
float B = 2.372075385e-4;
float C = 6.954079529e-8;
float K = 2.5; //factor de disipacion en mW/C
void setup()
{
Serial.begin(9600);
}
void loop()
{
float raw = analogRead(SensorPIN);
float V = raw / 1024 * Vcc;
float R = (Rc * V ) / (Vcc - V);
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
float logR = log(R);
2
float R_th = 1.0 / (A + B * logR + C * logR * logR * logR );
5
2
float kelvin = R_th - V*V/(K * R)*1000;
6
float celsius = kelvin - 273.15;
2
7
Serial.print("T = ");
2
Serial.print(celsius);
8
Serial.print("C\n");
2
delay(2500);
9
}
3
0
3
1
3
2
3
3
3
4
3
5
3
6
PRECIO
El sensor de ultrasonidos HC-SR04 es un sensor barato. Podemos
encontrar unidades por 0,65 en AliExpress.
ESQUEMA ELCTRICO
El esquema elctrico que necesitamos es el siguiente.
MONTAJE
Mientras que el montaje en una protoboard sera el siguiente.
EJEMPLO DE CDIGO
Para activar el sensor necesitamos generar un pulso elctrico en el
pin Trigger (disparador) de al menos 2ms. Nosotros generaremos un
pulso de 5ms. Previamente, pondremos el pin a Low durante 2ms para
asegurar un disparo limpio.
Posteriormente usamos la funcin pulseIn para obtener el tiempo
requerido por el pulso para volver al sensor. Finalmente, convertirmos el
tiempo en distancia mediante la ecuacin correspondiente.
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
digitalWrite(TriggerPin, LOW); //para generar un pulso limpio
1
delayMicroseconds(2);
2
digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 5ms
2
delayMicroseconds(5);
2
digitalWrite(TriggerPin, LOW);
3
2
4
duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en
2 microseg
5
2
distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm
6
return distanceCm;
2 }
7
2
8
2
9
3
0
3
1
3
2
Un optointerruptor infrarrojo
-
Componentes
arduino
protoboard
un led
Circuito
El sensor tiene dos componentes que tenemos que conectar. Un led emisor de luz
infrarroja y un fototransitor sensible a esta luz.
En la parte superior del sensor, cada lado esta marcado con una letra: E para el
emisor y D para el detector. Y en ambos lados, tiene tambin un simbolo + que marca
la pata del nodo, el positivo, de cada componente.
El led emisor lo tenemos que conectar como hemos conectado los otros leds. La pata
del nodo, el positivo, a 5 Volts. La pata del ctodo, el negativo, a tierra, a travs de
una resistencia de 220 Oms.
Del fototransitor, tenemos que conectar el colector, el positivo, a 5 Volts y el emisor, a
travs de una resistencia pulldown de 10 KOms a tierra. Es en este mismo punto, la
salida del emisor, donde conectaremos el pin de entrada del Arduino para sensar. Si el
fototransitor est recibiendo la luz infrarroja, estar cerrado y entonces este punto
estar a 5 Volts. Si el paso de la luz infrarroja est interrumpido, el fototransistor estar
abierto y entonces tendremos los 0 Volts de la resistencia pulldown.
Como en el caso del botn, instalaremos tambin otro circuito con un led, para
prenderlo y apagarlo segn el estado del sensor.
al inicio
Cdigo
Variantes
En lugar de un slo led, podemos usar un led bicolor, que se prenda en
verde cuando el sensor este libre y en rojo cuando interrumpamos la seal
con algun objeto.
Ejercicio 3: servos
Los servomotores tienes tres cables: alimentacin (rojo), GND (que puede ser
negro o marrn) y seal (que puede ser blanco o naranja). El cable de
alimentacin debe ser conectado al pin 5V de la placa Arduino. El cable GND
debe ser conectado al pin GND de la placa Arduino. El pin de seal se conecta
al pin 9 de la placa Arduino UNO para este ejercicio.
AVISO: En este ejercicio vamos a utilizar un micro servo de 9g cuyo
consumo es tolerado por la placa, para otros montajes en los que el servo
Con un cdigo tan sencillo haremos que el servo se mueva segn movamos el
potencimetro de modo que al estar el potencimetro en el lmite inferior de
su recorrido el servo estar en la posicin de 0, si centramos el potencimetro
el servo estar en la posicin de 90 y si llevamos el potencimetro a su lmite
superior el servo alcanzar la posicin de 180.
Vamos a aprovechar este ejercicio para introducir un mtodo que puede ser
utilizado tanto para el de depurado de cdigo como el calibrado de un
actuador o un sensor.
Imaginemos que tenemos hecho nuestro Sketch, lo subimos a la placa y, a
pesar de estar correctamente escrito (no da errores el compilador), no hace lo
que nosotros queremos. El error puede estar en la forma en que trabajamos
con los valores de forma interna y eso no lo podemos ver a menos que los
mostremos por el monitor serie.
Otro caso puede ser que, una vez realizado nuestro montaje, queramos que el
servo comience su recorrido desde una posicin determinada y no sabemos
cual es. Entonces podemos utilizar el monitor serie para calibrar nuestro servo
y su recorrido.
Para ello activaremos el puerto serie incluyendo en el setup() la lnea:
1 Serial.begin(9600);
Por ltimo, y para darle tiempo al monitor serie a mostrar los datos sin que
estos bailen a toda velocidad cambiaremos el valor del comando delay() a
500ms. De esta forma nuestro Sketch mover el servo y nos mostrar la
posicin en la que se encuentra cada medio segundo, as podemos dejar el
servo en la posicin exacta que queramos viendo el nmero contenido dentro
de la variable val.
Subiremos el Sketch a la placa y activaremos el monitor serie. No pongo el
ejercicio resuelto para que os esforcis un poquito.
El tipo de seal que se le enva al servo desde la placa Arduino UNO es la seal
de control que se utiliza en todos los mecanismos de radio control (servos,