Universoarduino - .15 Proyectos D - Jose Vicente Garlito Aviles
Universoarduino - .15 Proyectos D - Jose Vicente Garlito Aviles
Jose V. Garlito
INDICE
Arduino…Que es?
IDE Arduino.
Potenciómetro.
Sensor de movimiento.
Led RGB.
Joystick.
PÁGINA 1
Arduino…Que es?
Arduino…Que es? es una plataforma de hardware libre, basada en una placa con un
microcontrolador y un entorno de desarrollo, diseñada para
confuso para los nuevos usuarios. Cuando tengamos que elegir qué
modelo de comprar, una de las cosas que tendremos que tener en cuenta
es la cantidad de entradas y salidas que tiene, especialmente las analógicas dado que
son las que más puedan limitar nuestro proyecto.
necesitaremos un modelo u otro. Lo normal sería empezar por una Uno r3, es el modelo
más estándar y el más habitual a la hora de crear nuestros
proyectos.
A la hora de proyectos más grandes como robots, impresoras 3D, etc… nos
Una vez que lleguemos a ser usuarios avanzados, lo normal sería usar la
Ahora solo nos queda comprar nuestra placa Arduino que mejor nos valla
PÁGINA 2
IDE Arduino
Una vez tenemos nuestra placa arduino, lo que tenemos que hacer, es
arduino.
Hay varios IDE, pero vamos a ver hoy es el IDE oficial de arduino. En otras entradas
veremos alguno más y así tendremos más opciones de
programación.
PÁGINA 3
WINDOWS:
UBUNTU – LINUX:
Si queréis la última versión Beta o Nightly debéis escribir los siguiente: sudo rm –r
/usr/share/arduino
wget http://http://downloads.arduino.cc/arduino–1.5.4–linux64.tgz
instalación.
PÁGINA 4
Abrimos el IDE arduino.
PÁGINA 5
Seleccionamos el puerto.
Con esto ya lo tenemos todo listo para empezar a trabajar con nuestra
placa arduino.
PÁGINA 6
NUESTRO PRIMER PROGRAMA EN ARDUINO
objetos…
FUNCION SETUP: Se ejecuta al encender la placa o al darle al
autómata.
PÁGINA 7
Este ejemplo lo que hará será encender y apagar un led cada segundo.
PÁGINA 9
ENTRADAS DIGITALES Y ANALOGICAS
Una señal digital seria a ser lo mismo que si dijéramos que la luz está
encendida o apagada, que la puerta está abierta o cerrada, sí o no,1 o 0.no hay zona
intermedia, es un todo o nada. Es una señal que sale del punto A al punto B sin ningún
valor intermedio. Solo pueden entender dos niveles
valores de tensión de o a 5 voltios. Con una resolución de 1024 (10 bits). Si dividimos
5 entre 1024 veremos que es capaz de detectar variaciones de
PÁGINA 10
Usando como ejemplo un sensor de temperatura LM35, aumentaría el
información de la temperatura.
PÁGINA 11
SENSOR DE DISTANCIA HC-SR04
situemos).
Exactamente igual que pasa con los murciélagos, lo que hace el sensor es, mandar la
señal de sonido a una frecuencia tan alta, que la hace imposible para el oído humano.
Calcula el tiempo que tarda desde que emite la
PÁGINA 12
Lo que hacemos es crear una variable menor a la que recibe el sensor, que va a ser de
50cm, cuando la distancia baje de esa medida, saltara el led
como alarma.
#define trigPin 13
#define echoPin 12
#define led 2
void setup()
{ Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
void loop()
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Serial.println(String(distancia) + ” cm.”) ;
int Limite = 50 ;
else
delay (500) ;
PÁGINA 13
Para el ejemplo de hoy, vamos a utilizar también, un controlador de motor L298N, con
el que controlaremos los giros del motor. En otra entrada
PÁGINA 14
PÁGINA 15
int IN3 = 5;
int IN4 = 4;
void setup()
void loop()
delay(4000);
// Motor no gira
delay(500);
delay(4000);
// Motor no gira
delay(5000);
}
PÁGINA 16
registra.
PÁGINA 17
// Declaracion de variables
float tempC;
void setup()
Serial.begin(9600);
void loop()
tempC = analogRead(tempPin);
Serial.print(tempC);
delay(5000);
}
Una vez cargado el código pondremos el monitor de serie y empezaremos
a ver la temperatura…
PÁGINA 18
Cátodo común: todos los leds están unidos a una patilla común,
común.
Conexiones:Segmento A – pin 7
Segmento B – pin 8
Segmento C – pin 9
Segmento D – pin 10
Segmento E – pin 11
Segmento F – pin 12
Segmento G – pin 13
PÁGINA 19
Código:
void setup()
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite (10,d);
digitalWrite (11,e);
digitalWrite (12,f);
digitalWrite (13,g);
display (1,1,1,1,1,1,0); // 0
delay(pausa);
display (0,1,1,0,0,0,0); // 1
delay(pausa);
display (1,1,0,1,1,0,1); // 2
delay(pausa);
display (1,1,1,1,0,0,1); // 3
delay(pausa);
display (0,1,1,0,0,1,1); // 4
delay(pausa);
display (1,0,1,1,0,1,1); // 5
delay(pausa);
display (1,0,1,1,1,1,1); // 6
delay(pausa);
display (1,1,1,0,0,0,0); // 7
delay(pausa);
display (1,1,1,1,1,1,1); // 8
delay(pausa);
display (1,1,1,0,0,1,1); // 9
delay(pausa);
PÁGINA 20
MANDO INFRARROJOS IR
Para este ejemplo vamos a utilizar un mando infrarrojo ir y un receptor ir, en este
caso. el AX1838HS. Pero, podemos utilizar cualquier otro de los que podamos
encontrar en el mercado. El mando podremos utilizar
infrarrojo, diseñado para emitir una luz que no vemos… (con la cámara del móvil es
fácil que pudiéramos verlo).
PÁGINA 21
En el ejemplo de hoy vamos a ver algo sencillo. Él encendido y apagado de varios leds
con un mando a distancia ir.
Para sacar los códigos de los botones del mando que vamos a utilizar y
#include <NECIRrcv.h>
NECIRrcv ir(IRPIN) ;
void setup()
Serial.begin(115200) ;
ir.begin() ;
void loop()
while (ir.available()) {
ircode = ir.read() ;
Serial.println(ircode,HEX) ;
PÁGINA 22
#include <NECIRrcv.h>
NECIRrcv ir(IRPIN) ;
int ledamarillo = 7;
int ledverde = 6;
int ledazul = 5;
int ledrojo = 4;
void setup()
ir.begin() ;
pinMode(ledverde, OUTPUT);
pinMode(ledamarillo, OUTPUT);
pinMode(ledazul, OUTPUT);
pinMode(ledrojo, OUTPUT);
void loop()
while (ir.available()) {
ircode = ir.read() ;
switch (ircode) {
//para encender
case 0xF30CFF00://boton 1
break;
break;
break;
//para parar
break;
break;
break;
break; }
}
PÁGINA 23
Solo tendréis que cambiar los códigos de vuestro mando por los que hay
puestos, (que son los míos) y ya esta. Si una vez compilado el programa os da algún
error como este ‘F30CFF00’ was not declared in this scope.
PÁGINA 24
POTENCIÓMETRO
Un potenciómetro es una resistencia variable con la que podemos elegir el valor que
puede tomar. Así, podemos controlar la intensidad de corriente
máxima.
En el ejemplo de hoy vamos a ver como encender y apagar varios leds con
un potenciómetro.
PÁGINA 25
void setup(){
for(n=0;n<5;n++)
pinMode(leds[n],OUTPUT);
void loop(){
Serial.print(“\n”);
delay(2000);
/*Ahora definimos los límites de acuerdo con los valores que va obteniendo el
potenciómetro*/
if(pot >= 0 && pot <= 150){ //Definimos el rango para el cual se encenderá el LED
digitalWrite(leds[n],LOW);
for(n=0;n<2;n++)
digitalWrite(leds[n],HIGH);
for(n=2;n<5;n++)
digitalWrite(leds[n],LOW);
for(n=0;n<3;n++)
digitalWrite(leds[n],HIGH);
for(n=3;n<5;n++)
digitalWrite(leds[n],LOW);
}
for(n=0;n<4;n++)
digitalWrite(leds[n],HIGH);
for(n=4;n<5;n++)
digitalWrite(leds[n],LOW);
for(n=0;n<5;n++)
digitalWrite(leds[n],HIGH);
PÁGINA 26
controlar el giro del eje del motor. Su funcionamiento es muy parecido a la de los
servos, pero con la diferencia que no hay limitación en el giro de 180
grados. Si no, que puede dar vueltas enteras como un motor de corriente
continua.
recomienda el fabricante. El motor tiene cuatro bobinas que son excitadas en una
secuencia para hacer girar el eje del motor. Primero la bobina 1,
IN1 — Pin 7
IN2 — Pin 6
IN3 — Pin 5
IN4 — Pin 4
+ — GND
PÁGINA 27
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
void loop(){
count = 0;
else
count++;
void anticlockwise()
{
setOutput(i);
delayMicroseconds(motorSpeed);
void clockwise()
setOutput(i);
delayMicroseconds(motorSpeed);
}
PÁGINA 28
ángulo que cubre. No emiten radiaciones, solo reciben, por eso se dice que son pasivos.
Detectando la diferencia entre el calor emitido por un cuerpo y su alrededor es como
captan la presencia.
Materiales:
Arduino uno.
1 led.
1 resistencia 220 Ω.
PÁGINA 29
El código que vamos a utilizar es el siguiente:
void setup()
void loop()
else
PÁGINA 30
LED RGB
En este ejemplo vamos a ver los leds RGB arduino. En otras entradas
hemos utilizado leds de un solo color, pero según para que proyectos, nos pueden hacer
falta leds que emitan varios colores. Hay nos encontramos
los leds RGB, que son leds que emiten luz roja, verde y azul, (tres leds que comparten
el cátodo), y que podemos mezclar y variar modificando la
programación.
PÁGINA 31
void setup()
pinMode(i, OUTPUT);
analogWrite(3 , R) ; // Rojo
analogWrite(5, G) ; // Verde
analogWrite(6, B) ; // Azul
void loop()
{ Color(255 ,0 ,0) ;
delay(500);
Color(0,255 ,0) ;
delay(500);
Color(0 ,0 ,255) ;
delay(500);
Color(0,0,0);
delay(1000);
}
int Rojo = 3;
int Verde = 5;
int Azul = 6;
void setup(){
pinMode(Rojo, OUTPUT);
pinMode(Verde, OUTPUT);
pinMode(Azul, OUTPUT);
analogWrite(Rojo, 255-R);
analogWrite(Verde, 255-G);
analogWrite(Azul, 255-B);
void loop()
delay(500);
analogWrite(3 , R) ; // Rojo
PÁGINA 32
JOYSTICK
encendido o apagado.
En el ejemplo de hoy veremos el uso del joystick arduino para controlar el movimiento
de dos servos (ya vimos su funcionamiento en otro tutorial).
PÁGINA 33
//www.universoarduino.com
#include <Servo.h>
Servo tiltServo;
int joystickPanSpeed = 0;
int joystickTiltSpeed = 0;
void setup()
pinMode(servoPanPin, OUTPUT);
pinMode(servoTiltPin, OUTPUT);
panServo.attach(servoPanPin);
tiltServo.attach(servoTiltPin);
void loop()
{
tiltServo.write(servoTiltPosition);
delay(50);
PÁGINA 34
PÁGINA 35
manera:
SDA – 10
SCK – 13
MOSI – 11
MISO – 12
NC – N/A
GND – GND
RST – 9
3.3V – 3.3V
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
Servo servo;
#define SS_PIN 10
#define RST_PIN 9
int led_liberado = 5;
int led_negado = 6;
char st[20];
void setup()
pinMode(led_liberado, OUTPUT);
pinMode(led_negado, OUTPUT);
servo.attach(3);
servo.write(90);
Serial.begin(9600);
SPI.begin();
// Inicia MFRC522
mfrc522.PCD_Init();
// imprime mensajes en monitor serial
PÁGINA 36
Serial.println();
void loop()
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
if ( ! mfrc522.PICC_ReadCardSerial())
return;
byte letra;
Serial.print(mfrc522.uid.uidByte[i], HEX);
Serial.println();
Serial.print(“Mensaje : “);
contenido.toUpperCase();
// comprueba tarjeta 1
servo.write(-90);
digitalWrite(led_liberado, HIGH);
Serial.println();
delay(3000);
servo.write(90);
digitalWrite(led_liberado, LOW);
// comprueba tarjeta 2
if (contenido.substring(1) == “90 DB 34 00”)
Serial.println();
digitalWrite(led_negado, HIGH);
delay(200);
digitalWrite(led_negado, LOW);
delay(200);
delay(1000);
PÁGINA 37
LCD TFT TACTIL DE 2,4″
No hay proyecto serio que se precie, que no lleve una pantalla, y mejor
trastear. Un Shield LCD TFT Táctil de 2,4 Arduino. Al tener formato shield la
conexión es más cómoda directamente del LCD a nuestro arduino uno.
Las características del shield LCD TFT Táctil de 2,4 Arduino son las
siguientes:
Tamaño 71 x 52 x 7 mm
PÁGINA 38
#define BLACK 0x0000 // Definimos los colores para poder referirnos a ellos con su
nombre
void setup(void)
}
void loop(void)
PÁGINA 39
gráficos.
void setup(void) {
Serial.begin(9600);
#ifdef USE_ADAFRUIT_SHIELD_PINOUT
#else
#endif
if(identifier == 0x9325) {
} else {
Serial.println(identifier, HEX);
Serial.println(F(“If using the Adafruit 2.8\” TFT Arduino shield, the line:”));
Serial.println(F(” #define USE_ADAFRUIT_SHIELD_PINOUT”));
return;
tft.begin(identifier);
Serial.println(testFillScreen());
delay(500);
Serial.print(F(“Text “));
Serial.println(testText());
delay(3000);
Serial.print(F(“Lines “));
Serial.println(testLines(CYAN));
delay(500);
Serial.println(testFastLines(RED, BLUE));
delay(500);
Serial.println(testRects(GREEN));
delay(500);
Serial.println(testFilledRects(YELLOW, MAGENTA));
delay(500);
Serial.println(testFilledCircles(10, MAGENTA));
Serial.println(testCircles(10, WHITE));
delay(500);
Serial.println(testTriangles());
delay(500);
Serial.println(testFilledTriangles());
delay(500);
Serial.println(testRoundRects());
delay(500);
Serial.println(testFilledRoundRects());
delay(500);
Serial.println(F(“Done!”));
void loop(void) {
tft.setRotation(rotation);
testText();
delay(2000);
PÁGINA 41
}
}
tft.fillScreen(BLACK);
tft.fillScreen(RED);
tft.fillScreen(GREEN);
tft.fillScreen(BLUE);
tft.fillScreen(BLACK);
tft.fillScreen(BLACK);
tft.setCursor(0, 0);
tft.setTextColor(WHITE); tft.setTextSize(1);
tft.println(“Hello World!”);
tft.setTextColor(YELLOW); tft.setTextSize(2);
tft.println(1234.56);
tft.setTextColor(RED); tft.setTextSize(3);
tft.println(0xDEADBEEF, HEX);
tft.println();
tft.setTextColor(GREEN);
tft.setTextSize(5);
tft.println(“Groop”);
tft.setTextSize(2);
tft.setTextSize(1);
tft.println(“with my blurglecruncheon,”);
tft.println(“see if I don’t!”);
w = tft.width(),
h = tft.height();
tft.fillScreen(BLACK);
x1 = y1 = 0;
y2 = h – 1;
start = micros();
x2 = w – 1;
tft.fillScreen(BLACK);
x1 = w – 1;
y1 = 0;
y2 = h – 1;
start = micros();
PÁGINA 42
x2 = 0;
t += micros() – start;
tft.fillScreen(BLACK);
x1 = 0;
y1 = h – 1;
y2 = 0;
start = micros();
x2 = w – 1;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t += micros() – start;
tft.fillScreen(BLACK);
x1 = w – 1;
y1 = h – 1;
y2 = 0;
start = micros();
x2 = 0;
tft.fillScreen(BLACK);
start = micros();
int n, i, i2,
cx = tft.width() / 2,
cy = tft.height() / 2;
tft.fillScreen(BLACK);
n = min(tft.width(), tft.height());
start = micros();
i2 = i / 2;
int n, i, i2,
cx = tft.width() / 2 – 1,
cy = tft.height() / 2 – 1;
PÁGINA 43
tft.fillScreen(BLACK);
n = min(tft.width(), tft.height());
start = micros();
t += micros() – start;
return t;
tft.fillScreen(BLACK);
start = micros();
int x, y, r2 = radius * 2,
w = tft.width() + radius,
h = tft.height() + radius;
start = micros();
int n, i, cx = tft.width() / 2 – 1,
cy = tft.height() / 2 – 1;
tft.fillScreen(BLACK);
n = min(cx, cy);
start = micros();
cx , cy – i, // peak
cx – i, cy + i, // bottom left
cx + i, cy + i, // bottom right
tft.color565(0, 0, i));
PÁGINA 44
int i, cx = tft.width() / 2 – 1,
cy = tft.height() / 2 – 1;
tft.fillScreen(BLACK);
start = micros();
start = micros();
tft.fillTriangle(cx, cy – i, cx – i, cy + i, cx + i, cy + i,
tft.color565(0, i, i));
t += micros() – start;
tft.drawTriangle(cx, cy – i, cx – i, cy + i, cx + i, cy + i,
tft.color565(i, i, 0));
}
return t;
int w, i, i2,
cx = tft.width() / 2 – 1,
cy = tft.height() / 2 – 1;
tft.fillScreen(BLACK);
w = min(tft.width(), tft.height());
start = micros();
i2 = i / 2;
int i, i2,
cx = tft.width() / 2 – 1,
cy = tft.height() / 2 – 1;
tft.fillScreen(BLACK);
start = micros();
i2 = i / 2;
PÁGINA 45
arduino uno.
4 resistencias.
cables.
PÁGINA 46
int analogValue = 0;
float voltage = 0;
void setup()
pinMode(verdeLED, OUTPUT);
pinMode(amarilloLED, OUTPUT);
pinMode(rojoLED, OUTPUT);
void loop()
analogValue = analogRead(0);
voltage = 0.0048*analogValue;
digitalWrite(verdeLED, HIGH);
delay(ledDelay);
digitalWrite(verdeLED, LOW);
digitalWrite(amarilloLED, HIGH);
delay(ledDelay);
digitalWrite(amarilloLED, LOW);
digitalWrite(rojoLED, HIGH);
delay(ledDelay);
digitalWrite(rojoLED, LOW);
PÁGINA 47
SENSOR HUMEDAD DHT11 Y TFT 2,4″ TOUCH
Se conecta con tres pines que son Vcc, Gnd y Data. Dependiendo si son
PÁGINA 48
#include <DHT11.h>
int pin=10;
#define BLACK 0x0000 // Definimos los colores para poder referirnos a ellos con
su nombre
void setup()
Serial.begin(9600);
void loop()
int err;
tft.print(“Temperatura: “);
tft.print(temp);
tft.print(hum);
tft.println();
tft.print(“universoarduino.com”);
else
tft.println();
tft.print(err);
tft.println();
}
PÁGINA 49
www.universoarduino.com
PÁGINA 50