Circuito de Arduino en Tinkercard
En este circuito se simula un Arduino codificado para encender un Led al oprimirse un pulsador y aun después de soltarlo el Led continué encendido. Solo al volver a oprimir el pulsador el Led se apaga.
1. Semáforo con Arduino
Usaremos dos botones para simular los sensores del vehículo
en cada extremo del puente. Cada juego de luces tendrá LEDs rojos, amarillos y
verdes. Inicialmente, el sistema permitirá que el tráfico fluya de oeste a
este, por lo que las luces orientadas a la oeste se pondrán a verde y las luces
de la del este se pondrán en rojo. Cuando un vehículo se acerca al puente y que
acabará pulsando el botón la luz es roja, entonces el sistema encenderá la luz
en el lado opuesto de verde a amarillo y a rojo, y luego tendrá que un período
de tiempo establecido para permitir que cualquier vehículo que se encuentre ya
en el puente pueda terminar el cruce. A continuación, la luz amarilla encendida
en ell lado del vehículo en espera parpadeará como un aviso de “prepararse” para
el conductor y finalmente la luz cambiará a verde. La luz permanecerá verde
hasta que el coche se acerque al otro lado, momento en el que se repite el
proceso.
Lista de componentes
Esto es lo que necesitarás para crear este proyecto:
Dos LEDs rojos (LED1 y LED2)
Dos LEDs amarillos (LED3 y LED4)
Dos LEDs verdes (LED5 y LED6)
Seis resistencias de 560 Ω (de R1 a R6)
Dos resistencias de 10 kΩ (R7 y R8)
Dos condensadores de 100 nF (C1 y C2)
Dos pulsadores (S1 y S2)
Una placa de medición de tamaño mediano
Un Arduino y un cable USB
Varios cables de conexión
El Esquema
Debido a que estamos controlando sólo seis LEDs y recibiendo
la entrada de dos botones, el diseño no será demasiado difícil. La siguiente
figura nos muestra el esquema de nuestro proyecto.
El Código
// Semáforo Arduino
// define the pins that the buttons and lights are connected
to:
#define westButton 3
#define eastButton 13
#define westRed 2
#define westYellow 1
#define westGreen 0
#define eastRed 12
#define eastYellow 11
#define eastGreen 10
#define yellowBlinkTime 500 // 0.5 seconds for yellow light
blink
boolean trafficWest = true; // west = true, east = false
int flowTime = 10000; // amount of time to let traffic flow
int changeDelay = 2000; // amount of time between color
changes
void setup()
{
// setup digital I/O pins
pinMode(westButton, INPUT);
pinMode(eastButton, INPUT);
pinMode(westRed, OUTPUT);
pinMode(westYellow, OUTPUT);
pinMode(westGreen, OUTPUT);
pinMode(eastRed, OUTPUT);
pinMode(eastYellow, OUTPUT);
pinMode(eastGreen, OUTPUT);
// set initial state for lights - west side is green first
digitalWrite(westRed, LOW);
digitalWrite(westYellow, LOW);
digitalWrite(westGreen, HIGH);
digitalWrite(eastRed, HIGH);
digitalWrite(eastYellow, LOW);
digitalWrite(eastGreen, LOW);
}
void loop()
{
if ( digitalRead(westButton) == HIGH ) // request
west>east traffic flow
{
if ( trafficWest != true )
// only continue if traffic flowing in the opposite (east)
direction
{
trafficWest = true; // change traffic flow flag to
west>east
delay(flowTime); // give time for traffic to flow
digitalWrite(eastGreen, LOW); // change east-facing lights
from green
// to yellow to red
digitalWrite(eastYellow, HIGH);
delay(changeDelay);
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, HIGH);
delay(changeDelay);
for ( int a = 0; a < 5; a++ ) // blink yellow light {
digitalWrite(westYellow, LOW);
delay(yellowBlinkTime); digitalWrite(westYellow, HIGH);
delay(yellowBlinkTime); }
digitalWrite(westYellow, LOW); digitalWrite(westRed, LOW);
// change west-facing
lights from red to green digitalWrite(westGreen, HIGH); } }
if (
digitalRead(eastButton) == HIGH ) // request east>west
traffic flow
{
if ( trafficWest == true )
// only continue if traffic flow is in the opposite (west)
direction
{
trafficWest = false; // change traffic flow flag to
east>west
delay(flowTime); // give time for traffic to flow
digitalWrite(westGreen, LOW);
// change west lights from green to yellow to red
digitalWrite(westYellow, HIGH);
delay(changeDelay);
digitalWrite(westYellow, LOW);
digitalWrite(westRed, HIGH);
delay(changeDelay);
for ( int a = 0 ; a < 5 ; a++ ) // blink yellow light
{
digitalWrite(eastYellow, LOW);
delay(yellowBlinkTime);
digitalWrite(eastYellow, HIGH);
delay(yellowBlinkTime);
}
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, LOW); // change east-facing lights
from red to green
digitalWrite(eastGreen, HIGH);
}
}
}
2. Un sencillo emisor morse con nuestra placa
Este es un sencillo tutorial con el que convertiremos
nuestra placa Arduino en un transmisor de código morse enviado la llamada SOS.
Veremos cómo gracias al código envía el mensaje mediante un LED conectado al
pin digital 10.
Para construir este proyecto necesitaremos:
1 tarjeta Arduino
1 LED
1 resistencia 220ohm
Construir el circuito como la imagen de ejemplo de abajo.
El Código
// LED connected to digital pin 10
int ledPin = 10;
// run once, when the sketch starts
void setup()
{
// sets the digital pin as output
pinMode(ledPin, OUTPUT);
}
// run over and over again
void loop()
{
// 3 dits
for (int x=0; x<3; x++)
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(150); // waits for 150ms
digitalWrite(ledPin, LOW); // sets the LED off
delay(100); // waits for 100ms
}
// 100ms delay to cause slight gap between letters
delay(100);
// 3 dahs for (int x=0; x<3; x++) {
digitalWrite(ledPin, HIGH); // sets the LED on
delay(400); // waits for 400ms
digitalWrite(ledPin, LOW); // sets the LED off
delay(100); // waits for 100ms
}
// 100ms delay to cause slight gap between letters
delay(100);
// 3 dits again
for (int x=0; x<3; x++) {
digitalWrite(ledPin, HIGH); // sets the LED on
delay(150); // waits for 150ms
digitalWrite(ledPin, LOW); // sets the LED off
delay(100); // waits for 100ms
}
// wait 5 seconds before repeating the SOS signal
delay(5000);
}
3. Cronometro
Sabiendo que podemos medir el tiempo transcurrido entre dos
eventos, podemos crear un cronómetro simple con un Arduino. Nuestro cronómetro
usará dos botones: uno para iniciar o reiniciar el conteo y otro para detenerlo
y mostrar el tiempo transcurrido. El programa comprobará continuamente el
estado de los dos botones. Cuando se presiona el botón de inicio, un valor de
millis() será almacenado, y cuando se presiona el segundo botón, un nuevo valor
millis() sera almacenado. La función personalizada displayResult() convertirá
el tiempo transcurrido desde milisegundos en horas, minutos y segundos.
Finalmente, el tiempo aparecerá en el monitor.
Materiales
Para este proyecto son necesarios los siguientes componentes:
• Una tabla de pruebas protoboard
• Dos pulsadores (S1 y S2)
• Dos resistencias de 10 kW (R1 y R2)
• Varios cables de conexión
• Arduino y cable USB
Esquema del Circuito
El Código
// Cronómetro
unsigned long start, finished, elapsed;
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT); // the start button
pinMode(3, INPUT); // the stop button
Serial.println("Press 1 for Start/reset, 2 for elapsed
time");
}
void displayResult()
{
float h, m, s, ms;
unsigned long over;
elapsed = finished - start;
h = int(elapsed / 3600000);
over = elapsed % 3600000;
m = int(over / 60000);
over = over % 60000;
s = int(over / 1000);
ms = over % 1000;
Serial.print("Raw elapsed time: ");
Serial.println(elapsed);
Serial.print("Elapsed time: ");
Serial.print(h, 0);
Serial.print("h ");
Serial.print(m, 0);
Serial.print("m ");
Serial.print(s, 0);
Serial.print("s ");
Serial.print(ms, 0);
Serial.println("ms");
Serial.println();
}
void loop()
{
if (digitalRead(2) == HIGH)
{
start = millis();
delay(200); // for debounce
Serial.println("Started...");
}
if (digitalRead(3) == HIGH)
{
finished = millis();
delay(200); // for debounce
displayResult();
}
}
Comentarios
Publicar un comentario