Índice - domeetic.files.wordpress.com · bajada de tensión hace aumentar la intensidad y puede...

13

Transcript of Índice - domeetic.files.wordpress.com · bajada de tensión hace aumentar la intensidad y puede...

Índice

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 de Rufián en la Red se encuentra bajo la Licencia 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 verde­azulada. 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 nada, botón de reinicio y ‘palante’. 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

.IV = R

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 = IV

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 o false. 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 o su variante if...else if...else 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;

En este caso si opcion 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 utiliza loop, pero otros microcontroladores se lo ahorran y utilizan while(1) 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);

El bucle se hará una vez y a partir de ahí, tantas veces cómo opcion 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