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.

Proyectos de Interés

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

Entradas populares