Está en la página 1de 10

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE CÓMPUTO

INTRODUCCIÓN A LOS MICROCONTROLADORES

PROFESOR:

Aguilar Sanchez Fernando

ALUMNOS:

Arruti Sánchez Alondra


Carrillo Soto Cristian Eduardo

Grupo: 3CM14

Fecha de Entrega: 23/12/22

PRÁCTICA 12

Proyecto 02 Bee-Bot
Introducción

En la siguiente introducción se informará el cómo es que funcionan los productos o


juguetes que se fabrican para los niños y como dicho producto lleva una programación y
circuitos dentro de este.

La sociedad cambia. Lo hace también la tecnología, nuestra vida diaria y la educación


también debería ponerse al día. Un ejemplo son los juguetes para aprender a programar.

Hay días en los que deseamos “volver a ser niños”. No solo porque se llega a una edad
donde echamos de menos ciertas comodidades de la infancia sino porque la infancia actual
tiene acceso a inventos y tecnologías que en otras épocas eran inferiores o simplemente no
se encontraban con tanta facilidad como hoy en día.

Gracias a la “miniaturización y abaratamiento de los componentes electrónicos” y al


empeño de muchos programadores que de niños no tuvieron ciertas ventajas en su
aprendizaje, han proliferado multitud de proyectos que tienen el propósito de “enseñar
mediante el juego” y “a través de la tecnología”.

Ya viene siendo habitual que en un aula haya una computadora. En ocasiones incluso hay
tabletas con las que usar “aplicaciones educativas” en horario lectivo. Y cada vez es más
habitual que haya también “juguetes educativos”, en especial en asignaturas como las
matemáticas o la tecnología.

Los padres y profesores que son verdaderamente conscientes de la importancia de la


programación y la innovación en esta nueva etapa de la vida están constantemente
buscando nuevos métodos, herramientas y formas atractivas de hacer que los niños de hoy
integren las herramientas y fortalezcan las capacidades que les ayudarán en un futuro
cercano. Todos sabemos lo trascendentales que son las habilidades del siglo XXI y la
importancia de enseñar a nuestros niños a formar un buen trabajo en equipo, a ser
pensadores críticos, solucionadores de problemas y líderes de pensamiento.

Estas habilidades, junto con los conocimientos adquiridos en la programación, abrirán las
puertas a tus hijos cuando llegue el momento de entrar con fuerza en el trabajo local.

1
Códigos
1. Código de la configuración de los periféricos
1. // I/O Registers definitions
2. #include <mega8535.h>
3. #include <delay.h>
4. #define AVA PINB.0
5. #define RET PINB.1
6. #define DER PINB.2
7. #define IZQ PINB.3
8. #define GO PINB.4
9. #define PAU PINB.5
10. #define CLEAR PINB.6
11. bit BaAVA,BpAVA,BaRET,BpRET,BaDER,BpDER,BaIZQ,BpIZQ,BpGO,BaGO,BpCLEAR,BaCLEAR;
12.
13. char Memoria[10];
14. unsigned char cont,i;
15.
16. // Declare your global variables here
17.
18. void main(void)
19. {
20. // Declare your local variables here
21.
22. // Input/Output Ports initialization
23. // Port A initialization
24. // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
25. DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) |
(1<<DDA0);
26. // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
27. PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) |
(0<<PORTA1) | (0<<PORTA0);
28.
29. // Port B initialization
30. // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
31. DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) |
(0<<DDB0);
32. // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=P Bit0=P
33. PORTB=(1<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) |
(1<<PORTB1) | (1<<PORTB0);
34.
35. // Port C initialization
36. // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
37. DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) |
(0<<DDC0);
38. // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
39. PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) |
(0<<PORTC1) | (0<<PORTC0);
40.
41. // Port D initialization
42. // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
43. DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) |
(0<<DDD0);
44. // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
45. PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) |
(0<<PORTD1) | (0<<PORTD0);
46.
47. // Timer/Counter 0 initialization
48. // Clock source: System Clock
49. // Clock value: Timer 0 Stopped
50. // Mode: Normal top=0xFF
51. // OC0 output: Disconnected
52. TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
53. TCNT0=0x00;
54. OCR0=0x00;
55.
56. // Timer/Counter 1 initialization
57. // Clock source: System Clock

2
58. // Clock value: Timer1 Stopped
59. // Mode: Normal top=0xFFFF
60. // OC1A output: Disconnected
61. // OC1B output: Disconnected
62. // Noise Canceler: Off
63. // Input Capture on Falling Edge
64. // Timer1 Overflow Interrupt: Off
65. // Input Capture Interrupt: Off
66. // Compare A Match Interrupt: Off
67. // Compare B Match Interrupt: Off
68. TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
69. TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
70. TCNT1H=0x00;
71. TCNT1L=0x00;
72. ICR1H=0x00;
73. ICR1L=0x00;
74. OCR1AH=0x00;
75. OCR1AL=0x00;
76. OCR1BH=0x00;
77. OCR1BL=0x00;
78.
79. // Timer/Counter 2 initialization
80. // Clock source: System Clock
81. // Clock value: Timer2 Stopped
82. // Mode: Normal top=0xFF
83. // OC2 output: Disconnected
84. ASSR=0<<AS2;
85. TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
86. TCNT2=0x00;
87. OCR2=0x00;
88.
89. // Timer(s)/Counter(s) Interrupt(s) initialization
90. TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0)
| (0<<TOIE0);
91.
92. // External Interrupt(s) initialization
93. // INT0: Off
94. // INT1: Off
95. // INT2: Off
96. MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
97. MCUCSR=(0<<ISC2);
98.
99. // USART initialization
100. // USART disabled
101. UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) |
(0<<TXB8);
102.
103. // Analog Comparator initialization
104. // Analog Comparator: Off
105. // The Analog Comparator's positive input is
106. // connected to the AIN0 pin
107. // The Analog Comparator's negative input is
108. // connected to the AIN1 pin
109. ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) |
(0<<ACIS0);
110. SFIOR=(0<<ACME);
111.
112. // ADC initialization
113. // ADC disabled
114. ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) |
(0<<ADPS0);
115.
116. // SPI initialization
117. // SPI disabled
118. SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) |
(0<<SPR0);
119.
120. // TWI initialization
121. // TWI disabled
122. TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

3
2. Código del programa principal en C
while (1){
if(CLEAR==0) BaCLEAR=0; else BaCLEAR=1;
if(GO==0) BaGO=0; else BaGO=1;
//GO
if ((BpGO==1)&&(BaGO==0)){ //1 a 0
i=0;

while(i<=9){
//RECORRIDO DE ARREGLO
if(PAU==0) i=10;
if(Memoria[i]==1){
PORTA=0x5;
i++;
delay_ms(1000);
}
if(PAU==0) i=10;
if(Memoria[i]==2){
PORTA=0xA;
i++;
delay_ms(1000);
}
if(PAU==0) i=10;
if(Memoria[i]==3){
PORTA=0x1;
i++;
delay_ms(1000);
}
if(PAU==0) i=10;
if(Memoria[i]==4){
PORTA=0x2;
i++;
delay_ms(1000);
}
}
PORTA=0x00;
delay_ms(40);
}

//CLEAR
if ((BpCLEAR==1)&&(BaCLEAR==0)){ //1 a 0
for(i=0;i<10;i++) Memoria[i]=0;
cont=0;
while (cont<10){
if(AVA==0) BaAVA=0; else BaAVA=1;
if(RET==0) BaRET=0; else BaRET=1;
if(DER==0) BaDER=0; else BaDER=1;
if(IZQ==0) BaIZQ=0; else BaIZQ=1;

//AVANZA
if ((BpAVA==1)&&(BaAVA==0)){ //1 a 0

4
Memoria[cont]=1;
cont++;
delay_ms(40);
}
//RETROCEDE
if ((BpRET==1)&&(BaRET==0)){ //1 a 0
Memoria[cont]=2;
cont++;
delay_ms(40);
}
//DERECHA
if ((BpDER==1)&&(BaDER==0)){ //1 a 0
Memoria[cont]=3;
cont++;
delay_ms(40);
}
//IZQUIERDA
if ((BpIZQ==1)&&(BaIZQ==0)){ //1 a 0
Memoria[cont]=4;
cont++;
delay_ms(40);
}
//Cambio de 1 a 0 (AVANZA)
if ((BpAVA==0)&&(BaAVA==1)) delay_ms(40);
BpAVA=BaAVA;
//Cambio de 1 a 0 (RETROCEDE)
if ((BpRET==0)&&(BaRET==1)) delay_ms(40);
BpRET=BaRET;
//Cambio de 1 a 0 (DERECHA)
if ((BpDER==0)&&(BaDER==1)) delay_ms(40);
BpDER=BaDER;
//Cambio de 1 a 0 (IZQUIERDA)
if ((BpIZQ==0)&&(BaIZQ==1)) delay_ms(40);
BpIZQ=BaIZQ;
}
delay_ms(40);
}
//Cambio de 1 a 0 (CLEAR)
if ((BpCLEAR==0)&&(BaCLEAR==1)) delay_ms(40);
BpCLEAR=BaCLEAR;
//Cambio de 1 a 0 (GO)
if ((BpGO==0)&&(BaGO==1)) delay_ms(40);
BpGO=BaGO;
};

5
Circuitos
1. Circuito simulado en Proteus

Figura. 1 Circuito armado en proteus con salida 0101.

Figura. 2 Circuito armado en proteus con salida 0100.

6
2. Circuito armado

Figura. 3 Circuito armado en físico

Figura. 4 Circuito armado en físico (cambio)

7
Conclusiones

En general la práctica es sencilla y en lo personal el resultado es más satisfactorio a la


vista cuando se utilizan leds en lugar de motores, además de que evitar el uso del para
infrarrojo facilita en gran medida el armado y realización de esta práctica.

Para la realización se definió el pin de cada uno de los botones, que no fue precisamente la
mejor opción, porque esto implica que cada uno de los botones debe seguir la estructura
previamente manejada en otras prácticas para evitar rebotes y ruido en las lecturas,
generando que el código sea más extenso. Por otro lado, se definió un arreglo con tamaño
de 10 y debido a la lógica que se utilizó las secuencias introducidas deberán de tener una
extensión de 10 forzosamente.

Finalmente, se puede decir que el código se encuentra dividido en 2 secciones que son Go
y Clear, siendo Go quien contiene el fragmento de código que mostrara el recorrido y a
Pause para detener a Go, siendo necesario pausar a Go para poder ingresar una nueva
secuencia. Mientras que Clear vacía el arreglo y permite que se ingrese la nueva secuencia.

Arruti Sánchez Alondra

En esta práctica se observo cómo los juguetes que antes utilizamos tenían una
programación como la que se utilizo en este proyecto por lo que la forma en la que se
programo fue muy interesante de comprender y codificarlo. Al igual que hacer el circuito
fue una parte compleja ya que se construyó con diodos LED en vez de utilizar los motores
que se planificaron en el diseño de este aún así se observó el funcionamiento correcto de
este y los botones que fueron programados para dicha práctica por lo que si bien al
momento de realizar la práctica hubo una que otra falla, mi compañera pudo restaurar de
manera eficaz el circuito para poder seguir viendo las pruebas del proyecto número dos.
Carrillo Soto Cristian Eduardo

8
Bibliografía

[1] "STEM Programación de juegos para niños ¿Cuál es el mejor para la Codificación?" TekkieUni -
Coding for Kids. https://tekkieuni.com/es/blog/best-coding-toys-for-kids/ (accedido el 18 de
diciembre de 2022).

También podría gustarte