PROYECTO FINAL

1. Descripción del proyecto:

Este proyecto es un cruce de semáforos con Arduino . El estado verde tiene una duración de 6 segundos, más el tiempo de parpadeo, el estado amarillo es de 3 segundos y el estado rojo se encuentra activo mientras el otro semáforo pasa por el estado verde y amarillo. El botón sirve para terminar el tiempo del semáforo con luz verde activo en el momento y así pasar la actividad al otro semáforo.

2. Lista de elementos utilizados:

  • Arduino Uno y cable para conexión USB
  • 1 push button
  • 1 resistencia de 10K ohms
  • 6 resistencias de 330 ohms
  • 2 leds de 10 mm, color verde
  • 2 leds de 10 mm, color amarillo
  • 2 leds de 10 mm, color rojo
  • 1 protoboard
  • Cables para conexiones
 
3. Fotos del Montaje:
 
IMG-20131125-00025 IMG-20131125-00027
 
 
4. Video del Montaje:
 
 
5. EsquemaFritzing:
FRITZING
 
 
6. Codigo Fuente en Arduino Semaforo cambia automaticamente:
 

/*
Programa para un par de semaforos que cambian de uno
a otro, y la implementacin de un boton para terminar
el tiempo de la luz verde y pasar al otro.
*/
// Declaramos la variable para el pin del boton
const int button = 8;

void setup() {
// Con un ciclo activamos los pines del 2 al 7 como salidas
for (int pin = 2; pin <= 7; pin++) {
pinMode(pin, OUTPUT);
}
// El pin del boton lo ponemos como entrada
pinMode(button, INPUT);
}

// Funcion para el primer semaforo y sus cambios de estado
void semaforouno() {
digitalWrite(2, HIGH);
int count = 0;
while (count < 30) {
// El ciclo esta en espera mientras el boton no es presionado
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(2500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
// Mandamos a llamar al otro semaforo
semaforodos();
}

// Funcion para el segundo semaforo y sus cambios de estado
void semaforodos() {
digitalWrite(5, HIGH);
int count = 0;
while (count < 30) {
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2500);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(4, LOW);
// Mandamos a llamar al otro semaforo
semaforouno();
}

// Iniciamos nuestro semaforo
void loop() {
// Cambiamos el estado de todos los leds para
// que esten apagados todos al inicio
for (int pin = 2; pin <= 7; pin++) {
digitalWrite(pin, LOW);
}
// Prendemos el verde de un semaforo y el
// rojo del otro semaforo
digitalWrite(2, HIGH);
digitalWrite(7, HIGH);
// Iniciamos el primer semaforo
semaforouno();
}

7. Codigo Fuente en Arduino Semaforo cambia solo si se oprime el push:

const int button = 8;

void setup() {
for (int pin = 2; pin <= 7; pin++) {
pinMode(pin, OUTPUT);
}
pinMode(button, INPUT);
}

void semaphoreOne() {
digitalWrite(2, HIGH);
int count = 0;
while (true) {
if (digitalRead(button) == true) {
break;
}
}
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(2500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
semaphoreTwo();
}

void semaphoreTwo() {
digitalWrite(5, HIGH);
int count = 0;
while (true) {
if (digitalRead(button) == true) {
break;
}
}
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2500);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(4, LOW);
semaphoreOne();
}

void loop() {
for (int pin = 2; pin <= 7; pin++) {
digitalWrite(pin, LOW);
}
digitalWrite(2, HIGH);
digitalWrite(7, HIGH);
semaphoreOne();
}

 

LABORATORIO #13

1. Descripción del laboratorio:

Utilizando Processing, manipular en la pantalla del computador una figura animada, a partir de los datos leídos desde el Arduino y un Joystick shield.

2. Lista de elementos utilizados:

El computador
Software “Arduino”
Software “Processing”
Hardware Arduino UNO
Joystick shield
Protoboard
Cables
3. Fotos del Montaje:
 IMG-20131017-00001 IMG-20131017-00002
4. Video del Montaje:

5. Codigo Fuente en Arduino:

char button0=3, button1=4, button2=5, button3=6;

void setup(void)
{

pinMode(button0, INPUT);
digitalWrite(button0, HIGH);

pinMode(button3, INPUT);
digitalWrite(button3, HIGH);

Serial.begin(9600);
}

void loop(void)
{

if(analogRead(1)>800)
{
Serial.print(1);
}
else if(analogRead(1)<200)
{
Serial.print(2);
}

if(analogRead(0)>800)
{
Serial.print(3);
}
else if(analogRead(0)<200)
{
Serial.print(4);
}

if(digitalRead(button0)==0)
{
Serial.print(5);
}

if(digitalRead(button3)==0)
{
Serial.print(6);
}

delay(100);
}

 

6. Codigo Fuente En Processing:

import processing.serial.*;
int x=225;
int y=225;
int grados=0;
Serial port;
int valor = 0;
void setup()
{

port = new Serial(this, Serial.list()[0], 9600);
size(450,450);
frameRate(50);
smooth();
fill(10,20,30);
}

void draw ()
{
while (port.available() > 0)
{
String cadena =”00″+port.readString();
valor = int(cadena.substring(2,cadena.length()));
println(cadena + “:” + valor);
}

background (255,255,255);
pushMatrix();
translate(x, y);
rotate(radians(grados));
quad(20, 20,-20,20,-20,-20,20,-20);
popMatrix();

if (valor == 1)
{
valor=0;
y-=10;
if (y<10) y=30;
}

if (valor == 2)
{
valor=0;
y+=10;
if (y>400) y=400;
}

if (valor == 3)
{
valor=0;
x+=10;
if (x>400) x=400;
}

if (valor == 4)
{
valor=0;
x-=10;
if (x<10) x=30;
}

if (valor == 5)
{
valor=0;
grados+=5;
if (grados>360) grados=0;

}

if (valor == 6)
{
valor=0;
grados-=5;
if (grados<0) grados=360;
}

}

LABORATORIO #11

1. Descripción del laboratorio:

Controlar una matrix de LEDs de 8×5 cableada directamente al Arduino, para mostrar un mensaje letra por letra, desplazándose de derecha a izquierda.

2. Lista de elementos utilizados:

a- El computador
b- Software “Arduino”
c-Software “Processing”
d- Software “fritzing”
e- Hardware Arduino UNO
f- 1 matrix de LEDs de 8×5
g- Protoboard
h-  Cables
3. Fotos del Montaje:
IMG-20131030-00063 IMG-20131030-00062
4. Video del Montaje:
5. Codigo Fuente en Arduino:
#include <FrequencyTimer2.h>int temCol = 5;
int temFil = 5;

#define A { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1} \
}

#define B { \
{1, 1, 1, 1, 0}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 0}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 0} \
}

#define C { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0}, \
{1, 1, 1, 1, 1} \
}

#define D { \
{1, 1, 1, 1, 0}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 0} \
}

#define E { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{1, 1, 1, 1, 1} \
}

#define F { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{1, 1, 1, 1, 0}, \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0} \
}

#define G { \
{1, 0, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 1} \
}

#define H { \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1} \
}

#define I { \
{1, 1, 1, 1, 1}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0}, \
{1, 1, 1, 1, 1} \
}

#define J { \
{1, 1, 1, 1, 1}, \
{1, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0}, \
{1, 1, 1, 0, 0} \
}

#define K { \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 1, 0}, \
{1, 1, 1, 0, 0}, \
{1, 0, 0, 1, 0}, \
{1, 0, 0, 0, 1} \
}

#define L { \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0}, \
{1, 1, 1, 1, 1} \
}

#define M { \
{1, 1, 0, 1, 1}, \
{1, 0, 1, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1} \
}

#define N { \
{1, 0, 0, 0, 1}, \
{1, 1, 0, 0, 1}, \
{1, 0, 1, 0, 1}, \
{1, 0, 0, 1, 1}, \
{1, 0, 0, 0, 1} \
}

#define O { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 1} \
}

#define P { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{1, 0, 0, 0, 0} \
}

#define Q { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 1, 1}, \
{1, 1, 1, 1, 1} \
}

#define R { \
{1, 1, 1, 1, 0}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 0}, \
{1, 0, 0, 1, 0}, \
{1, 0, 0, 0, 1} \
}

#define S { \
{0, 1, 1, 1, 1}, \
{1, 0, 0, 0, 0}, \
{0, 1, 1, 1, 0}, \
{0, 0, 0, 0, 1}, \
{1, 1, 1, 1, 0} \
}

#define T { \
{1, 1, 1, 1, 1}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0} \
}

#define U { \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 1, 1, 1, 1} \
}

#define V { \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{0, 1, 0, 1, 0}, \
{0, 0, 1, 0, 0} \
}

#define W { \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{1, 0, 1, 0, 1}, \
{1, 1, 0, 1, 1}, \
{1, 0, 0, 0, 1} \
}

#define X { \
{1, 0, 0, 0, 1}, \
{0, 1, 0, 1, 0}, \
{0, 0, 1, 0, 0}, \
{0, 1, 0, 1, 0}, \
{1, 0, 0, 0, 1} \
}

#define Y { \
{1, 0, 0, 0, 1}, \
{1, 0, 0, 0, 1}, \
{0, 1, 1, 1, 0}, \
{0, 0, 1, 0, 0}, \
{0, 0, 1, 0, 0} \
}

#define Z { \
{1, 1, 1, 1, 1}, \
{1, 0, 0, 1, 0}, \
{0, 0, 1, 0, 0}, \
{0, 1, 0, 0, 1}, \
{1, 1, 1, 1, 1} \
}

#define blanco { \
{0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0} \
}

int col2 = 0;

int tiempoEspera = 150;

const int numLetras = 27;

int letras [numLetras][5][5] = {
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,blanco
};

const int numCol = 5;

const int numFil = 8;

int matrixLeds[numFil][numCol];

//filas
//se declara la variable constante fil de tipo vector de entero
const int fil[numFil] = {
10,14,9,12,2,8,3,6};

//columnas
//se declara la variable constante col de tipo vector de entero inicializada en 5
const int col[numCol] = {
13,4,5,11,7};

void setup(){
for(int i = 0; i < numFil; i++) {
//pines de salida
pinMode(fil[i], OUTPUT);
//Se apaga el led,
digitalWrite(fil[i],LOW);
}

for(int i = 0; i < numCol; i++) {
//pines de salida
pinMode(col[i], OUTPUT);
//Se apaga el led,
digitalWrite(col[i],LOW);
}
//comunicacion serial a 9600bps
Serial.begin(9600);

FrequencyTimer2::disable();
FrequencyTimer2::setPeriod(2000);
FrequencyTimer2::setOnOverflow(display);
}

void loop(){
if(Serial.available() > 0) {
byte dato = Serial.read();
//si el dato esta entre A-Z o a-z
if((64 < dato && dato < 91) || (96 < dato && dato < 123)){
//pasamos a mayuscula el caracter
byte caracterMayuscula = toUpperCase(dato);
//cargamos el caracter en la matrix matrixLeds
//y movemos cada pixel de posicion
moveCharater(caracterMayuscula-65);
} else
//si hay un espacio
if(dato == 32){
moveCharater(numLetras-1);
}
} else {
moveCharater(numLetras-1);
}
}

void obtenerCaracter(int posicionCaracter){
int posicion = numFil – temCol;
for(int j = 0; j < temFil; j++) {
for(int i = 0; i < temCol; i++) {
matrixLeds[i+posicion][temCol-1-j] = letras[posicionCaracter][j][i];
}
}
}

void siguinteCaracter(int posicionCaracter, int temFila){
int matrixTem[temFil][temCol];

for(int i = 0; i < temFil; i++) {
for(int j = 0; j < temCol; j++) {
matrixTem[j][4-i] = letras[posicionCaracter][i][j];
}
}

for (int j = 0; j < numCol; j++){
matrixLeds[numFil-1][j] = matrixTem[temFila][j];
}
}

void moveCharater(int posicionCaracter){
int temFila = 0;

do{
for(int i = 0; i < numCol; i++) {
for(int j = 0; j < numFil-1; j++) {
matrixLeds[j][i] = matrixLeds[j+1][i];
}
}
siguinteCaracter(posicionCaracter, temFila);
delay(tiempoEspera);

temFila++;
} while(temFila < numFil);
}

void display(){
digitalWrite(col[col2], HIGH);
col2++;

if (col2 == 5) {
col2 = 0;
}
for (int row2 = 0; row2 < 8; row2++) {
if (matrixLeds[row2][col2] == 1) {
digitalWrite(fil[row2], HIGH);
}
else {
digitalWrite(fil[row2], LOW);
}
}
digitalWrite(col[col2], LOW);
}

6. Codigo Fuente En Processing:

//se carga la libreria ControlP5
import controlP5.*;
//se carga la libreria Serial
import processing.serial.*;
// definir la variable cp5 del tipo ControlP5
ControlP5 cp5;
// definir la variable puerto del tipo Serial
Serial puerto;
// definir la variable text del tipo Textfield
Textfield text;

void setup(){
//tamaño de la ventana
size(250,160);

//se crea el objeto controlP5
cp5 = new ControlP5(this);

text = cp5.addTextfield(“escriba el texto”)
.setPosition(20,30)
.setSize(200,40)
.setFont(createFont(“calibri”,20))
.setAutoClear(false);

cp5.addButton(“Enviar”)
.setValue(1)
.setPosition(20,100)
.setSize(40,30)
.setId(2);

String COM = Serial.list()[1];
//comunicacion serial a 9600bps
puerto = new Serial(this, COM, 9600);
}

void draw(){
background(#000000);
}

void controlEvent(ControlEvent theEvent){
if(theEvent.isAssignableFrom(Button.class)){
//se envia cada caracter de la cadena
for(int i = 0; i < text.getText().length(); i++){
char dato = text.getText().charAt(i);
puerto.write(dato);
}
}
}

LABORATORIO #14

1. Descripción del laboratorio:

Utilizando un LCD shield, mostrar con números grandes(caracteres personalizados), los datos capturados en el Arduino con una fotocelda (LRD, o CdS).

2. Lista de elementos utilizados

a-  pantalla lcd

b- 1 potenciometro

c- 1 computador

d- arduino uno

e- cables

f- 1 resistencia

g- 1 fotocelda

3. Diagrama del Montaje en la Protoboard Fritzing:
lab14
4. Fotos del Montaje:
  IMG-20131031-00069 IMG-20131031-00070
5. Video del Montaje:
6. Codigo Fuente en Arduino:

#include <LiquidCrystal.h>
#define pot A1

LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

byte Modo1[8] = {
31,31,31,0,0,0,0,0};
byte Modo2[8] = {
0,0,0,0,0,31,31,31};
byte Modo3[8] = {
31,31,31,0,0,0,31,31};
byte Modo4[8] = {
28,30,31,31,31,31,30,28};
byte Modo5[8] = {
7,15,31,31,31,31,15,7};
byte Modo6[8] = {
31,31,31,31,31,31,31,31};
byte Modo7[8] = {
0,0,0,0,0,0,0,0};
void setup() {
pinMode(pot, INPUT);
lcd.createChar(1, Modo1);
lcd.createChar(2, Modo2);
lcd.createChar(3, Modo3);
lcd.createChar(4, Modo4);
lcd.createChar(5, Modo5);
lcd.createChar(6, Modo6);
lcd.createChar(7, Modo7);
lcd.begin(16, 2);
Serial.begin(9600);
}

void loop() {
int Numeros [10][6] =
{
{
6,1,6,6,2,6 }
,
{
1,6,7,2,6,2 }
,
{
1,3,4,5,2,2 }
,
{
1,3,4,2,2,4 }
,
{
6,2,6,7,7,6 }
,
{
6,3,1,2,2,4 }
,
{
6,3,1,6,2,4 }
,
{
1,1,4,7,6,7 }
,
{
5,3,4,5,2,4 }
,
{
5,3,6,7,7,6 }
,
};

int valor = analogRead(pot);
int t = map(valor,0,1023,0,999);

int u=t%10;
int u1=((t-u)%100)/10;
int u2=(t-(u1*10)-u)/100;
int Valor [3] = {
u2,u1,u };

for (int p=0;p<=2;p++){
for (int j=0;j<=1;j++){
for (int k=0;k<=2;k++){
lcd.setCursor(k+(p*4),j);
if (j==0) {
lcd.write(Numeros [Valor[p]][k]);
lcd.setCursor(13,j);
lcd.println(“RPM”);
}
else if (j==1){
lcd.write(Numeros [Valor[p]][k+3]);
}
}
}
//delay(1000);
//lcd. clear();
//delay(500);
}
}

LABORATORIO #10

1. Descripción del laboratorio:

En el laboratorio 10 el objetivo es utilizar una pantalla LCD 16×2, cableada directamente al Arduino, para mostrar mensajes enviados desde el PC en una interfaz con Processing/ControlP5.

2. Lista de elementos utilizados

a-  pantalla lcd

b- 1 potenciometro

c- 1 computador

d- arduino mega

e- cables

3. Diagrama del Montaje en la Protoboard Fritzing:
lab 10 lcd_bb
4. Diagrama Esquemático del Circuito Fritzing:
 lab 10 lcd_esquema
5. Fotos del Montaje:
IMG_20130903_102317IMG_20130903_102451IMG_20130903_102336  IMG_20130903_102615
6. Video del Montaje:

7. Codigo Fuente en Arduino:

#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String texto=0;
int evento=0;

void setup() {
Serial.begin(9600);
lcd.begin(16, 2);

}

void loop() {
if (Serial.available()>0)
{delay(100);
lcd.clear();
texto = Serial.readString();

lcd.setCursor(0, 0);
lcd.print(texto );

}
}

8. Codigo Fuente En Processing:

import controlP5.*;

import processing.serial.*;

ControlP5 cp5;
Serial serial;

String Msj = “”;

void setup() {

size(440, 140);
noStroke();

cp5 = new ControlP5(this);
PFont font = createFont(“arial”, 20);
textFont(font);

cp5.addTextfield(“Msj”, 20,20, 400,40)
.setFont(font)
.setFocus(true)
.setColor(color(255, 0, 0));

String puerto = Serial.list()[0];
serial = new Serial (this, puerto, 9600);
}

void draw()
{
background(0xFF444444);
text(Msj, 20, 100);
}

void controlEvent(ControlEvent theEvent) {
String nombre = theEvent.getController().getName();
String texto = theEvent.getController().getStringValue();
println(“evento: ” + nombre + ” / texto: “+texto);
serial.write(nombre + “/” + texto);
}

Laboratorio #6

1. Descripción del laboratorio:

En el laboratorio 6 el objetivo es controlar un LED RGB desde el Arduino, vía PWM con una interfaz gráfica en Processing/ControlP5 para controlar el valor de cada color.

2. Lista de elementos utilizados:

a- El computador
b- Software “Arduino”
c-Software “Processing”
d- Software “fritzing”
e- Hardware Arduino UNO
f- 1 led RGB
g- 3 Resistencias
h- Protoboard
i- Alambre para protoboard
j- 3 potenciometros
3. Diagrama del Montaje en la Protoboard Fritzing:
Captura
4. Diagrama Esquemático del Circuito Fritzing:
esquema
5. Fotos del Montaje:
IMG-20130823-00350 IMG-20130823-00351 IMG-20130823-00352 IMG-20130823-00353 IMG-20130823-00354
6. Video del Montaje:

7. Codigo Fuente en Arduino:

#define MAXLED 3

int led[MAXLED] = {
3,5,6};
int valor = 0;
int i = 0;

void setup()
{
Serial.begin(9600);
for(int i = 0; i < MAXLED ; i++)
{
pinMode(led[i], OUTPUT);
}
}

void loop()
{
if(Serial.available() > 0)
{
valor = Serial.read();
if(valor == ‘G’)
i = 0;
if(valor == ‘R’)
i = 1;
if(valor == ‘B’)
i = 2;
valor = Serial.parseInt();
analogWrite(led[i], valor);
}
}

8. Codigo Fuente En Processing:

import processing.serial.*;
import controlP5.*;
ControlP5 cp5;
Slider sldR, sldG, sldB;
Serial serial;

void setup() {
size (600, 200);
cp5 =new ControlP5(this);
sldR = cp5.addSlider (“R”, 0, 255, 128, 40, 40, 300, 40);
sldG = cp5.addSlider (“G”, 0, 255, 128, 60, 100, 300, 40);
sldB = cp5.addSlider (“B”, 0, 255, 128, 90, 160, 300, 40);
sldR.setColor( new CColor(0xFFFFFF, #000000, #FFFFFF, #000000, #FF6900));
sldG.setColor( new CColor(0xFFFFFF, #000000, #FFFFFF, #000000, #FF6900));
sldB.setColor( new CColor(0xFFFFFF, #000000, #FFFFFF, #000000, #FF6900));

String puerto = Serial.list()[1];
serial = new Serial (this, puerto, 9600);
}

void draw()
{
background(255, 255, 255);
}

void controlEvent(ControlEvent evento)
{
String nombre = evento.getController().getName();
int valor = int(evento.getController().getValue());
println(nombre+”:”+valor);
serial.write(nombre+valor);
}

Laboratorio #5

1. Descripción del laboratorio:

En el laboratorio 5 el objetivo es controlar un LED RGB desde el Arduino, vía PWM con 3 potenciómetros, uno para cada color.

2. Lista de elementos utilizados:

a- El computador
b- Software “Arduino”
c- Software “fritzing”
d- Hardware Arduino UNO
e- 1 led RGB
f- 3 Resistencias
g- Protoboard
h- Alambre para protoboard
i- 3 potenciometros
3. Diagrama del Montaje en la Protoboard Fritzing:
Captura
4. Diagrama Esquemático del Circuito Fritzing:
esquema
5. Fotos del Montaje:
  IMG-20130905-00407 IMG-20130905-00408 IMG-20130905-00409
6. Video del Montaje:

7. Codigo Fuente en Arduino:

int a,b,c,pot1,pot2,pot3;

void setup() {
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(A5, INPUT);
pinMode(A4, INPUT);
pinMode(A0, INPUT);
}
void loop() {

pot1=analogRead(A5);
a=map(pot1,0,1023,0,255);

pot2=analogRead(A4);
b=map(pot2,0,1023,0,255);

pot3=analogRead(A0);
c=map(pot3,0,1023,0,255);

analogWrite(9, a);
analogWrite(10, b);
analogWrite(11, c);
}

Laboratorio #4

1. Descripción del laboratorio:

En el laboratorio 4 el objetivo es controlar 8 LEDs desde el Arduino, un LED encendido que se mueve en forma continua de izquierda a derecha, vía una interfaz gráfica en Processing/ControlP5 para controlar el tiempo de encendido y el tiempo de apagado.

2. Lista de elementos utilizados:

a- El computador
b- Software “Processing”
c- Software “fritzing”
d- Hardware Arduino UNO
e- 8 Leds
f- 8 Resistencias
g- Protoboard
h- Alambre para protoboard
3. Diagrama del Montaje en la Protoboard Fritzing:
Captura
4. Diagrama Esquemático del Circuito Fritzing:
esquwmas
5. Fotos del Montaje:
  IMG-20130822-00337 IMG-20130822-00338 IMG-20130822-00341 IMG-20130822-00343
6. Video del Montaje:


 

7. Codigo Fuente en Processing:

import processing.serial.*;
import controlP5.*;
ControlP5 cp5;
Slider slider1;
Knob perilla1;
Serial puerto;

void setup() {
size (600,400);
puerto = new Serial (this , Serial.list()[1],9600);
cp5 =new ControlP5(this);
// cp5.addSlider ( “tiempo”, min, max, inic, posicionX, posicionY, tamañoX, tamañoY );
slider1 = cp5.addSlider (“p” ,0,1000,200,20,150,300,150);
// .setColor( new CColor( fore, back, act, labe, value ) );
// #FFFFFF (#RRGGBB) // 0xFFFFFFFF (0xTTRRGGBB)
slider1.setColor( new CColor(0x000000, #555555, #777777, #666666, #000000));

perilla1=cp5.addKnob(“a”,0,1000,150,400,100,200);
perilla1.setColor( new CColor(0x000000, #555555, #777777, #666666, #000000));

}
void draw(){
background(255,255,255);

}
void controlEvent(ControlEvent theEvent){
String nombre=theEvent.getController().getName();
int valor=int(theEvent.getController().getValue());
println(nombre+valor);
puerto.write(nombre+valor);
}

Laboratorio #3

1. Descripción del laboratorio:

En el laboratorio 3 el objetivo es controlar 8 LEDs desde el Arduino, un LED encendido que se mueve en forma continua de izquierda a derecha, usando los valores de dos Potenciómetros para controlar los tiempos que el LED permanece encendido y apagado.

2. Lista de elementos utilizados:

a- El computador
b- Software “arduino”
c- Software “fritzing”
d- Hardware Arduino UNO
e- 8 Leds
f- 8 Resistencias
g- Protoboard
h- Alambre para protoboard
i- 2 Potenciometros
3. Diagrama del Montaje en la Protoboard Fritzing:
Captura
4. Diagrama Esquemático del Circuito Fritzing:
esquema
5. Fotos del Montaje:
IMG-20130905-00400 IMG-20130905-00401
6. Video del Montaje:


7. Codigo Fuente en Arduino:

const int MAXLED = 8;
int led[MAXLED] = {2,3,4,5,6,7,8,9};
int pot1 = A0;
int pot2 = A1;

void setup() {
for (int i=0; i<MAXLED; i++)
pinMode(led[i], OUTPUT);
pinMode(pot1, INPUT);
pinMode(pot2, INPUT);
}
void loop() {

for (int i=0; i<MAXLED; i++) {
int valorpot1 = analogRead(pot1);
int valorpot2 = analogRead(pot2);
on(led[i], valorpot1);
off(led[i], valorpot2);
}

for (int i=MAXLED-2; i>0; i–) {
int valorpot1 = analogRead(pot1);
int valorpot2 = analogRead(pot2);
on(led[i], valorpot1);
off(led[i], valorpot2);
}

}
void on(int led, int ms) {
digitalWrite(led, HIGH);
delay(ms);
}

void off(int led, int ms) {
digitalWrite(led, LOW);
delay(ms);
}

Laboratorio #2

1. Descripción del laboratorio:

En el laboratorio 2 el objetivo es controlar 8 LEDS desde el Arduino, un LED encendido que se mueve de izquierda a derecha según la posición del Potenció-metro.

2. Lista de elementos utilizados:

a- El computador
b- Software “arduino”
c- Software “fritzing”
d- Hardware Arduino UNO
e- 8 Leds
f- 8 Resistencias
g- Protoboard
h- Alambre para protoboard
i- Potencio-metro
3. Diagrama del Montaje en la Protoboard Fritzing:
protoboard
4. Diagrama Esquemático del Circuito Fritzing:
esquema
5. Fotos del Montaje:
IMG-20130807-00260 IMG-20130807-00261
6. Video del Montaje:

7. Codigo Fuente en Arduino:

#define MAXLED 8
#define pot A0

int led[MAXLED] = {2,3,4,5,6,7,8,9};

void setup()
{
for (int i = 0; i < MAXLED; i++)
{
pinMode(led[i], OUTPUT) ;
}
}

void loop()
{
int valor = analogRead(pot);
int i = map(valor, 0, 1000, 0, 9);
prender(i,500);
apagar(i, 100);
}

void prender(int l, int t){
digitalWrite(l, HIGH);
delay(t);
}

void apagar(int l, int t){
digitalWrite(l, LOW);
delay(t);
}