Autor: Fernando Meza
Competencia: Aplica las Ciencias de la ingeniería.
Palabras Clave: NXC
Esta actividad trabaja con el lenguaje NXC, Como hemos venido asiendo desde el primer semestre El robot debe iniciar su recorrido con una potencia de 20 e iniciar un timer en 0.
Mientras el robot busca zonas de puntaje se emitirá constantemente una música ad-hoc. Cuando detecte una zona de puntaje (círculo negro), el robot: Emitirá una música de anotación de puntos, Registrará el puntaje obtenido en la posición correspondiente dentro de un arreglo (array),
Aumenta la potencia de movimiento en 10, hasta el máximo de, 100.Girará aleatoriamente sobre su eje,Reiniciará el timer a 0.
Seguirá su rumbo con la nueva velocidad.
Y finalmente Volverá a su música de recorrido Habitual y Ademas
Si el robot detecta una señal audible de 80 db o aproximada girará en un ángulo apropiado Definido por nosotros de modo de esquivar un obstáculo, o bien corregir su recorrido. Cuando el robot choque contra algún obstáculo se detendrá, finalizará todas las tareas y mostrará en el visor cada uno de los puntajes guardados en el arreglo y la suma total de los mismos.
Competencia: Aplica las Ciencias de la ingeniería.
Palabras Clave: NXC
Esta actividad trabaja con el lenguaje NXC, Como hemos venido asiendo desde el primer semestre El robot debe iniciar su recorrido con una potencia de 20 e iniciar un timer en 0.
Mientras el robot busca zonas de puntaje se emitirá constantemente una música ad-hoc. Cuando detecte una zona de puntaje (círculo negro), el robot: Emitirá una música de anotación de puntos, Registrará el puntaje obtenido en la posición correspondiente dentro de un arreglo (array),
Aumenta la potencia de movimiento en 10, hasta el máximo de, 100.Girará aleatoriamente sobre su eje,Reiniciará el timer a 0.
Seguirá su rumbo con la nueva velocidad.
Y finalmente Volverá a su música de recorrido Habitual y Ademas
Si el robot detecta una señal audible de 80 db o aproximada girará en un ángulo apropiado Definido por nosotros de modo de esquivar un obstáculo, o bien corregir su recorrido. Cuando el robot choque contra algún obstáculo se detendrá, finalizará todas las tareas y mostrará en el visor cada uno de los puntajes guardados en el arreglo y la suma total de los mismos.
Codigo Programa Dribbler
#define UMBRAL 40
#define DECIBEL 80
int i = 0;
int velocidad = 20;
int t = 0;
int puntaje[];
int potencia = 100;
int timer;
sub GuardarArchivo()
{
byte punteroArchivo;
string cadena;
byte bytesEscritos;
int totalpuntos = 0;
CreateFile("Puntos.txt", 512, punteroArchivo);
WriteLnString(punteroArchivo," Puntajes ", bytesEscritos);
WriteLnString(punteroArchivo," ________ ", bytesEscritos);
for(i = 0; i < ArrayLen(Puntaje); i++)
{
totalpuntos = totalpuntos + puntaje[i];
cadena = Strcat(i + 1,".- ",(NumToStr(Puntaje[i])));
WriteLnString(punteroArchivo, cadena, bytesEscritos);
}
WriteLnString(punteroArchivo,"El total es ", bytesEscritos);
WriteLnString(punteroArchivo,totalpuntos, bytesEscritos);
CloseFile(punteroArchivo);
}
task Melodia()
{
while(true)
{
PlayTone(262,400); Wait(2000);
PlayTone(294,700); Wait(1000);
PlayTone(330,400); Wait(2000);
PlayTone(294,900); Wait(1000);
PlayTone(262,1600); Wait(4000);
}
}
task Final()
{
while(true)
{
OnFwd(OUT_AC,velocidad);
if(Sensor(IN_3)==1)
{
TextOut(5,3,"El puntaje total es");
NumOut(5,5,puntos[i]);
sub GuardarArchivo()
StopAllTasks();
}
if(potencia => 100)
{
TextOut(5,3,"El puntaje total es");
NumOut(5,5,puntos[i]);
StopAllTasks();
}
}
}
task PuntoNegro()
{
timer=CurrentTick();
while(true)
{
if(Sensor(IN_1_) < UMBRAL)
{
for(i = 0;i < 10;i++)
{
t = CurrentTick() -timer;
if(t <= 10)
{
puntaje[i] = (-5 * t) + 50;
NumOut(5,5,puntaje[i]);
}
else
{
puntaje[i] = 0;
NumOut(5,5,puntaje[i]);
}
PlayTone(500,300);
Wait(1000);
velocidad++;
}
}
}
}
task Evitar()
{
if(Sensor(IN_2) > 80)
{
OnRev(OUT_AC,50)
Wait(300);
OnFwd(OUT_A,50);
Wait(600);
}
}
task main ()
{
Precedes(Melodia,Final,Evitar,PuntoNegro); //activamos las subrutinas
SetSensorLight(IN_1); //activamos cada sensor
SetSensorSound(IN_2);
SetSensorTouch(IN_3);
}
Link Del Video : http://www.youtube.com/watch?v=oXWaWcsrSfo // Demostracion del Ejercicio Video.
#define UMBRAL 40
#define DECIBEL 80
int i = 0;
int velocidad = 20;
int t = 0;
int puntaje[];
int potencia = 100;
int timer;
sub GuardarArchivo()
{
byte punteroArchivo;
string cadena;
byte bytesEscritos;
int totalpuntos = 0;
CreateFile("Puntos.txt", 512, punteroArchivo);
WriteLnString(punteroArchivo," Puntajes ", bytesEscritos);
WriteLnString(punteroArchivo," ________ ", bytesEscritos);
for(i = 0; i < ArrayLen(Puntaje); i++)
{
totalpuntos = totalpuntos + puntaje[i];
cadena = Strcat(i + 1,".- ",(NumToStr(Puntaje[i])));
WriteLnString(punteroArchivo, cadena, bytesEscritos);
}
WriteLnString(punteroArchivo,"El total es ", bytesEscritos);
WriteLnString(punteroArchivo,totalpuntos, bytesEscritos);
CloseFile(punteroArchivo);
}
task Melodia()
{
while(true)
{
PlayTone(262,400); Wait(2000);
PlayTone(294,700); Wait(1000);
PlayTone(330,400); Wait(2000);
PlayTone(294,900); Wait(1000);
PlayTone(262,1600); Wait(4000);
}
}
task Final()
{
while(true)
{
OnFwd(OUT_AC,velocidad);
if(Sensor(IN_3)==1)
{
TextOut(5,3,"El puntaje total es");
NumOut(5,5,puntos[i]);
sub GuardarArchivo()
StopAllTasks();
}
if(potencia => 100)
{
TextOut(5,3,"El puntaje total es");
NumOut(5,5,puntos[i]);
StopAllTasks();
}
}
}
task PuntoNegro()
{
timer=CurrentTick();
while(true)
{
if(Sensor(IN_1_) < UMBRAL)
{
for(i = 0;i < 10;i++)
{
t = CurrentTick() -timer;
if(t <= 10)
{
puntaje[i] = (-5 * t) + 50;
NumOut(5,5,puntaje[i]);
}
else
{
puntaje[i] = 0;
NumOut(5,5,puntaje[i]);
}
PlayTone(500,300);
Wait(1000);
velocidad++;
}
}
}
}
task Evitar()
{
if(Sensor(IN_2) > 80)
{
OnRev(OUT_AC,50)
Wait(300);
OnFwd(OUT_A,50);
Wait(600);
}
}
task main ()
{
Precedes(Melodia,Final,Evitar,PuntoNegro); //activamos las subrutinas
SetSensorLight(IN_1); //activamos cada sensor
SetSensorSound(IN_2);
SetSensorTouch(IN_3);
}
Link Del Video : http://www.youtube.com/watch?v=oXWaWcsrSfo // Demostracion del Ejercicio Video.
Conclusiones:
Gracias al esfuerzo y la disposición que tuvo cada uno de los integrantes del grupo de trabajo pudimos completar satisfactoriamente este proyecto , No obstante a esto tuvimos una serie de dificultades que sortear en el camino al éxito, Calibración de los giros de los motores no siempre se nos hiso fácil Al igual que las subrutinas que teníamos que aplicar y en varios casos no quedaban calibradas en su totalidad gracias a esto tuvimos más de un dolor de cabeza.
La otra dificultad que pudimos observar fue de captar los círculos negros pues al encontrar uno no podía realizar dicha acción pedida por el profesor ya que tenia un tope con otra subrutina y lo único que realizaba era un avance minimo y detenerse.
Pero después de todas estas pruebas de calibración y superficie pudimos llegar al objetivo final que era el Completar satisfactoriamente esta actividad con los puntajes finales marcados en el ladrilo
Tras esta entretenida experiencia pudimos aprender a familiarizarnos mas con nuevos comandos pasado como es el de los arreglos y el de crear archivos donde se almacenan los puntajes pedidos y ademas el lenguaje de programación NXC o NXT que a pesar de verse un poco complejo es un lenguaje que con practica y harta paciencia se comprende perfectamente para poder ser utilizado en cualquier otra experiencia.
No hay comentarios:
Publicar un comentario