Este documento presenta varios temas relacionados con la robótica y Arduino que se desarrollarán en clase, incluyendo números binarios, uso del monitor, arrays unidimensionales y bidimensionales, el circuito integrado 74HC595, y la definición y llamado a funciones. También explica conceptos básicos como los sistemas binario y hexadecimal que son importantes para comprender este entorno.
2. Temas que vamos a desarrollar en clase:
Números binarios
Uso del Monitor con el tinkercad: ejemplos en los que mostramos
información y en los que enviamos datos.
Arrays de una dimensión y de dos (declaración de Array e invocación
de sus elementos) .
Uso del Monitor interactuando con la placa Arduino
Estructura del circuito integrado 74HC595
Definición de funciones y llamado a las mismas
3. Como sabemos los ordenadores que se emplean habitualmente son
digitales, se basan en la electrónica digital, lo cual implica que la
información la manejan en base a dígitos (de forma discreta) siendo la
unidad de información es el bit, abreviatura de dígito binario, que solo
puede tener uno de los dos valores indicados, cero (0) y uno (1).
Por lo tanto se usan el sistema binario. Los ordenadores habitualmente
manejan bloques de bits, así que un grupo de 8 bits es un octeto
o byte que puede representar 256 (28) mensajes diferentes. En informática
una palabra son 16 bits.
A continuación veremos el sistema binario y hexadecimal debido a que
haremos referencia a ellos en varios temas del curso por la importancia
que tienen en todo este entorno.
4. NÚMEROS BINARIOS
LOS NÚMEROS BINARIOS SE CONFORMAN CON CEROS Y UNOS
(0,1)
EN UN CIRCUITO DE LÓGICA BINARIA:
0 UN CERO SIGNIFICA VOLTAJE CERO (APAGADO)
1 SIGNIFICA VOLTAJE MÁXIMO (PRENDIDO)
La secuencia es:
4
0
1
10
11
100
101
Los ordenadores
"utilizan" este sistema
de numeración dado
que en cada posición
de memoria solo
pueden almacenar 1
bit (o un cero o un
uno).
5. En este cuadro le mostramos la equivalencia
entre los números binarios y los decimales
5
6. PARA PASAR UN NÚMERO DECIMAL A BINARIO SE DIVIDE EL NÚMERO
DEL SISTEMA DECIMAL ENTRE 2, CUYO RESULTADO ENTERO SE
VUELVE A DIVIDIR ENTRE 2, Y ASÍ SUCESIVAMENTE HASTA QUE EL
DIVIDENDO SEA MENOR QUE EL DIVISOR, 2. ES DECIR, CUANDO EL
NÚMERO A DIVIDIR SEA 1 FINALIZA LA DIVISIÓN.
A CONTINUACIÓN SE ORDENA DESDE EL ÚLTIMO COCIENTE HASTA EL
PRIMER RESTO, SIMPLEMENTE SE COLOCAN EN ORDEN INVERSO A
COMO APARECEN EN LA DIVISIÓN. ESTE SERÁ EL NÚMERO BINARIO
QUE BUSCAMOS.
7. PARA PASAR DE NÚMERO BINARIO A DECIMAL:
El sistema binario, como el sistema decimal que usamos habitualmente, es un
sistema posicional; para el sistema binario el valor de la posición viene dado por
potencias de 2 (20
21
22
…) ya que como base solo se utilizan dos dígitos, el cero y
el uno, frente al decimal que se basa en potencias de 10.
Para realizar la conversión de binario a decimal, se realizan los siguientes pasos:
Comenzando por el lado derecho del número en binario se debe multiplicar cada
dígito por 2 elevado a la potencia consecutiva (comenzando por la potencia 0 o sea
20).
Después hay que realizar cada una de las multiplicaciones y sumarlas , el número
resultante será el equivalente al sistema decimal.
Ejemplos:
8. SISTEMA HEXADECIMAL
Como sólo disponemos de 10 caracteres para representar los
posibles dígitos para el sistema hexadecimal se añaden las
letras A, B, C, D, E y F. Por tanto en base 16 se emplean los
siguientes caracteres 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A = 10, B = 11,
C = 12, D = 13, E = 14, y F = 15.
Por ejemplo son números hexadecimales A2B, FFF, E3245B
En general se indican con el número 16 como subíndice
indicando la base :
𝑨𝟐𝑩 𝟏𝟔
9. El sistema hexadecimal es también un sistema
posicional; para el sistema hexadecimal el
valor de la posición viene dado por potencias
de 16 (160
161
162
…) .
Para hacer conversión del sistema decimal al
hexadecimal y viceversa los algoritmos son
semejantes a los que vimos para el sistema
Binario.
Trabajar con distintas bases: En el apunte
mostramos la conversión de binario a
hexadecimal
10. La tabla que muestro a continuación muestra los números
en diferentes bases. Cuando abordemos el tema del
Monitor podrán ver como obtenerla:
11. MONITOR El monitor es la ventana para la
comunicación entre Arduino y la computadora,
que se hace a través del cable USB. Es una
pequeña utilidad integrada dentro de IDE
Standard que nos permite enviar y recibir
fácilmente información de datos que se envían en
serie y a una velocidad definida en baudios por
segundo.
La comunicación a través de cualquier puerto
serie es en código binario (según el código ASCII
para caracteres alfanuméricos) y se mandan en
grupos de 8 bits (byte).
12. USO DEL MONITOR CON EL TINKERCAD
Al abrir un circuito si hacemos clic en
, habiendo seleccionado “texto” se
presentará este recuadro:
13. HACIENDO CLIC EN “MONITOR EN SERIE”
SE ABRIRÁ LA SIGUIENTE VENTANA:
En (1) mostrará la información que enviemos desde el programa al
monitor. En el recuadro inferior (2) se podrá escribir el dato que se
Enviará para que se realice por programa una determinada acción (por
ejemplo prender un led).
14. En el código de los ejemplos se utilizan las
siguientes instrucciones de Arduino:
Serial.begin(9600) : Abre el puerto serie y establece
la velocidad de datos a 9600 bps (baudios por
segundo)
Serial.print(data ) : muestra los datos enviados por el
Arduino a través del puerto serie en (1)
Serial.println(data) : actúa igual que Serial.print():
pero con salto de renglón.
Serial.read():Lee los datos seriales entrantes
después que dimos Enviar después de ser
ingresados en la ventana correspondiente (2)
Serial.available(): si hay dato en el puerto serie lo
lee
15. Ejemplo: Mostramos en monitor el valor de
una variable.
Veremos el ejemplo en el Tinkercad.
Para poder ingresar el código debemos
generar un circuito por lo que
seleccionamos entre los elementos la placa
Arduino.
16.
17. Abrimos el código y cargamos el siguiente
texto:
int conta=0;
void setup() {
//iniciamos el puerto de serie
Serial.begin(9600);
}
void loop() {
// Mostramos el valor del contador:
Serial.print(" Contador: ");
Serial.println(conta);
//incrementamos en uno el contador
conta++;
//esperamos 1000 milisegundos o sea un segundo
delay(1000);
}
19. VEMOS OTRO EJEMPLO EN EL QUE ENVIAMOS UN VALOR NUMÉRICO . EN
EL APUNTE PODRÁN VER UN EJEMPLO EN EL QUE PASAMOS DOS
VALORES ALFABÉTICO SEGÚN LA ACCIÓN A SEGUIR POR EL PROGRAMA .
AHORA VAMOS A VER OTRO EJEMPLO. EN ESTE PROGRAMA SI
ENVIAMOS UN NÚMERO ENTRE 1 Y 5A TRAVÉS DEL MONITOR SE
PRODUCE UN PARPADEO DEL LED EL NÚMERO DE VECES INDICADO.
COMO LOS DATOS ENVIADOS SON CARACTERES ASCII CÓDIGO
ESTADOUNIDENSE ESTÁNDAR PARA EL INTERCAMBIO DE INFORMACIÓN )
DEBEMOS RESTAR EL VALOR 0 AL DATO RECIBIDO PARA RECUPERAR EL
VALOR NUMÉRICO ENVIADO.
22. USO DEL MONITOR INTERACTUANDO CON LA
PLACA ARDUINO
El monitor es la ventana para la comunicación entre
Arduino y la computadora, que se hace a través del cable
USB.
Un puerto serie envía la información mediante una
secuencia de bits, los más conocidos son el popular USB
(universal serial port) .La placa Arduino UNO dispone
de una unidad USB. Un puerto es el nombre genérico
con que denominamos a los interfaces, físicos o virtuales,
que permiten la comunicación entre dos ordenadores
o dispositivos.
Entonces al estar conectada nuestra placa con el
ordenador a traves del puerto serie debemos utilizar
el mismo puerto que empleamos para programarlo(Por
ejemplo Com 3). A continuación abrimos el IDE Standard
de Arduino y hacemos click en el “Monitor Serial” como
se indica en la imagen.
23.
24.
25.
26. ARRAY
UN ARRAY ES UN CONJUNTO DE VALORES A LOS QUE SE ACCEDE CON UN NÚMERO
ÍNDICE. A ESTE CONJUNTO DE VALORES SE LE ASIGNA UN NOMBRE. CUALQUIER
VALOR PUEDE SER RECOGIDO HACIENDO USO DEL NOMBRE DEL CONJUNTO Y EL
NÚMERO DEL ÍNDICE. EL PRIMER VALOR DEL ARRAY ES EL QUE ESTÁ INDICADO CON
EL ÍNDICE 0, ES DECIR EL PRIMER VALOR DEL CONJUNTO ES EL DE LA POSICIÓN 0.
UN ARRAY TIENE QUE SER DECLARADO INDICANDO LA CANTIDAD DE ELEMENTOS
QUE AGRUPA. Y OPCIONALMENTE ASIGNADOS VALORES A CADA POSICIÓN ANTES
DE SER UTILIZADO.
27. En el siguiente programa cargamos los 300
500 5000 y 8000 en un Array de 4
componentes. Luego se utilizan estos valores
como parámetros de la instrucción delay(),
haciendo que el led se prenda y/o apague
entre diferentes intervalos de tiempo.
28.
29. Veremos que hay dos ciclos “for” el primero es
este:
Indicando parpadeo[0]
accedemos al primer
elemento del conjunto :
“300”
32. Array de dos dimensiones
A este tipo de Array se lo denomina también Matriz. Veremos un ejemplo de 3
filas y 7 columnas.
Si colocamos letras se define como:
char Mensaje [3] [7] ;
Para indicar el contenido de un elemento tendremos que indicar primero la fila
y luego la columna. Comienzan con los índices [0] [0]
El elemento Mensaje [1] [6] contiene la letra H
33. En el siguiente programa está definido un Array de dos dimensione
Mensaje de 3 x 7.
Muestra en el Monitor el contenido del Array (los 21 elementos).
Permite cambiar el contenido del elemento Mensaje [1] [6] por un
valor ingresado en el Monitor
34.
35.
36. CIRCUITO INTEGRADO 74HC595
El circuito integrado 74HC595 es un registro de
desplazamiento de 8 bit con entradas en serie y salidas en
paralelo.
En esta Clase veremos como conectar 8 Leds con 3 pines
de la placa Arduino. Tiene múltiples aplicaciones y
veremos algunas de ellas en las siguientes clases.
Conectado a 8
leds
Conectado a Display LCD 2
x16
Conectado a Display
LED 7 Segmentos
37. El circuito que muestro, realizado en el Tinkercad, es con el
que vamos a trabajar en esta clase. Estudiaremos como se
conectan los pines del circuito integrado y el tratamiento que
le damos en el código. Si bien el circuito presenta 16 pies
conectaremos 15 ya que el otro se utiliza para otro tipo de
conexiones.
38. Los leds estarán conectados a 8 resistencias que se conectarán a los
8 pines que señalo en este esquema de Q0 a Q7. Los leds no se
declaran en el código y estos pines al ser de salida son manejados
mediante el desplazamiento que se realiza en el código y tampoco se
declaran ya que no están conectados a la placa Arduino.
39. Si numeramos los pins del circuito integrado de la siguiente forma
tendremos el siguiente esquema:
Ahora vamos a definir los 3 pins que marco en el esquema y
que se conectan a la placa Arduino por lo tanto se definen en
el código. Al estudiar como se manejan entenderemos la
aplicación del circuito integrado 74HC595. Estos pins se
conectan a tres pins de la placa y se maneja mediante la
instrucción digitalWrite(,)… pasando los valores LIGH y
LOW
40. Una vez que se paso información al
Pindata, o sea : LIGH (1) o LOW(0) si se
pone en HIGH el Pinclock se produce un
corrimiento. Mientras el Pinlalch- se
mantenga en LOW se almacenan
nuestros datos de entrada en el buffer y
cuando lo colocamos en HIGH se envía
esta información a los pines de salida Q0
a Q7
41. Al comienzo del programa asignamos a cada pin de la placa un
nombre que se corresponde con la conexión que realizamos como
vemos en la figura:
const int latchPin = 8; // Pin conectado al Pin 12 del 74HC595
(Latch)
const int dataPin = 9; // Pin conectado al Pin 14 del 74HC595
(Data)
const int clockPin = 10; // Pin conectado al Pin 11 del 74HC595
(Clock)
42. En este código se encienden los 8 leds y después se los
apaga
43. Vamos a analizar un programa que enciende los leds según la
generación de números binarios de 1 a 256. Estos son algunos
ejemplos:
Representa el 1 Representa el 5
(101)
Representa el 10 (1010)
En el Monitor muestra los números que se van
generando
44.
45. Definición de funciones y el llamado a las mismas.
Para hacer el código mas estructurado o cuando una parte del código la
vamos a usar más de una vez en general definimos funciones.
Vamos a reescribir el ejemplo anterior en el que prendíamos y apagábamos
todos los leds y definimos dos funciones : una de ellas es sin parámetros y
a la otra le pasamos un parámetro. Vemos el código:
46.
47. La depuración de programas es el
proceso de identificar y corregir errores de
programación: para lo cual utilizamos un
depurador (en inglés, debugger), que es
un programa usado para probar y depurar
(eliminar) los errores de otros programas.
Depuración de programas