Facultad de Ingeniería.
Carrera de Ingeniería de Sistemas Computacionales.
Laboratorio de Taller de Robótica.
Laboratorio 12
Tema: Diseño de interfaces.
Logro: Al término de la sesión, el estudiante diseña una interfaz de un sistema
robótico, haciendo uso de los principios de los microcontroladores, demostrando lógica
y habilidad en la implementación del mismo.
Integrantes:
EXPERIENCIA N° 1: Diseño de una interfaz de voltaje
Visualice el nivel de voltaje en la interfaz desarrollada en el software Processing.
1. Implemente el siguiente algoritmo en el software Arduino:
void setup() {
[Link](9600);
}
void loop() {
[Link](analogRead(A0));
delay(20);
}
2. Implemente el siguiente circuito:
3. Implemente el siguiente algoritmo en el software Processing:
import [Link].*;
Serial port;
String mensaje = null;
float inByte= 0;
void setup(){
size(600, 550);
port = new Serial(this, "COM12", 9600);
noStroke();
}
void draw(){
background(0);
if([Link]()>0){
mensaje = [Link]('\n');
}
if(mensaje!=null){
inByte= float(mensaje);
print(mensaje);
}
//ellipe(Posicion X, Posicion Y, Diametro 1, Diametro 2)
//ellipse(300, 300, inByte*0.4, inByte*0.4); //variacion del radio
//ellipse(inByte*0.5, 300, 200, 200); //variacion en el eje x con radio
constante
ellipse(300, 300, 100, 100);//radio constante
if(inByte<300){
fill(0,143,57,inByte*0.6); //Color verde
text("Nivel Adecuado",180, 540);
}
if((inByte>300) && (inByte<700)){
fill(250,250,0,inByte*0.6); //Color amarillo
text("Nivel Intermedio",180, 540);
}
if(inByte>700){
fill(255,0,0,inByte*0.6);// color rojo
text("Fuera de Rango",180, 540);
}
textSize(40);
text("Sensor :",150,60);
text(inByte,300, 60);
}
4. Dar clic en el botón ejecutar y adjunte la captura de pantalla.
CODIGO FUENTE:
int LDR_pin = A0;
int Gas_pin = A1;
int Distancia_pin = A2;
void setup() {
[Link](9600);
pinMode(LDR_pin, INPUT);
pinMode(Gas_pin, INPUT);
pinMode(Distancia_pin, INPUT);
}
void loop() {
int LDR_value = analogRead(LDR_pin);
int Gas_value = analogRead(Gas_pin);
int Distancia_value = analogRead(Distancia_pin);
[Link]("Nivel de iluminacion: ");
[Link](LDR_value);
[Link]("Nivel de gas: ");
[Link](Gas_value);
[Link]("Distancia: ");
[Link](Distancia_value);
delay(1000); // Esperar 1 segundo antes de la siguiente lectura
}
EXPERIENCIA N° 2: Diseño de una interfaz para un robot explorador
Tomando como referencia el diseño de un robot evasor de obstáculos, diseña una
interfaz gráfica mostrando el encendido de los círculos (verde, amarillo y rojo) y el
mensaje de los niveles (adecuado, intermedio y fuera de rango) que se muestra en la
interfaz; para el robot explorador que analiza los parámetros ambientales de una
cueva, el robot monitorea estos parámetros mediante un sensor LDR, Sensor de Gas,
Sensor de Distancia, y se muestran en la interfaz bajo las siguientes condiciones de
diseño:
1. El nivel de Iluminación LDR debe variar la transparencia del círculo y responde
a las siguientes condiciones:
- Si el nivel se encuentra en el rango 1 se mostrará un círculo verde, aparecerá
el mensaje en la interfaz “Nivel de iluminación adecuado”.
- Si el nivel se encuentra en el rango 2 se mostrará un círculo amarillo,
aparecerá el mensaje en la interfaz “Nivel de iluminación intermedio”.
- Cualquier otra condición mostrará un círculo rojo, aparecerá el mensaje en la
interfaz “Nivel de Iluminación fuera de rango”.
2. El nivel de Gas del proceso de mezclado debe variar el radio del círculo y
responderá a las siguientes condiciones:
- Si el nivel se encuentra en el rango 1 se mostrará un círculo verde, aparecerá
el mensaje en la interfaz “Nivel de gas adecuado”.
- Si el nivel se encuentra en el rango 2 se mostrará un círculo amarillo,
aparecerá el mensaje en la interfaz “Nivel de gas intermedio”.
- Cualquier otra condición mostrará un círculo rojo, aparecerá el mensaje en la
interfaz “Nivel de gas fuera de rango”.
3. El nivel de Distancia de mezclado debe variar la posición en el eje X y
responderá a las siguientes condiciones:
- Si el nivel se encuentra en el rango 1 se mostrará un círculo verde, aparecerá
el mensaje en la interfaz “Distancia adecuada”.
- Si el nivel se encuentra en el rango 2 se mostrará un círculo amarillo,
aparecerá el mensaje en la interfaz “Distancia intermedia”.
- Cualquier otra condición se mostrará un círculo rojo, aparecerá el mensaje en
la interfaz “Distancia fuera de rango”.
Para el diseño implementado sube al aula virtual:
1. El diagrama de flujo del diseño de al menos una interfaz gráfica (elija una
interfaz: Iluminación LDR, Gas, Distancia).
2. Diseñe la interfaz gráfica de cada una las etapas diseñadas (Adjunte el
algoritmo de las 3 interfaces).
3. Adjunta las fotos de la implementación de la interfaz de los tres sensores para
las tres condiciones diseñadas.
SIMULACION:
ILUMINACION LDR:
ENLACE TINKERCAD:
[Link]
CODIGO FUENTE:
#include<LiquidCrystal.h>
#define RED 11
#define BLUE 10
#define GREEN 9
LiquidCrystal lcd(7,6,5,4,3,2);
const int sensorMin = 6;
const int sensorMax = 679;
int buzzer = 8;
void setup() {
[Link](9600);
[Link](16,2);
pinMode(RED, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
int value = analogRead(A0);
int rango = map(value, sensorMin, sensorMax, 0, 2);
[Link](value);
switch (rango) {
case 0:
[Link](0,0);
[Link]("[Link]");
[Link](0,1);
[Link]("Adecuado") ;
digitalWrite(RED, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(buzzer, LOW);
break;
case 1:
[Link](0,0);
[Link]("[Link]");
[Link](0,1);
[Link]("Intermedio") ;
digitalWrite(RED, HIGH);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(buzzer, LOW);
break;
case 2:
[Link](0,0);
[Link]("[Link]:");
[Link](0,1);
[Link]("Fuera de rango") ;
digitalWrite(RED, HIGH);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(buzzer, HIGH);
break;
}
delay(500);
[Link]();
}
DETECTOR DE GAS:
ENLACE TINKERCAD:
[Link]
CODIGO FUENTE:
#include<LiquidCrystal.h>
#define GAS A0
#include<LiquidCrystal.h>
#define RED 11
#define BLUE 10
#define GREEN 9
LiquidCrystal lcd(7,6,5,4,3,2);
int motor=13;
int led1=8;
void setup() {
pinMode(GAS, INPUT);
[Link](9600);
[Link](16,2);
pinMode(RED, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(motor, OUTPUT);
pinMode(led1, OUTPUT);
}
void loop() {
int value = analogRead(GAS);
[Link](value);
if (value < 100) {
[Link](0,0);
[Link]("Nivel");
[Link](0,1);
[Link]("Gas Adecuado") ;
digitalWrite(RED, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, HIGH);
}
if (value > 100 && value < 300) {
[Link](0,0);
[Link]("Nivel");
[Link](0,1);
[Link]("Gas Intermedio") ;
digitalWrite(RED, HIGH);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, HIGH);
}
if (value > 300) {
[Link](0,0);
[Link]("Nivel");
[Link](0,1);
[Link]("Gas Fuera Rango") ;
digitalWrite(RED, HIGH);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
}
delay(500);
[Link]();
}
DISTANCIA:
ENLACE TINKERCAD:
[Link]
CODIGO FUENTE:
#include<LiquidCrystal.h>
float tiempo,distancia;
int trig=12;
int echo=13;
int led=9;
int mo=8;
LiquidCrystal lcd(7,6,5,4,3,2);
void setup() {
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
pinMode(led,OUTPUT);
pinMode(mo,OUTPUT);
[Link](9600);
[Link](16,2);
}
void loop() {
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
tiempo=pulseIn(echo,HIGH); //mide el ancho del echo en us
//distancia = 340m/s x tiempo/2 porque el tiempo es ida y vuelta
distancia=tiempo/58.2; //Distancia en cm
[Link](distancia); //imprime distancia en el monitor serial
[Link](" cm"); //imprime las unidades salta
if(distancia<=10){
[Link](0,0);
[Link]("Obstaculo") ;
[Link](0,1);
[Link]("Proceso detenido") ;
digitalWrite(led,HIGH);
digitalWrite(mo,LOW);
}else{
digitalWrite(led,LOW);
[Link](0,0);
[Link]("Parametros") ;
[Link](0,1);
[Link]("Aceptables") ;
digitalWrite(mo,HIGH);
}
delay (500); //retardo 0.5 seg
[Link]();
}