Autor: Patricio Aros Erices
Competencia: Gestión en tecnologias de la información(Nivel 1)
Sinceramente uno de los proyecto que desde mi punto de vista fue de gran utilidad y podria llegar a serlo en la vida real, ya que no se ve tan dificil de sacar de la maqueta para convertirlo en un proyecto, e incluso es posible que ya se encuentre, no obstante, el aprendizaje dejado y la cantidad de sentencias nuevas creadas, creo que subio un poco el nivel de conocimientos que poseiamos.
Prototipo de lo que realizaría el robot |
A continuación un pequeño pseudocodigo de lo que debia hacer, sólo en algunas partes difiere del codigop debido que tubimos que reestructurarlos por sentencias nuevas y por lo que se pedia especificamente en la actividad
Declaramos nuestras variables;
Sub ARCHIVO(){
Crea un archivo;
Guarda las cadenas en nuestro archivo;
para precipicios sea <= 4 {
precipicios++;
Transforma cantidad de precipicios a estring;
Transforma el arreglo[precipicos] a estring;
Junta los String creando una nueva cadena;
Guarda la nueva cadena;
}
Cierra el archivo;
}
Sub Guarda_Distancia(){
Guarda las alturas en un arreglo[a];
Muestra en pantalla la altura registrada;
Aumenta en 1 la variablea a para guardar en el siguiente arreglo;
}
Tarea Recorrido(){
Mientras (alturas sea<=4){
Avanzar;
Si (sensor de proximidad > 20){
Apagar motores;
Esperar 1 segundo;
Llamar sub GUarda_Distancia();
Retroceder durante 1,20 segundos;
Girar aleatoriamente;}
}
Apagar motores;
Llama sub Archivo();
Limpia la pantalla;
Abre nuestro archivo;
Revisa que todo este correcto;
Si (es correcto?)
Imprime en pantalla;
Espera 5 segundos;
Cierra el archivo;
}
Ejecutar programa(){
Llama las tarea(Recorrido);
Activa sensor de proximidad();
}
El codigo fuente es el siguiente:
Código Fuente:
//Declaramos las variables que ocuparemos.
int Distancia[4];
int a=0;
int i=0;
int j=0;
int num=0;
string linea="=>";
string nums;
byte puntero;
string cadena;
byte bytesEscritos;
mutex Mult;
string leer;
int bit=512;
string Dis="Distancia ";
sub Archivo()
{
DeleteFile("Reportefinder.txt"); //Borra el archivo para actualizar los datos
CreateFile("Reportefinder.txt", bit, puntero); //Creamos un archivo con un tamño de 512 bytes
WriteLnString(puntero, "ReporteDistancia", bytesEscritos);// guardamos una cadena en nuestro archivo
WriteLnString(puntero, "--------------------", bytesEscritos);
for(j=0; j < ArrayLen(Distancia); j++)// for en el cual hace que se realize 4 veces
{
num++;// cuenta los precipicios
nums= NumToStr(num);//Transorme la cantidad de precipios a String.
cadena = NumToStr(Distancia[j]); //Transforma la altura obtenida en String
cadena = Dis + nums + linea + cadena; //Junta todas las cadenas
WriteLnString(puntero, cadena, bytesEscritos);// Guardamos la cadena creada el archivo.
}
CloseFile(puntero);// Cerramos el archivo creado.
}
sub Guarda_Distancia() //subrutina donde guardaremos la cada una de las alturas.
{
Distancia[a]=SensorUS(IN_3); //Guardamos altura
NumOut(0,10*a,Distancia[a]); //Imprimimos en pantalla
a++; // aumentamos a para guardar la nueva altura en el siguiente arreglo
}
task Recorrido() //Tarea recorrido
{
while (i<4) //Mientraas i sea <a 4 realizar:
{
OnFwd(OUT_AB,50); // Avanzar a potencia 50
if (SensorUS(IN_2)>20)// si el sensor de proximidad es mayor a
{
i++; // aumentar en uno i
Acquire(Mult);
Off(OUT_AB); //Apagar motores
Wait(1000); //Esperar 1 segundo
Guarda_Distancia();// Llamar sub rutina
OnRev(OUT_AB,40); // Retroceder
Wait(1200); // Durante 1,2 segundos
OnFwd(OUT_B,20); //girar en una forma aleatoria
OnRev(OUT_A,20);
Wait(Random(280)+380);
Release(Mult);
}
}
int coordenada=50; //Cordenadas de la pantalla
bool fals = false; //Variable booleana
Off(OUT_AB); //Apagar motores
Archivo(); //Llamar subrutina archivo
ClearScreen();//Limpiar pantalla
OpenFileRead("Reportefinder.txt", bit, puntero); //Abrir el archivo guardado y agregar datos
while (fals == false){ // Leer el archivo de texto hasta el final
if(ReadLnString(puntero,leer) != NO_ERR) fals = true;//si la linea leida es distinta a NO_ERR falsa es verdadero
TextOut(LCD_LINE8,coordenada,leer); //Imprime en pantalla
coordenada= coordenada-10; //cambia las coordenadas de impresion.
Wait(500);}
Wait(5000);//Espera 5 segundos
CloseFile(puntero); //cierra el archivo
}
task main()//conmienza a funcionar nuestro programa.
{
Precedes(Recorrido);//Llama las tareas
SetSensorLowspeed(IN_2);//se activa el sensor e proximidad.
}
Y para finalizar lo con respecto al proyecto una pequeña muestra del video, que fue grabado mientras se ejecutaba este codigo y como trabajaba el robot sobre la maqueta.
Reflexion
Lo que desarrollo en mi esta actividad fue un tanto el hecho de poder integrar nuestros conocimientos en algo que hoy en dia mucha gente practica y es el montañismo, con un robot de este tipo se podria verificar zonas y acantilados para poder realizar una subida mas segura y por caminos mas confiables, ademas de partes donde el humano ya pierde o puede perder el sentido debido a la presion del aire, dejando claro que no es un proyecto sólo por trabajar sino uno que puede usarse para implementarlo en situaciones reales para problemas y/o motivos de investigacion.
0 comentarios:
Publicar un comentario