Practicas de tecnología, programación y robótica con Arduino

Hola mundo
Objetivos
Este proyecto sirve para testear un LED y empezar a familiarizarse con la placa de pruebas.
Pasos para desarrollar el proyecto
- Colocar la placa Arduino a la izquierda y la placa de pruebas a la derecha
- Buscar en el LED el ánodo y el cátodo y luego colocarlo en la placa de pruebas
- Realizar el cableado siguiendo el esquema
- Escribir el software en el editor Arduino y subirlo para probarlo

// Hola mundo
void setup() {
pinMode(4, OUTPUT);
}
void loop() {
digitalWrite(4, HIGH);
delay(1000);
digitalWrite(4, LOW);
delay(1000);
}
Botón doble LED
Objetivos
Este proyecto sirve para prácticar la conexión de un botón y de un LED.
Pasos para desarrollar el proyecto
- Montar el botón siguiendo el esquema
- Montar el LED de color rojo y conectarlo al puerto 4
- Montar el LED de color verde y conectarlo al puerto 5
- Escribir el software y probarlo y conectarlo al puerto 6

// Botón doble LED
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, INPUT);
}
void loop() {
if (digitalRead(6)==HIGH){
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
} else {
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
}
}
Semáforo de tres luces
Objetivos
Las luces se encenderán siguiendo el orden
Pasos para desarrollar el proyecto
- El LED rojo se conecta al puerto 4
- El LED ambar se conecta al puerto 5
- El LED verde se conecta al puerto 6
- La luz roja luce durante 7 segundos, luego la verde 7 y finalmente la ambar durante 1 segundo antes de volver a comenzar el ciclo
// Semáforo de tres luces
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop() {
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
delay(7000);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
delay(7000);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
delay(1000);
}
Piezoeléctrico, LED y botón
Objetivos
El piezoeléctrico emitirá pitidos a intervalos de un segundo, y una frecuencia de 3000 Hz. El LED rojo parpadeará cuando suene el pitido. El botón inhibe el sonido del piezo, pero no del LED.
Pasos para desarrollar el proyecto
- El piezoeléctrico se conecta al puerto 9
- El LED rojo se conecta al puerto 4
- El botón se conecta al puerto 5
- Cuando el botón se pulsa, el sonido no se inhibe sino que suena otro tono diferente
// Piezoeléctrico, LED, botón
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, INPUT);
}
void loop() {
if (digitalRead(6)==HIGH){
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
} else {
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
}
}
Emisor de código morse
Objetivos
En este proyecto construimos una máquina generadora de código morse con dos botones. El código morse se empleaba en transmisiones telegráficas y cada letra tiene su representación. En nuestro hardware, dos botones controlan los pitidos del piezoeléctrico. Uno produce pitidos cortos y otro produce pitidos largos.
Práctica
Prueba a emitir un mensaje de SOS, para ello comprueba en la tabla de más abajo a que conjunto de puntos y letras corresponde cada letra (S, O, S).

Pasos para desarrollar el proyecto
- Se desarrolla y se sube el software
- El piezoeléctrico se conecta al puerto 9
- El botón A se conecta al puerto 4
- El botón B se conecta al puerto 5

// Emisor morse
void setup() {
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(9, OUTPUT);
}
void loop() {
if (digitalRead(4)==HIGH){ // Si se pulsa el botón 4
tone(9, 3000, 100);
}
if (digitalRead(5)==HIGH){ // Si se pulsa del botón 5
tone(9, 3000, 300);
}
delay(500);
}
Botón de control
Pasos para desarrollar el proyecto
- Montar un LED rojo en el puerto 5 y uno verde en el 6 (HW)
- El LED rojo debe parpadear a intervalos de 1 segundo (SW)
- Montar un botón en el puerto 3 (HW)
- Si se pulsa el botón, el LED verde debe encenderse (SW)
Alarma
Pasos para desarrollar el proyecto
- Poner un piezoeléctrico conectado al puerto 9 (HW)
- El piezoeléctrico debe emitir un pitido cada segundo (SW)
- Montar un LED rojo conectado al puerto 7 (HW)
- El LED rojo debe parpadear intermitentemente cuando suene la alarma (SW)
Semáforo con aviso acústico
Nota Este proyecto presenta una dificultad añadida ya que el software del paso 2 y el 3 son diferentes. Además, el paso 4 depende tanto de hardware como de software para poder ser completado.
Pasos para desarrollar el proyecto
- Montar un LED verde y otro rojo en los puertos 4 y 5 respectívamente (HW)
- Los LED deben encenderse secuencialmente a intervalos de 4 segundos (SW)
- El LED verde debe estar encendido 2 segundos, luego parpadea a intervalos de medio segundo (durante dos segundos) antes de cambiar al rojo (SW)
- Conectar un piezoeléctrico al puerto 6 y hacer que emita un pitido cuando el semáforo esté en verde (HW + SW)
Monitor serie
Objetivos
Este proyecto servirá para testear el monitor serie. Es un proyecto muy sencillo y por eso no se firma pero es importante que comprendas como funciona porque será la base de proyectos futuros.
Primer software
// Primer software
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hola");
}
Segundo software
// Segundo software
int n = 0; // Inicializa la variable
void setup() {
Serial.begin(9600); // Inicializa monitor serie
}
void loop() {
n++; // Incrementa la variable
Serial.println(n); // Mostrar en pantalla el valor
delay(100);
}
Servomotor
Objetivos
En este proyecto haremos que el servomotor se mueva de un lado a otro de manera automática. Es un proyecto bastante sencillo por lo que no se firmará pero es bastante importante que comprendas como funciona porque este componente se utilizará en poryectos futuros.

Primer software
// Primer software del proyecto servo
#include <Servo.h>
Servo s1; // Asigna nombre al servo
void setup() {
s1.attach(9); // Conectado al puerto 9
}
void loop() {
s1.write(0); // Posición 0 grados
delay(1000);
s1.write(90); // Posición 90 grados
delay(1000);
}
Segundo software
// Segundo software del proyecto servo
#include <Servo.h>
Servo s1;
int p = 0; // posición
void setup() {
s1.attach(9);
}
void loop() {
p++; // Incrementa p
s1.write(p); // Mueve el servo
delay(20);
if (p == 170) { // Si llega a 170 grados
p = 0; // Vuelve a la posición inicial
s1.write(p);
delay(500);
}
}
Botón hombre muerto
Este proyecto no se firma Este es un proyecto que servirá para realizar pruebas.

Pasos para desarrollar el proyecto
- Montar un botón en el puerto 7 y un servomotor en el puerto 10 (HW)
- El servomotor debe hacer oscilar su brazo a intervalos de 1 segundo entre sus dos extremos solo si el botón se pulsa, el servomotor se detendrá si el botón se suelta (SW)
- Montar un LED rojo en el puerto 3 que debe encenderse si el botón del puerto 7 NO está pulsado (HW + SW)
- Añadir un piezoeléctrico al puerto 6 que sonará cuando el botón NO ESTÉ PULSADO (HW + SW)
// Botón hombre muerto
#include <Servo.h>
Servo s;
void setup() {
pinMode(3, OUTPUT); // LED
pinMode(6, OUTPUT); // Piezoeléctrico
pinMode(7, INPUT); // Botón
s.attach(10); // Servomotor
}
void loop() {
if (digitalRead(7)==HIGH){ // Botón pulsado
digitalWrite(3, LOW);
s.write(10);
delay(1000);
s.write(170);
delay(1000);
} else { // Botón NO pulsado
digitalWrite(3, HIGH);
tone(6, 4000, 2000);
delay(2000);
}
}
Resistencia variable (potenciómetro)

Este proyecto no se firma Este es un proyecto que servirá para realizar pruebas.
Pasos para desarrollar el proyecto
- Montar la resistencia variable siguiendo los pasos indicados
- Montar los tres LED sobre la placa
- Escribir el software
- Modificar el software para que las luces funcionen al revés
// Resistencia variable
int x = 0; // Variable
void setup() {
pinMode(2, OUTPUT); // LED
pinMode(3, OUTPUT); // LED
pinMode(4, OUTPUT); // LED
Serial.begin(9600); // Monitor serie
}
void loop() {
x = analogRead(A0);
Serial.println(x);
if (x <= 200) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (x > 200 && x < 400) {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (x >= 400) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
}
Pitidos de frecuencia variable
Pasos para desarrollar el proyecto
- Montar la resistencia variable (potenciómetro) de manera que su salida se encuentre conectada con el puerto analógico A0 y un piezoeléctrico en el puerto 9. También es necesario montar un LED de color rojo en el puerto 7 y otro de color verde en el puerto 8. [HW]
- Escribir el software que permita mostrar en la pantalla del ordenador mediante el monitor serie el valor de la resitencia variable (potenciómetro). [SW]
- Hacer que el piezoeléctrico emita pitidos con intervalos de un segundo entre un pitido y el siguiente. La frecuencia del pitido estará dado por el valor indicado en el potenciómetro según la fórmula f = 2 * x + 500, donde f es la frecuencia del pitido y x es el valor del potenciómetro. Mientras se emite un pitido el LED rojo estará encendido y se apagará cuando deje de sonar el pitido. [SW]
- Hacer que el pitido siempre se emita a 2000 hercios pero el intervalo de espera entre un pitido y el siguiente sea variable en función de la posición del potenciómetro. Además el LED verde se encenderá cuando el piezo eléctrico no emita sonido. [SW]
Batería musical
Pasos para desarrollar el proyecto
- Conecta el servomotor al puerto 10 y comprobar que se mueve [HW + SW]
- Construye una estructura con envases de plástico o de metal [HW]
- Consigue que la máqina sea capaz de hacer un ritmo sencillo, es decir, un golpe en cada uno de los envasas y a continuación un golpe en el otro envase [SW]
- Logra que la máquina realice un ritmo complejo, es decir, además de alternar golpes entre los dos envases, en alguno de ellos debe ser capaz de dar dos o más golpes seguidos [SW]
Servo y joystick coordinados
Pasos para desarrollar el proyecto
- Poner un joystick conectado al puerto A1 y un servomotor en el puerto 9 [HW]
- Mostrar en el monitor serie el valor tomado por la entrada analógica y ver como varía según mueves el mando en el eje X [SW]
- Poner un servomotor que gire y adopte un ángulo proporcional a la entrada analógica del anterior apartado: ‘s1.write(analogRead(A1)/6.5);‘ [HW y SW]
- Un LED rojo se encenderá solo si el servomotor se encuentra cerca de uno de sus límites de movimiento [SW]
Servo y joystick con luces
Pasos para desarrollar el proyecto
- El servomotor se mueve en función del movimiento del joystick [HW y SW]
- Cuando el servomotor se mueve a un lado se enciende una luz roja [HW y SW]
- Cuando el servomotor se mueve al otro lado se encuende la luz verde [HW y SW]
- Cuando el servomotor está en el centro las luces deben parpadear [SW]
Piano de tres botones
Pasos para desarrollar el proyecto
- Poner botón en el puerto 4 y piezoeléctrico en el puerto 9 [HW]
- Si se pulsa el botón debe sonar una nota musical f=261.63 Hz y duración t=250 milisegundos. [SW]
Recuerda como se usaba tone con estos ejemplos:
// Piano de tres botones void setup(){ pinMode(9, OUTPUT); } void loop(){ //tone(PUERTO,FRECUENCIA,TIEMPO); tone(9, 3000.0, 1000); }
- Añadir dos botones más en los puertos 5 y 6 [HW]
- Al pulsar los botones 5 y 6 deben sonar las notas musicales con frecuencias f=293.66 Hz y f=329.63 Hz [SW]
Sensor de distancia

// Primer software
long t; // Tiempo
long x; // Espacio o distancia
void setup(){
pinMode(10, OUTPUT); // Disparador
pinMode(9, INPUT); // Receptor
}
void loop(){
delayMicroseconds(2);
digitalWrite(10, HIGH);
delayMicroseconds(10);
digitalWrite(10, LOW);
t = pulseIn(9, HIGH);
x = t * 0.017;
}
// Segundo software
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(x);
}
Pasos para desarrollar el proyecto
- Conectar el cableado siguiendo el esquema [HW]
- Escribir el primer software[SW]
- Añadir al primer software el segundo [SW]
- Modificarlo para que ponga en el monitor serie un mensaje cuando el sensor detecte corta distancia
Sensor de distancia avanzado
Pasos para desarrollar el proyecto
- Implementar el diseño de hardware del proyecto anterior [HW]
- Añadir dos luces LED, una roja y una verde [HW]
- Programa el software que permita que la luz verde se encienda si el objeto está lejos y la roja si el objeto que detecta el sensor está cerca [SW]
- Añade un piezoeléctrico que debe pitar en caso de que el objeto que detecta el sensor está extremadamente cerca [SW+HW]