Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Presentaciones
2. El Hardware: Arduino por fuera
a. Los pines analógicos y digitales
b. Los pines de alimentación
3. El Software: Arduino por dentro
a. Variables
b. Funciones
c. Esperas
d. Estructuras de control
4. Conclusiones
De cero a Rufián de Arduino
deRufián en la Red
se encuentra
bajo laLicencia Creative Commons Reconocimiento
CompartirIgual 4.0 Internacional
.
Rufián en la Red 2
¡Hola! Soy Sergio, Rufián en la red. Además soy ingeniero electrónico y si has llegado por
aquí sabrás que tengo un blog llamado Rufián en la Red . A día de hoy
todo el mundo
habla de Arduino y todo el mundo hace cosas con él. El problema es que muy poca gente
cuenta cómo empezar. Y los que lo hacen no dan las explicaciones de porqué pasan las
cosas sino que te las cuentan para que las apliques como una receta .
Es más sencillo hacerlo así, total así aplicas la receta y te sientes el puto amo haciéndolo.
Lo que no sabes es que no conoces cómo hacer tus propios proyectos. Solo sabes
copiarlos.
Yo quiero que aprendas de cero y por eso he creado esta guía. Para que te compres
una placa por 2€ en China y puedas conocer de qué va esto y qué es cada cosa .
¿Que vas a poder encontrar en esta guía? Vas a encontrar lo básico para conocer cómo
funciona realmente Arduino. Es la primera clase, donde se cuentan las cosas básicas. Te
voy a explicar:
● Cómo funciona el hardware de Arduino
● Cómo se programa en Arduino
Si ya llevas un tiempo en Arduino te aburrirá asi que siempre puedes dejar de leer e irte a
conectar algunos cables. Si es la primera vez tal vez te interese este post
donde explico qué
es Arduino y porqué su éxito :)
¡Empezamos!
Rufián en la Red 3
El Hardware: Arduino por fuera
Lo primero que se enseña en una clase es a programar y luego las pequeñas cosas que
tiene un microcontrolador. Para ser un buen rufián hay que hacerlo al revés. Conocer qué
tienes y luego aprender a programarlo…¡Vamos a ello!
Supongo que has visto alguna vez la dichosa plaquita verdeazulada. Y supongo que la
recordarás llena de agujeros y componentes. Eso es la parte electrónica, la hardware y es
de la que te voy a hablar.
Imagen
de
Nick Hubbard
Lo primero es el componente ese alargado y grande qué hay en medio de cada placa. Eso
es el
microprocesador . La parte pensante. A día de hoy en Arduino encontramos el
ATmega328P y el ATmega32U4. Nada, la diferencia reside en algunos detalles que ahora
no te interesan. Pero que sepas que es la parte esencial de la placa.
Por otra parte encontramos la alimentación . Las formas de entrarle corriente a Arduino. En
este caso el Arduino UNO es el rarito de la familia. Tiene dos formas:
● Mediante el conector jack
● Mediante USB
El conector jack es igual que la clabija que utilizas para cargar tu portátil.. Hay que tener en
cuenta que ponga que el voltaje está entre 7 y 12V y ya está. De este modo puedes
conectarlo a la luz o ponerle unas pilas. Con menos o con más voltaje a éste tendrás
problemas. Esta es una forma de enchufar la placa que sólo se encuentra en los Arduino
Rufián en la Red 4
UNO, el resto de Arduinos funcionan por USB. Se conecta el cable desde el PC a la placa.
En el caso de Arduino UNO el cable es especial, pero por lo general suele ser el que se
utiliza para cargar smartphones Android.
El
botón de Reset no es más que eso, un botón de reinicio. A veces, programando, verás
que la placa tiene que hacer ciertas cosas pero llega un momento en el que no puede
avanzar por algún fallo en el código o alguna situación que no habías contemplado. No pasa
‘palante’.
nada, botón de reinicio y
Hay algunos leds, condensadores y el ISCP pero eso lo dejamos para otra ocasión. Ahora
vamos a lo que interesa: los pines .
Los pines analógicos y digitales
Los pines son esos agujeros que ves dónde la gente conecta cables. En el Arduino Nano,
Micro y Mini en lugar de agujeros son varitas que salen. La funcionalidad es la misma pero
en lugar de ser hembras son machos. ¡Que nos la pela vaya!
Los pines se dividen en tres secciones: Analógicos, digitales y de alimentación (Power,
¿Vendrán de ahí los power rangers?).
Los analógicos son 6 y van marcado con la A de analógico y van del 0 al 5. Ahora te
voy a contar eso que mola contar al que sabe poco, con esto te quedas con la peñita
seguro. Las señales analógicas son aquellas que son como la vida misma, todo aquello que
medimos como: la temperatura, la presión, la fuerza…
Cuando una señal es analógica se puede medir de manera continua. Tiene valores con
coma. ¿Qué cómo se mide? Por el voltaje y la corriente.
Momento ingeniero (Puedes saltártelo)
La corriente o intensidad es algo que te sonará de las clases de tecnología. Es un
componente de la electricidad que es el flujo de cargas positivas. Lo único que tienes que
recordar es que la corriente quema cosas. Así que cuidado con ella.
La corriente, está relacionada con el voltaje según la ley de Ohm. De esta manera
V = R.I
Siendo V el voltaje e I la intensidad o corriente. De esta manera cuando el voltaje sube, la
intensidad baja y viceversa. Esto se ve porque la fórmula sería la misma que:
R = VI
Rufián en la Red 5
De esta manera, si R fuese constante, si sube V, I baja y viceversa. Por eso que una
bajada de tensión hace aumentar la intensidad y puede quemar alguna cosilla en casa.
Así, dependiendo del voltaje que llega al pin de Arduino éste toma un valor. Y viceversa.
Este tipo de pines viene muy bien para saber un dato (como la temperatura) o para
generar algo variable (como una luz con distinta intensidad).
Frente a estos encontramos los pines digitales. Estos solamente miden o 5 Voltios o 0
Voltios o cómo conocerás por las pelis: binario, o 1 o 0. O es blanco o es negro y no hay
otra cosa. Es el mismo mecanismo utilizado al encender o apagar una televisión.
Aquí en las señales que enviamos 0 Voltios es nuestro OFF y 5 Voltios nuestro ON. Así
podemos mandar señales para encender o apagar componentes. O recibir señales que nos
digan si algo está encendido o apagado, si algo ha detectado un objeto o no…. Los dos
estados que se pueden encontrar en estos pines se llaman LOW y HIGH (BAJO y ALTO) y
coinciden (cómo no) con 0 y 5 Voltios.
En los pines digitales tenemos los números de cada pin y luego hay más cosas escritas. La
cosa es marear. En el 0 puedes ver que hay un RX y en el 1 un TX. Esto significa que,
además de ser pines digitales, son los pines de transmisión . Arduino se comunica con el
ordenador mostrando mensajes (cómo verás más adelane). Esto se hace normalmente por
el puerto USB pero estos pines correctamente conectados pueden sustituir al cable USB.
Por otra parte, también en los pines 3, 5 y 6 hay como una onda. Esto es porque son
salidas PWM . El PWM viene del Pulse Width Modulation. Son señales cuadradas. Esto
significa que van de 0 a 5 Voltios y viceversa. No se escapan de ahí. La particularidad es
que podemos modificar el tiempo ue pasan arriba y el tiempo que pasan abajo. Pero nunca
el alto que siempre será de 0 a 5 Voltios. Si quieres saber más sobre el PWM te dejo este
link
;)
Ahora fíjate,
después del pin 13 tienes uno llamado GND y otro AREF . A GND se le
llama tierra y es la referencia a 0 Voltios. Todos los GND deben de ir unidos para que todos
tengan el mismo nivel que, siento decepcionarte, no será exactamente 0V. Variará. En
cuanto a AREF es una referencia de voltaje. Esto es el tope al que se considera un ALTO.
En lugar de 5 Voltios podríamos querer que fuesen 3.3 Voltios así que conectaríamos esa
tensión a este pin. Por ahora no es importante así que no te comas mucho el tarro con ello.
Los pines de alimentación
Por fin llegamos a la última parte: la de alimentación. Sé que ya me odias pero tranquilo,
esta parte es muy sencilla. Voy de abajo a arriba. Lo primero que encuentras es Vin. Esta
es la tercera forma de alimentación. Hasta ahora tan sólo te he enseñado pines que podían
ser de entrada o salida (Entrada significa que recibe voltaje y salida es que lo expulsa), éste
Rufián en la Red 6
tan sólo es de entrada. Si metes suficiente corriente por aquí no necesitamos el USB ni el
conector jack.
Luego aparece GND que es tierra como ya te expliqué antes y luego 5V y 3.3V. Esto son de
salida y ofrecen 5 Voltios y 3.3 Voltios. Los utilizaremos para dar alimentación a los circuitos
que hagamos (Sí, hay cosas que se conectan a la placa y necesitan corriente).
El último pin es el de RESET. Este pin también es de entrada y al recibir una señal de 0
Voltios, Arduino se resetea. Funciona similar al botón que veíamos al principio. Con esto ya
has visto Arduino por fuera...ahora vamos a verlo por dentro.
El Software: Arduino por dentro
Ahora ya conoces como va el invento. ¡Vamos a jugar con él!
Lo primero es descargarse el IDE (nombre raro para llamar al programa que utilizarás para
programar con Arduino) en la página oficial
. En Windows la instalación es de siguiente
siguiente siguiente. Para Linux tan tan sólo hay que ejecutar el programa (./arduino desde
terminal).
Después de eso lo primero que te encontrarás es frente a esto:
Rufián en la Red 7
Lo primero que debemos conocer es qué son las funciones. Son líneas de texto que se
encargan de realizar algo cuando se las llama. Puedo tener una función que encienda leds,
o una que se encargue de configurar alguna cosa… Las funciones se caracterizan por:
● Aparece el tipo de resultado que da la función (tranquilo, que de eso hablamos
luego).
● Aparece el nombre de la función
● Aparecen entre paréntesis lo que se le pasa a esta función para trabajar. Los datos
que necesitará manejar. A esto los programadores le llaman parámetros.
Aquí hay dos funciones (eso que lleva delante la palabra void): la setup y la loop. Void
significa que la función no da nada como resultado y como ves entre paréntesis no tiene
nada asi que no necesita datos de entrada.
Esto es porque en setup
añadiremos aquellas cosas (funciones, datos,...) que
solamente se utilizan al inicio y en loop aquello que se hará continuamente .
Loop
significa bucle por lo que te puedes hacer una idea qué hace: repetir las cosas hasta la
saciedad.
Por ejemplo, configurar el bluetooth sólo se hace al principio, pero enviar la información lo
normal es que se haga continuamente. ¿Me pillas? Bien, ahora vamos a empezar a meter
cosas en estas dos funciones principales.
Variables
Todos los datos que se manejan se tienen que declarar. Vamos, darles nombre y decirle a
Arduino que existen y que nosotros los llamamos así. Vamos a definir 3 variables:
int
sillas;
int
madera
=
5;
int
metal
=
8;
Hemos declarado tres variables. Tan solo hay dos cosas que debes fijarte. La primera es
que delante llevan un prefijo, en este caso int
, qué determina el tipo de dato. La segunda
cosa es que las dos últimas variables tienen un valor. Ese nombre será igual a ese valor
cuando hagamos operaciones.
En cuanto al tipo de dato tenemos estos:
● void: Quiere decir que no devuelve nada (ya te lo he dicho pero soy cansino). Se
suele poner delante de las funciones (como loop) cuando se sabe que no devuelven
nada. No existen variables a las que pongamos delante void, solamente funciones ;)
● boolean: Este tipo de dato es true false
o . Se utiliza para valores que ya sabes que
son verdaderos o falsos. Aquí un ejemplo.
● char: char viene de character. Se utiliza para guardar una sola letra. Al final como es
un byte con signo acepta valores desde 128 a 127.
Rufián en la Red 8
● unsigned char: Es lo mismo, una letra pero al no tener signo se utiliza más para
representar un byte, es por eso que se suele utilizar la palabra byte en lugar de
unsigned char.
● byte: Son 2 elevado a 8 posibilidades ya que vienen definidos por unos y ceros en 8
posiciones. No te agobies que no creo que lo necesites ya mismo.
● int:
Este es el más común, el entero. Se utiliza para valores entre 32.768 y 32.767
por lo que es el que debes utilizar normalmente.
● unsigned int: Es lo mismo que el int pero solamente positivo por lo que el rango de
16 bits se produce en la parte positiva teniendo como resultado el rango 0 a 65535.
En Arduino, les gusta más utilizar la palabra word en lugar de unsigned int. Yo soy
más clásico y me gusta más esta forma.
● long: el long es un poquito más altito, son 4 bytes y claro ocupa más posiciones.
Exactamente va de 2.147.483.648 a 2.147.483.647.
● unsigned long: ¿A que ya te imaginas cómo va este? De 0 a 4.294.967.295. Se
suele utilizar en la función millis.
Aquí un ejemplo de dicha función dónde sí que es
realmente útil.
● short: Va de 32.768 a 32.767 pero la verdad, no lo he utilizado en la vida.
● float:
El float es típico en C y se utiliza por su tamaño y porque permite el uso de
números decimales (los de la comita). Hay muchos microcontroladores que no
permiten este tipo de operaciones con números decimales y se suelen trampear
algunas cosas para que se hagan correctamente. De hecho, Arduino no lo hace de
manera natural, sino que ya le han implementado un truquillo para que funcione con
normalidad y no te enteres..que mangantes.
● String: Es utilizado para cadenas de caracteres o char. Aunque esto no es lo
habitual. Lo habitual es crear un array o cadena de caracteres así:
char frase [
18]
dónde le digo que quiero 18 huecos para poner char. En realidad son 17 porque hay
uno que se reserva para el final de línea (que se escribe /n
).
● array: Se declaran poniendo un par de corchetes detrás del nombre tal y como
acabamos de ver. No son un tipo como tal sino que transforman los tipos en
cadenas de ese tipo.
Respecto a las variables solo te queda saber que representan al valor que les das y pueden
hacerse operaciones con ellas. Vamos es posible hacer:
int
sillas=madera+metal;
Lo que daría como resultado 13 ya que madera valía 5 y metal 8.
Rufián en la Red 9
Funciones
Vamos con lo que más vas a utilizar. Las funciones ya te he comentado antes que eran.
Ahora hay que ver cuáles vas a utilizar. hay muchas pero bueno vamos a ver las más
comunes.
Las que tienen que ver con la comunicación serie son:
Serial.
begin
(
9600)
Ésta se pone en el setup y lo que hace es preparar la comunicación serie para comunicarse
a 9600 bps (bits por segundo). De esta manera cuando vayas al monitor serie del IDE y lo
pongas en 9600 verás lo que te dice Arduino.
Serial.
print
("
Hola")
Esta es la función que hace que Arduino diga cosas. Si es un texto fijo se pone entre
comillas y si es una variable sin ellas. Vamos sería en plan:
Serial
.
println(
metal);
Serial.
println
("Hola")
Esto es lo mismo pero añade un salto de línea. Vamos lo que hacíamos con la máquina de
escribir cuando movíamos el rodillo ese. Esto hace que pasemos de línea. Es bastante útil y
es la más utilizada ya que así evitamos largas frases.
Las referentes a pines analógicos :
AnalogRead(
A0
)
Se utiliza para leer el valor del pin analógico 0. Podríamos poner simplemente 0, de hecho
es más rápido,¿no?
Las referentes a pines digitales :
pinMode(
13
,
INPUT)
Se utiliza para definir los pines digitales como entrada (INPUT) o salida (OUTPUT). El
primer número es el pin y se sabe que son digitales porque esta función no tiene sentido en
los pines analógicos ya que los analógicos SIEMPRE son de entrada.
digitalRead
(
4)
Lee el valor del pin digital 4, sin más.
digitalWrite
(
5
,
HIGH
)
Escribe en el pin 5 un HIGH (5 Voltios). La otra posibilidad sería poner 0 Voltios con un
LOW.
analogWrite(
13
,200)
Aquí se escriben valores analógicos en los pines digitales. Esto solamente se puede hacer
en los pines PWM cómo ya te conté aquí . El valor 200 es un valor que va de 0 a 255 y que
marca el voltaje que saldrá del pin 13 (¡siempre de 0 a 5 Voltios!). Esto quiere decir que me
faltará una quinta parte (más o menos) del voltaje para llegar a 5 Voltios.
Rufián en la Red 10
Esperas
Cuando hace falta esperar utilizamos la función:
delay
(
500)
Dónde delay significa esperar y 500 son los milisegundos qué debe de esperar Arduino
antes de continuar con el resto del programa.
¡Cuidado que el delay encierra algún que otro
secreto!
Estructuras de control
Y llegamos a la parte más esencial. Si conoces algo de C esto lo tienes superado
sino…¡allá voy!
Las estructuras de control vienen dadas por funciones cómo:
if
if if...else if...else
o su variante son condicionales. Los condicionales son los mismos que en
la vida real. Si pasa esto...pues sucederá esto. Si pasa lo otro pues lo otro y si nada de todo
pues pasará otra cosa. If
significa si en nuestro lenguaje paladín, else if
se utiliza para poner
otra condición si no se han cumplido las anteriores y else
es el sinó. Si no pasa nada de lo
anterior que suceda esto. Un ejemplo sería:
If
(
metal
==
1
){
metal
=
metal
+
1
;
}
else
if
(
metal
==
9){
metal
=
0;
}
else{
metal
=
‐
1;
}
Te habrás fijado en que a veces uso el doble igual, no es párkinson, simplemente es que en
los condicionales, para decir que algo debe de ser igual a algo se utiliza el doble igual. Un
único igual se utiliza para definir variables, cómo ya te he dicho antes. Un doble igual para
comparar ;)
for
¿Recuerdas la estructura loop? Es un bucle que se repite durante todo el programa. El for
es otro bucle el cuál se repite un número de veces. De hecho es bastante peculiar. Su
estructura es.
for
(
int
i
=
0
;
i
<
9
;
i
++){
//Cosas a hacer
}
Rufián en la Red 11
Lo que hace es crear una variable llamada i
que vale 0. De 0 a 9 repetirá lo que se le diga y
cuando llegue a 9 parará. Ahí es cuando es importante el símbolo antes del 9.
Al poner < (menor) implica que la novena vez ya no se repetirá ya que i
ya no será menor
estrictamente que 9. Si pusiese <= (menor igual) si que se repetiría una novena vez. Ojo
con el i++
también, ya que lo que hace es que al acabar cada vez suma uno a la i
y es por
eso que el programa puede avanzar. También podría darse la situación contraria: i
, que
restaría cada vez una unidad a la ya famosa i
.
switch
No te ha pasado alguna vez en la Play que te dice, si quieres avanzar pulsa X si quieres
retroceder pulsa círculo. Pues esto es lo mismo. Se define como:
switch
(
opcion
){
case
1
:
//Haz algo
break;
case
2:
//Haz algo
break;
default:
//Haz algo
break;
}
opcion
En este caso si vale uno se hace una cosa, si vale dos otra...y sino, por defecto se
hace otra. El por defecto es opcional, pero no me dirás que no es útil eh!
while
Es el bucle más popular y que lo traduciríamos como mientras. Mientras pasa esto tú dale
caña a esto.
while
(
opcion
>
1
){
Serial
.
println
("
Rufi
á
n mam
ó
n
");
}
Mientras la variable opcion es mayor a 1 escribe eso por la comunicación serie. Arduino
while(1)
utiliza loop, pero otros microcontroladores se lo ahorran y utilizan que haría lo
mismo: un bucle eterno.
do while
Este es un bucle en el que la condición va después de la acción. Es en plan: haz algo y si
pasa esto lo repites:
do{
//Hacer lo que quieras
}
while
(
opcion
<
4
);
opcion
El bucle se hará una vez y a partir de ahí, tantas veces cómo sea menor que 4.
Fíjate que al final del while hay que poner un punto y coma. Cosa que debes hacer después
de cada línea sino cuando intentes compilar (dándole a la flecha del IDE de Arduino) te dará
error.
Rufián en la Red 12
En definitiva...
Llegado a este punto creo que ya conoces la parte física y lo más básico en cuanto a
programación. Es lo básico básico. Qué hace cada cosa. A partir de ahora empieza un
camino arduo pero gratificante ya que lo bueno de esto es que es palpable. No es como un
negocio que esperas a que crezca, o un niño que esperas que madure. Esto es encenderlo
y ya funciona.
Para poder continuar tienes dos opciones:
La primera, descargarte el IDE de Arduino e intentar probar los Ejemplos que
incluye. Te aseguro que ahora ya no te sonará a oriental ese cúmulo de líneas.
La segunda es buscar en toda la blogosfera cursos o experimentos con Arduino
(puedes mirar aquí
). A día de hoy hay gente que aprende con una formación por
partes y otra con ejemplos directamente o cosas que le apetece hacer y las
investiga.
Da un poco igual cómo lo hagas, lo importante es empezar y seguir. No creo que te aburras
porque en Arduino el límite está en tu imaginación y en la paga que te dan tus padres a final
de semana. Hay inventos, lecciones e información a porrillo y no te la vas a acabar toda.
Y cuando tengas un poco de soltura embárcate en algún proyecto con amigos o en alguna
asociación maker . Las sinergias siempre molan, viene bien aprender de otros y que otros
aprendan de ti. Sufres menos, te duele menos la cabeza y eres más feliz.
Espero que esto te haya servido, que si tienes alguna duda me la hagas llegar
y que esto no
sea un adiós, sino un hasta luego. ¡Cuidate rufián!
Rufián en la Red 13