Conexiones internas en las placas de montaje:
1) Prueba el programa BLINK (parpadeo): en las páginas 95 y 96 del libro. Haz cambios en la duración del encendido:
CÓDIGO:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}
2) Haz una copia al circuito Blink, añade más diodos e intenta programar una ráfaga en la que la luz avance:
3) Amplía el programa anterior para que la luz, al llegar al final, rebote, al estilo de el coche fantástico.
4) Programa el encendido de un semáforo de vehículos.
Ejemplos de esquemas eléctricos y diagramas de flujo para encender un semáforo de vehículos:
5) Añade las luces de peatones.
a) ¿Eres capaz de programar los dos semáforos de vehículos de un cruce de calles?
b) ¿Puedes programar un cruce completo, con dos semáforos de peatones y vehículos?
6) FUNCIÓN NOT: (En la página 97 del libro, abajo).
CÓDIGO:
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW);
delay(1000); // Wait for 1000 millisecond(s)
if (digitalRead(2) == LOW) {
digitalWrite(12, HIGH);
}
else {
digitalWrite(12, LOW);
}
}
Funciones lógicas (Página 109 del libro, arriba).
7) Monta el siguiente circuito y prueba las funciones lógicas AND y OR:
La barra vertical que se necesita para la función OR la obtienes pulsando a la vez la tecla del 1 y Alt Gr.
Función NOT
Función AND:
Función OR:
Esquemas y programas para Arduino.
8) Control de giro un miniservo:
Aquí tienes un programa para controlar el movimiento del miniservo:
/* Programita para controlar un miniservo. Estos giran a una posición de 0 a 180º */
#include <Servo.h> // incluyo una librería o colección de programas para controlar servos
Servo myservo; // myservo es la etiqueta para referirme al servo que voy a conectar. Podré controlarlo con las instrucciones que incluye la librería anterior
int pos = 180; // variable para almacenar la posición del servo. Inicialmente está en la posición 180º
void setup(){
myservo.attach(9); // voy a conectar el servo al pin 9: cable naranja al pin 9, rojo a Vcc y marrón a GND, o bien cable
blanco al pin 9, rojo a Vcc y negro a GND
}
void loop(){
for (pos = 180; pos>0; pos--) {
//Avanza en el sentido de las agujas del reloj, de 180º a 0º, restando 1 a cada vuelta del bucle
myservo.write(pos); //doy la orden de que se desplace hasta los grados almacenados en pos
delay(20); // espero un momento para que le de tiempo al servo a llegar a la posición marcada
}
delay(2000); // esperamos 2 segundos
for (pos = 0; pos<180; pos++) {
//Avanza en sentido contrario a las agujas del reloj
myservo.write(pos); //damos la orden con los grados
delay(20); // esperamos que el servo llegue a la posición
}
delay(2000);
}
9) Módulo Bluetooth. Permite que arduino reciba instrucciones de dispositivos como un teléfono móvil, por ejemplo.
a) Conecta los 4 pines esenciales como aparece en el esquema. Ten en cuenta que a veces, los nombres de los conectores vienen grabados en el revés: asegúrate que el chip queda en este lado.
Para evitar interferencias alimenta el módulo Bluetooth con un bloque de 4 pilas diferente de las de los motores: los conectores negativos tienen que conectarse en la misma línea negra pero los positivos en líneas rojas diferentes.
b) Empareja tu móvil con el receptor Bluetooth. Cuando te pida la contraseña teclea: 1234
Puedes probar el funcionamiento con una app que envíe comandos bluetooth instalando este programa en Arduino.
Puedes controlar Robolow con la app Robolow_Eliza instalando en Arduino este programa.
10) Encendido y paro de un motor de CC.
Permite controlar el encendido y paro de un motor de juguete, e incluso, controlar el sentido de giro y la velocidad. Para ello hace falta el integrado L293D, que permite controlar simultáneamente hasta 4 motores.
a) Programa básico tomado de programarfacil.com para encender y apagar:
// Conexiones del driver L293D para un motor DC
int enA = 3; //Puede controlar el encendido/paro del motor, escribiendo HIGH/LOW o la velocidad, escribiendo un valor de 0 a 255
int in1 = 6; //in1 e in2 controlan el sentido de giro y la parada del motor.
int in2 = 7;
void setup() {
// Colocando los pines en modo salida
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
}
void loop() {
// Iniciamos con el motor detenido
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(2000);
// Preparamos el giro a máxima velocidad del motor
analogWrite(enA, 255);
// Encendemos el motor en el sentido de giro A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(2000);
}
Esquema tomado de programarfacil.com.
Lo que aparece bajo la placa de montaje es una fuente de alimentación de 12 V. Se puede utilizar cualquier fuente de 4'5 a 36V. Nunca el Vcc de Arduino. Si se usa el Vin puede que provoque interferencias de funcionamiento.
b) Programa avanzado tomado de programarfacil.com para encender, apagar, elegir el sentido de giro y la velocidad:
// Conexiones del driver L293D para un motor DC
int enA = 3; //Puede controlar el encendido/paro del motor, escribiendo HIGH/LOW o la velocidad, escribiendo un valor de 0 a 255
int in1 = 6; //in1 e in2 controlan el sentido de giro y la parada del motor.
int in2 = 7;
void setup() {
// Colocando los pines en modo salida
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
}
void loop() {
// Iniciamos con el motor detenido
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(2000);
// Máxima velocidad del motor
analogWrite(enA, 255);
// Encendemos el motor en el sentido de giro A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(2000);
// Invertimos el sentido del giro del motor
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
delay(2000);
// Apagamos el motor
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(2000);
// Encendemos el motor en el sentido de giro A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Aumenta la velocidad de cero a máximo
for (int i = 0; i < 256; i=i+1) {
analogWrite(enA, i);
delay(50);
}
// Disminuye la velocidad de máximo a cero
for (int i = 255; i >= 0; i=i-1) {
analogWrite(enA, i);
delay(50);
}
}
11) Medir distancias con un sensor de ultrasonidos:
Con un sensor de distancias y este programa puedes lograr que Robolow se mueva evitando obstáculos.
El más barato, HC-SRO4, permite medir distancias usando dos pines. La versión HC-SR05 permite lo mismo usando un solo pin.
Es posible montar varios sensores a la vez apuntando en diferentes direcciones.
12) Uso de la placa Arduino101:
Instalamos los drivers para la versión de Arduino CTC-101.
Herramientas/Placa/Gestor de tarjetas, buscar 101, instalar Intel Curie Boards.
Gestionar Librerías/ buscar Education Shield.
Más información aquí.