La URL abreviada de esta página es: https://goo.gl/ckzqjs
ercicio: MINISERVO
Objetivo: controlar un pequeño servomotor. Tienes dos versiones, la básica, usando solo el servo, y la completa, usando pilotos luminosos. Elige la que quieras. Si vas a montar la básica, no es necesario que desmontes de la placa los led que tengas conectados, no te estorbarán.
1º Conecta el servo.
Conexión básica:
2º Abre el IDE de Arduino y copia este programa:
PROGRAMA Miniservo básico
/* 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);
PROGRAMACIÓN DE UN CRUCE DE SEMÁFOROS
1) Copia el programa inicial. Cárgalo en la placa y comprueba si hay errores.
2) Modifica el programa para que cumpla el funcionamiento básico:
Luz verde: 5 segundos.
Luz amarilla: 2 segundos.
Luz roja: 7 segundos.
3) Amplia el programa para que controle un segundo semáforo del mismo cruce. Las luces deben encenderse de manera coordinada:
Calle 1
Verde
Amarillo
Rojo
Rojo
Calle2
Rojo2
Rojo2
Verde2
Amarillo2
FACTURA ELÉCTRICA:
- Abrir en Google Drive.
- Descargar.
PROYECTO SEMÁFORO:
Aquí tienes las conexiones internas de una placa de montaje:
Práctica nº 1. Control de un piloto luminoso.
Objetivo: hacer que un piloto luminoso parpadee.
1º Busca en el ordenador el IDE de Arduino para editar y transferir los programas. Ejecútalo. Reinicia el ordenador si así se te solicita.
2º Conecta el arduino al ordenador con el cable USB.
3º Selecciona el puerto USB que aparezca en la lista con el menú: HERRAMIENTAS/PUERTO SERIAL. En los ordenadores de clase, normalmente será: /dev/ttyACM0
4º Abre el programa de ejemplo 'Blink' con el menú: ABRIR/01 BASICS
5º Verifica la corrección del programa.
6º Transfiere el programa a arduino. Observa si parpadea el led integrado que lleva la placa.
7º Conecta y desconecta arduino para comprobar que el programa no se ha borrado de la memoria.
8º Monta sobre la placa un led conectado al pin 13. Ten precaución de polarizar bien el led: ánodo -terminal más largo- al pin 13, por donde le llegará el positivo. Cátodo -terminal más corto- a negativo a través de la resistencia. Resistencia de 220 ohmios, color rojo, rojo, marrón, oro/plata.
9º Cambia el valor de la instrucción Delay y vuelve a transferirla a la placa. Observa el efecto. Guarda una copia del programa con un nuevo nombre.
10º Intenta comprender la misión de cada instrucción. Traduce los comentarios a tu gusto. Guarda el programa.
11º Monta un segundo led e intenta que parpadeen alternativamente:
12º Monta algunos leds más, e intenta que se iluminen haciendo ráfagas o lo que se te ocurra.
13º Guarda el programa con el nombre que quieras.
1º Añade un pulsador.
2º Abre el programa de ejemplo 'BUTTON' con el menú: ABRIR/02 DIGITAL
3º Conecta el interruptor siguiendo las instrucciones que aparecen en la cabecera del programa.
4º Combina este programa con el del ejercicio 1, de manera que se enciendan los led a ráfagas cuando se presione el pulsador.
Ejercicio 3: Barra de leds controlada con una LDR.
1º Monta el siguiente circuito. Da igual el orden de los led y también los pines a los que los conectas.
Conécta un extremo de la LDR a positivo, el otro a negativo a través de una R de 10 K Ohmios.
Conecta el punto de conexión entre la LDR y la R a la entrada analógica A0 de Arduino. Así le llegará al pin A0 de
arduino una tensión proporcional a la cantidad de luz que reciba la LDR.
/*
LED bar graph
Medidor de nivel con una fila de diodos led
Enciende un numero de led proporcional al valor leido por un sensor.
El sensor se conecta al pin A0 y se convierte en un numero que varia de 0 a 1023 en proporcion a la tension del pin.
El programa lee el sensor, y enciende un numero de leds proporcional al valor leido.
Conecta los led a los pines 10 a 13. Conectalos a tierra con resistencias de 220 ohmios aproximadamente.
Si usas como sensor una LDR conectala a tierra a traves de una R de 1k ohmio.
created 4 Sep 2010
by Tom Igoe
Modificado por Juan Fdez de Vega el 20 de febrero de 2017
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/BarGraph
*/
// these constants won't change:
const int analogPin = A0; // conecto la LDR al pin A0
const int ledCount = 4; // esta es la cantidad de leds que voy a usar
int ledPins[] = {
10,11,12,13 }; // en esta lista pongo los pines a los que voy a conectar los led.
void setup() {
// recorro la lista de pines para los led con este bucle, inicializandolos como salidas
for (int thisLed = 0; thisLed < ledCount; thisLed++) { //a cada paso por el bucle, la variable thisled aumenta en 1. Cambia desde el valor 0 al maximo menos 1, es decir, de 0 a 3
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
// leo el valor de tension de la LDR y lo almaceno en sensorReading
int sensorReading = analogRead(analogPin);
// mapeo el valor, es decir, hago una proporcion de 0 a 4 (por tener preparados 4 leds) en funcion del valor almacenado en sensorReading y lo almaceno en ledlevel
// los valores del parentesis son (variable donde esta la lectura, valor minimo de lectura, valor maximo de lectura, numero minimo de leds encendidos, numero maximo de leds encendidos
int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
// enciendo los led con el siguiente bucle. A cada vuelta compruebo si el numero del led es menor que el nivel almacenado en ledLevel
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
// si este led tiene un numero menor que el nivel actual, lo enciendo
if (thisLed < ledLevel) {
digitalWrite(ledPins[thisLed], HIGH);
}
// si no, lo apago
else {
digitalWrite(ledPins[thisLed], LOW);
}
}
}
3º Haz las modificaciones que se te ocurran para entender bien el funcionamiento del programa. Cambia los comentarios a tu gusto. Guárdalo con un nuevo nombre