Beruflich Dokumente
Kultur Dokumente
Responsables:
Miguel Papadpulos
Sergio Arcinaga
A modo de Prlogo
Estimados estudiantes y docentes:
En esta cartilla hemos tratado de recopilar parte de la informacin
que se encuentra fundamentalmente en la web, a los efectos de
poner a disposicin del sistema educativo salteo, los conocimientos
necesarios para iniciarse en el fascinante mundo de la robtica.
El taller est pensado para desarrollar las capacidades de creatividad
y pensamiento lgico de nuestros estudiantes y docentes, para
mejorar las competencias comunicativas y de resolucin de
problemas, en forma colaborativa.
Toda la informacin ha sido extractada de sitios de personas que
comulgan con la filosofa del hardware y el software libre, es decir
de la libre circulacin del conocimiento y su intercambio. Es por ello
que les decimos a todos los que tengan acceso a este material y lo
consideren de utilidad, sintanse libres de modificarlo y distribuirlo.
Por ltimo agradecemos a todas las instituciones educativas que, a
partir de su participacin en el taller, nos hicieron llegar sus
sugerencias y correcciones.
Miguel y Sergio
2
Salta Argentina 2013
NDICE
3
Salta Argentina 2013
Arduino1
Pingino2
El circuito bsico del Pingino es muy simple y slo se precisan unos pocos componentes; todo el software
necesario est disponible para bajarse de internet gratuitamente.
Compilacin
1
2
http://www.arduino.cc/es/
http://www.pinguino.cc/
4
Salta Argentina 2013
1 Pulsador
1 Cuarzo 20 MHz
5 Capacitores
o
o
o
o
2 Leds
o 1 rojo
o 1 verde
3 Resistencias
o 1 de 10 K Ohm
o 2 de 470 Ohm
Una Protoboard/Placa de prueba
Pata larga
Pata corta
Imagen desarrollada con un soft ware de licencia libre llamado Fritzing. Lo pods bajar
desde su pgina oficial: http://fritzing.org/
5
Salta Argentina 2013
Resultado Final de la
plataforma Lgico y
Fsico pingino.
Muy importante
Tener en cuenta que los Pines Lgicos estn numerados por fuera del PIC y son utilizados por el lenguaje
de programacin a la hora de programar al PIC18F2550 y las patitas fsicas estn numeradas en forma de
U por dentro del PIC y se utilizan para el armado del circuito.
Por ej. la patita 2 del micro corresponde al PIN 13/ANALGICO
Adems !!!
Para que el circuito funcione, el PIC18F2550/4550 debe tener grabado el cargador de arranque (bootloader) de
Pingino, el cual puede ser descargado de:
http://sites.google.com/site/pinguinotutorial/bootloader.
Se necesita un programador de microcontroladores Microchip como el Pickit 2, Pickit 3 u otro compatible para
grabar el bootloader en el PIC18F2550/4550.
Linux
Windows XP
6
Salta Argentina 2013
Windows 7
MACOSX
Debido a que el entorno de desarrollo integrado de Pingino, el cual permite escribir, compilar y
grabar los programas, est escrito en Python, es necesario instalar componentes Python para su
funcionamiento.
En el caso de Windows, la lista de componentes vara ligeramente segn sea el sistema operativo
(Windows XP o 7) en el cual querremos instalar, sin embargo todo esto est detallado en los tutoriales
oficiales del proyecto Pinguino.
2. Una vez finalizada la instalacin del Pingino Driver conectamos la Placa Pingino en el puerto
USB de la PC. Es probable que el sistema al detectar un nuevo hardware nos muestre el Asistente
para instalarlo. Si esto sucede se debe
(Windows XP),
luego clic con el botn derecho sobre Equipo (Windows 7) o en Mi PC (Windows XP)
En la opcin Propiedades del men Luego hacer clic en Administrador de dispositivos
ubicado en el panel de la izquierda (Windows 7)
contextual hacer clic
8
Salta Argentina 2013
Vemos que el reconocimiento de la Placa Pingino debe ser curado para que Windows la
detecte adecuadamente.
3. Para ello ir a la carpeta libusb-win32-bin-1.2.6.0, luego abrir la carpeta bin y ejecutar el inf-wizard,
.Cuando llegues a la
instalacin
9
Salta Argentina 2013
10
Salta Argentina 2013
wxpython
2.8
(http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-
2.8.11.0-py26.exe)
(http://sourceforge.net/projects/pyusb/files/PyUSB%200.x/0.4.3/pyusb-0.4.3.win32py2.6.exe/download)
El ltimo programa que nos falta instalar es el Pingino Kit, para ello simplemente hacemos doble clic
sobre el cono del instalador y vamos aceptando los valores que por defecto nos propone el proceso
de instalacin, haciendo clic en Aceptar o en Siguiente-Next, segn sea el caso.
4
5
En este Taller se trabaja con la versin X.2 por ser la ms estable en estos momentos.
Aqu tendramos que poner sonido de redoblantes!!!
12
Salta Argentina 2013
Tener en cuenta que la pata larga del LED tambin llamada nodo- va
hacia el microprocesador (en este caso al Pin 13 Analgico
correspondiente a la patita 2 del PIC).
Pata larga
Pata larga
13
Salta Argentina 2013
4.- Arrancar Pingino Kit y arrastrar los bloques hasta que quede como la imagen de la columna de
la izquierda:
Desde Pingino Kit
Diagrama de Flujo
Inicio del Programa
Cdigo:
presionando F4 aparece el siguiente cdigo
(sin los comentarios en verde)
void setup() //Aqu se establece el
comportamiento de los pines
{
pinMode(13,OUTPUT); // Establecemos el
Pin Mode 13
Analogico - Output
repite
indefinidamente
lo
que
est
} //llave de cierre
Al cdigo que aparece en una ventanita luego de presionar F4, lo seleccionamos y lo copiamos presionando
Ctrl C o haciendo clic con el botn derecho del mouse y eligiendo la opcin Copy del men contextual.
14
Salta Argentina 2013
Hacer clic en
Archivo, luego clic
en Nuevo.
Presionar Ctrl V
para pegar el
cdigo.
Ahora hay que Compilar el cdigo con el botn "Compile" en la barra de herramientas (si apuntas los
conos con el mouse, se pueden ver las funciones de cada botn):
15
Salta Argentina 2013
Eurekas!!
!
Si todo ha ido bien debe aparecer en la ventana inferior Output (la que tiene fondo negro) compilation
done. Esto significa que el Pingino IDE ha podido compilar (traducir el cdigo a un lenguaje que pueda
ser entendido por el micro) con xito.
; al final de c/lnea.
Nota: No te olvides que para grabar otro nuevo programa en la placa, debes apretar el botn reset, contar hasta
3 y recin pulsar el botn "Write" en la ventana "Vascobootloader", de otro modo el Pingino no es reconocido
por el software.
Si en vez de PIC found aparece la leyenda PIC not found!! no te asustes, es probable que te hayas apresurado o
demorado en presionar Write. Simplemente vuelve a presionar reset, cuenta hasta tres y haz clic en Write nuevamente.
7
Este es el momento de los fuegos artificiales !!!
17
Salta Argentina 2013
18
Salta Argentina 2013
Diagrama de Flujo
Inicio del Programa
Cdigo
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void loop() {
digitalWrite(3,HIGH);
delay(1000);
digitalWrite(3,LOW);
delay(1000);
digitalWrite(4,HIGH);
delay(1000);
digitalWrite(4,LOW);
delay(1000);
digitalWrite(5,HIGH);
delay(1000);
digitalWrite(5,LOW);
delay(1000);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(6,LOW);
delay(1000);
digitalWrite(7,HIGH);
delay(1000);
digitalWrite(7,LOW);
delay(1000);
}
19
Salta Argentina 2013
Las tres partes del ciclo se encuentran separadas por ; (punto y coma)
La segunda parte indica la condicin de terminacin para el ciclo, la cual est directamente relacionada
con los valores iniciales.
Finalmente, la ltima parte especifica cmo sern incrementados los valores iniciales en cada iteracin
o repeticin del ciclo: de uno en uno, de dos en dos, etc.
Desde Pingino Kit
Diagrama de Flujo
Cdigo
int tiempo=2000; // Inicializamos
Inicializamos variables
I = 0 utilizado en ciclo For
i3
i<8
//Inicializamos
i i + 1
Si
las
salidas
No
for(i=3;i<8;i++){
pinMode(i,OUTPUT);
}
i3
}
i<8
void loop() {
i i + 1
for(i=3;i<8;i++){
Si
No
digitalWrite(i,HIGH);
delay(tiempo);
digitalWrite(i,LOW);
delay(tiempo);
}
}
20
Analicemos con detenimiento lo que hace el ciclo for y el comando digitalWrite que est en su interior:
for (i=3;i<8;i++){
digitalWrite(i,HIGH);
}
1.- La primera vez que se ejecute esta instruccin la variable i es igual a 3 por lo tanto digitalWrite ser:
digitalWrite(3,HIGH) se prende el led conectado al Pin 3 (correspondiente a la patita 24)
2.- La segunda vez que se ejecute esta instruccin i=4 por lo tanto digitalWrite ser:
digitalWrite(4,HIGH) se prende el led conectado al Pin 4 (correspondiente a la patita 25)
3.- La tercera vez que se ejecute esta instruccin i=5 por lo tanto digitalWrite ser:
digitalWrite(5,HIGH) se prende el led conectado al Pin 5 (correspondiente a la patita 26)
4.- La cuarta vez que se ejecute esta instruccin i=6 por lo tanto digitalWrite ser:
digitalWrite(6,HIGH) se prende el led conectado al Pin 6 (correspondiente a la patita 27)
5.- La quinta vez que se ejecute esta instruccin i=7 por lo tanto digitalWrite ser:
digitalWrite(7,HIGH) se prende el led conectado al Pin 7 (correspondiente a la patita 28)
La sexta vez que se ejecute el ciclo for la variable i ser igual a 8 por lo tanto la condicin i<8 no se cumplir.
Esto hace que se termine el ciclo for y por consiguiente la secuencia de encendido y apagado de los leds.
Y si quisiera que la secuencia de encendido y apagado continuara indefinidamente (para que finalice debera
desenchufar la placa Pingino del puerto USB de la PC), qu debera hacer?
Simplemente agregar i=3; (sin las comillas) despus de la llave de cierre del ciclo for. Te animas a
comprobarlo?
Muy bien!! completamos nuestra actividad utilizando ciclos FOR, ahora te proponemos la siguiente actividad:
1 - Encontrar una alternativa para modificar la secuencia de encendido y apagado de los leds. Que en vez de
iniciar la secuencia desde el led 1 se inicie desde el led 5, de la siguiente manera:
Secuencia Anterior
Tiempo 1
Prenda el LED 1
Prender el LED 5
Tiempo 2
Prenda el LED 2
Prender el LED 4
Tiempo 3
Prenda el LED 3
Prender el LED 3
Tiempo 4
Prenda el LED 4
Prender el LED 2
Tiempo 5
Prenda el LED 5
Prender el LED 1
21
Salta Argentina 2013
3 Este cajn contiene el valor numrico 3. El ndice del 1 cajn es cero. Se representa: a[0]=3
4 Este cajn contiene un 4 y su ndice es 1. Se representa como: a[1]=4
5 Este cajn contiene un 5 y su ndice es 2. Se representa como: a[2]=5
6 Este cajn contiene un 6 y su ndice es 3. Se representa como: a[3]=6
7
El ltimo cajn
Es decir que se identifica el vector con un nombre (puede ser una letra o una palabra) luego se encierra entre
corchetes el ndice -que es la posicin que ocupa el dato dentro del vector- teniendo en cuenta que la primera
posicin es el ndice cero- luego se coloca el signo igual y a continuacin su valor: nombre vector[ndice]=valor
22
Salta Argentina 2013
void loop() {
for(n=0;n<5;n++){
digitalWrite(leds[n],HIGH);
delay(tiempo);
digitalWrite(leds[n],LOW);
delay(tiempo);
}
}
Muy bien!! Completamos nuestra actividad utilizando un vector, ahora te proponemos la siguiente actividad:
Cambiar el cdigo del programa para obtener la siguiente secuencia de encendido y apagado de los leds: led 7
led 3 led 6 led 2 led 4.
Una vez resuelta la anterior secuencia puedes realizar otras secuencias utilizando otro patrn de encendido y
apagado de los leds. Juega un poco con distintas alternativas y saca tus propias conclusiones.
Materiales
1 resistencia de 10 k
1 Pulsador
1 led
Pulsador
En el esquemtico se observa las conexiones necesarias para poner en prctica el siguiente ejemplo de cdigo:
void setup()
{
pinMode(7,OUTPUT);
pinMode(13,INPUT);
}
void loop()
{
if(digitalRead(13)== LOW) //Si el Pin 13 es LOW, el pulsador est presionado.
{
toggle(7); //El Pin 7 cambia de estado: si est LOW pasa a HIGH y viceversa
while(digitalRead(13)==LOW); //Para superar rebotes aleatorios del pulsador.
delay(250);
}
}
En esta secuencia de cdigo definimos por primera vez una patita del micro como entrada (INPUT), tambin
vemos como se lee dicha entrada o sea, cuando se presiona el pulsador (con el comando digitalRead). El
comando toggle nos permite prender si est apagado o apagar si est prendido el led conectado al Pin 7
(definido como de salida/OUTPUT). Por ltimo con el comando while (que significa: mientras) evitamos los
efectos de rebote que pueda tener el pulsador ya que nicamente deja que el void loop se repita si es que el
pulsador efectivamente est presionado.
int i=5;
int tiempo=?;
void setup() {
for(i=?;i<?;i++){
pinMode(i,OUTPUT);
}
}
void loop() {
for(i=?;i<?;i++){
digitalWrite(i,HIGH);
delay(tiempo);
digitalWrite(i,LOW);
delay(tiempo);
}
}
24
Salta Argentina 2013
Una ayudita con el cdigo (una mezcla de los dos ejemplos anteriores):
int i=5;
int tiempo=?;
void setup()
{
pinMode(13,INPUT);
for(i=?;i<?;i++){
pinMode(i,OUTPUT);
}
}
void loop()
{
if(digitalRead(13)== LOW) //Si el Pin 13 es LOW, el pulsador est presionado.
{
for(i=?;i<?;i++){
digitalWrite(i,HIGH);
delay(tiempo);
25
Salta Argentina 2013
digitalWrite(i,LOW);
delay(tiempo);
}
while(digitalRead(13)==LOW); //Para superar rebotes aleatorios del pulsador.
delay(250);
}
}
Ntese que el tiempo entre el inicio de una seal y otra es constante y se llamada PERODO (la distancia en
tiempo entre una meseta y otra).
8
La modulacin por ancho de pulsos (tambin conocida como PWM, siglas en ingls de pulse-width modulation)
de una seal o fuente de energa es una tcnica en la que se modifica el ciclo til de una seal (el que tiene forma de
meseta), ya sea modificando el ancho del pulso o duty cycle (modulacin de ancho de pulso) o el tiempo entre pulso y
pulso (modulacin por frecuencia de pulso).
26
Salta Argentina 2013
Esto significa que la frecuencia (nmero de ciclos tiles por unidad de tiempo) siempre es la misma. Por
ejemplo, si tenemos durante un segundo la seal a 5 voltios y durante otro segundo a 0 voltios, el nivel medio
en 2 segundos habr sido de 2.5 V exactos. Si utilizamos una seal, por ejemplo, que est al 40% del nivel alto
(5 vol), tendremos un nivel medio de 2.0V (0.40V*5). En definitiva esto har que si tenemos un led conectado
al pin de salida del PIC- la intensidad de su luz aumente o disminuya.
La instruccin anlogWrite hace esto a travs de los dos valores que deben definirse separados por una coma y
encerrados entre parntesis:
analogWrite(pin PWM, DutyCycle)
Recordar que el PIC tiene las patitas 12 y 13 como pines PWM (las patitas 12 y 13 corresponden a los pines 11 y
12 respectivamente, ver esquemtico de la pgina 6) y los valores de Duty Cycle pueden variar entre 0 y 1023
(0= sin seal y 1023=mximo valor de la seal).
En la siguiente tabla se ejemplifican algunos valores:
Instruccin
Duty Cycle
Pin de salida
PWM
% de la seal
Valor de la
seal de salida
analogWrite(11, 64)
256
11
25% de 5 vol.
1.25 vol.
analogWrite(11, 127)
512
11
50% de 5 vol.
2.5 vol.
analogWrite(11, 191)
768
11
75% de 5 vol.
3.75 vol.
El siguiente cdigo lee el valor que el potencimetro introduce por el pin 13 del PIC, para utilizar dicho valor en
el tiempo de encendido y apagado de un led conectado al pin 11. Ntese que si el pin 13 es usado como de
ingreso de datos analgicos no necesita ser definido en el void setup. El resultado es un led que modifica su
velocidad de parpadeo segn se modifiquen los valores introducidos a travs del giro del cabo del
potencimetro.
#define LED 11
#define POT 13
int val = 0;
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
val = analogRead(POT);
digitalWrite(LED, HIGH);
delay(val);
digitalWrite(LED, LOW);
delay(val);
}
El siguiente cdigo permite cambiar la intensidad de la luz emitida por un diodo Led conectado al pin 11
(recordemos que es un pin de salida PWM) segn se vare la seal de entrada por el pin 13 a travs del giro del
cabo del potencimetro. Ntese que en el void setup no se define nada ya que las entradas (INPUT) como las
salidas (OUTPUT) analgicas no necesitan definirse.
#define LED 11
#define LDR 13
int valu = 0;
void setup()
{
}
void loop()
{
valu = analogRead(LDR);
valu = valu/4;//Se divide por 4 el valor entregado por el potencimetro para que no sea tan alto
analogWrite(LED, valu);
delay(10);
}
28
Salta Argentina 2013
29
Salta Argentina 2013
10
11
12
13
14
15
16
17
30
Salta Argentina 2013
Conectando el motor a Pingino: no se puede conectar los dos cables del motorcito directamente a la
placa Pingino ya que es necesario proteger la placa contra posibles picos de corriente inversa cuando se activa
o desactiva el motor9. Para poder proteger la placa vamos a conectar el motor a un chip llamado L293D
El L293D no solo nos permite proteger el circuito sino tambin controlar el sentido del giro del motor y tambin
combinado con las salidas PWM del Pingino- la variacin de su velocidad.
El circuito de conexin es el siguiente:
Como se ve en el esquemtico anterior se pueden conectar dos motorcitos, copiando en el lado derecho las
conexiones detalladas en el lado izquierdo.
Para que te resulte ms fcil su conexin presentamos las imgenes -desarrolladas en Fritzing- del cableado
desde Pingino al L293D y al motor:
Cuando un motor contina girando (debido a la inercia) despus de ser apagado se convierte en un generador
de corriente. Esta corriente generada por el motor puede daar la placa electrnica, al retornar a la placa Pingino.
31
Salta Argentina 2013
Referencia:
Cable marrn => del pin 11 del Pingino al pin 1 del L293D
Cable gris
Cable naranja => del pin 14 del Pingino al pin 7 del L293D
Cable verde => del pin 3 del L293D al motorcito
Cable amarillo => del pin 6 del L293D al motorcito
L293D
Pin 13
Pin 14
Motor
LOW
LOW
PARADA
HIGH
LOW
GIRO EN UN SENTIDO
LOW
HIGH
Para manejar adems la velocidad de giro debemos manejar los valores del pin PWM; a tal efecto presentamos
un ejemplo de cdigo:
#define motor 11 // Recordar que los nicos pines PWM son el 11 y el 12
void setup()
{
//Recordar que los pines analgicos no necesitan ser definidos
}
void loop(){
unsigned int a;
for (a=0;a<1023;a++) {
analogWrite(motor,a);
delay(1);
}
for (a=1023;a>0;a--) {
analogWrite(motor,a);
delay(100);
}
}
33
Salta Argentina 2013
Diodo IR Fototransistor
A: nodo
E: Emisor
K: Ctodo C: Colector
10
Cuando la luz del emisor infrarrojo impacta sobre la base del fototransistor se conduce una corriente entre el Colector y el Emisor que produce la
seal de salida. La salida de este circuito es analgica y viene determinada por la cantidad de luz reflejada.
34
Salta Argentina 2013
Conectamos un led al pin 7 de Pingino y el cable blanco que sale del circuito del CNY70 lo conectamos al pin
13 de Pingino, tal como lo muestra el esquema:
Una vez que se tiene todo conectado procedemos a grabar en el Pingino el cdigo para probar la
deteccin de superficies claras y obscuras. Para ello cargamos el IDE de Pingino X2 y copiamos el siguiente
cdigo:
#define ledR 7
#define CNY70 13
int rojo=0;
void setup(){
pinMode(ledR,OUTPUT);
digitalWrite(ledR,LOW);
}
void loop() {
rojo = (5.0 * analogRead(CNY70) ) / 1024;
if (rojo < 1) {
digitalWrite(ledR,LOW);
}
if (rojo > 2.0) {
digitalWrite(ledR,HIGH);
}
delay(1000);
}
4.
5.
Luego se pregunta si rojo es menor que 1, esto quiere decir si sobre el CNY70 hay una superficie
blanca, el led rojo permanece apagado o se apaga si estaba encendido.
Si rojo es mayor a 2 quiere decir que sobre el CNY70 hay una superficie rojo y el led rojo ser
encendido si estaba apagado o continuar prendido si ya lo estaba.
De esta manera le hemos enseado a Pingino a distinguir entre superficies blancas y superficies negras.
36
Salta Argentina 2013
37
Salta Argentina 2013
38
Salta Argentina 2013
4.
5.
6.
11
7. Una vez se reinicie el sistema aparecer un men donde se pueden elegir diferentes opciones como:
Habilitar Depuracin, Habilitar el registro de arranque, Habilitar modo seguro, etc. Hay que elegir la opcin
7 "Deshabilitar el uso obligatorio de controladores firmados".
8.
9.
40
Salta Argentina 2013