T17-4 Programación de calculadores.

1. Arduino.

Arduino es una placa o tarjeta controladora, con una serie de entradas y salidas, y que se programa a través del ordenador mediante un lenguaje de programación. Veamos qué elementos componen una Arduino UNO:

Alimentación: Arduino puede estar alimentado por dos vías:
– Conexión USB (que proporciona 5 V).
– Jack de alimentación (que normalmente será una pila de 9 V o fuente de alimentación, que se recomienda que esté entre 7 – 12 V).

Los pines de alimentación son para alimentar los circuitos la placa de prototipos o breadboard o protoboard:
– 3.3 V proporciona una tensión de 3,3 V, y una intensidad máxima de 50 mA.
– 5 V proporciona una tensión de 5 V, y una intensidad máxima de 300 mA.
– GND es la toma de tierra, o nivel 0 V de referencia.
– Vin proporciona la tensión máxima con la que está alimentado Arduino.

Valores de entrada y de salida: en función de cómo esté siendo utilizado en el pin, tendremos:
– Salida y entrada digital: los valores de salida pueden ser o 0 V (LOW) o 5 V (HIGH), y se interpretará una entrada de entre 0 y 2 V como LOW y de entre 3 y 5 V como HIGH.
– Salida analógica: los valores de salida van desde 0 V a 5 V en un rango de 0 a 255 (precisión de 8 bits) valores intermedios.
– Entrada analógica: los valores de entrada van desde 0 V a 5 V en un rango de 0 a 1023 (precisión de 10 bits) valores intermedios.
– La intensidad máxima de todos estos pines es de 40 mA.

Normalmente, todo el circuito electrónico que Arduino controlará se monta sobre una placa de prototipos o breadboard, y el conexionado se realiza con cables tipo jumper (es importante utilizar este tipo de cables porque no suelen romperse en los zócalos):

1.1. PROGRAMANDO ARDUINO.

Todo programa para Arduino presenta una estructura básica:
1ª parte int x=0; Declarar las variables.
2ª parte void setup() {…} Configuración de Arduino.
3ª parte void loop() {…} Comandos que regirán el comportamiento de Arduino.

1.1.1ª parte: Declarar las variables int x=0;

Una variable es un valor que Arduino puede almacenar en su memoria, y que posteriormente podrá ser utilizado o modificado.

Los tipos de variables más utilizados son:

– int: almacena un número entero entre -32769 y 32767 (2 bytes).
– long: almacena un número entero muy largo, entre -2147483648 y 2147483647 (4 bytes).
– float: almacena un número decimal con un rango entre 3.4028235·1038 y 3.4028235·1038 (4 bytes).
– const: especifica que la variable definida no podrá ser cambiada  durante el programa, siendo siempre un valor constante: const float pi=3.1415;

Es importante saber que es posible declarar una variable sin asignarle un valor inicial, y hacerlo posteriormente durante el transcurso del programa:
int x;

x=4;

Dominio de una variable: si declaro una variable al comienzo del programa, podré emplear dicha variable en cualquier momento (dentro de cualquier función o bloque de programa), pero si declaro una variable dentro de una función, sólo se podrá utilizar en dicha función.

Poner nombre a las variables: Por último, una última consideración: a la hora de poner un nombre a una variable es recomendable utilizar alguna palabra que nos ayude a reconocer qué se está almacenando en ella, y en caso de utilizar dos o más palabras se suele emplear la notación de joroba de camello (poner en mayúscula la primera letra de las siguientes palabras). 

Ejemplos son:
ledPin estadoAnterior cuentaPulsaciones
miVariable lecturaSensor ledPinAzul

2ª parte: Configuración de Arduino void setup() {…}
En este bloque habrá que especificar:
Qué pines van a ser empleados como entrada y cuáles como salida.

pinMode(2,OUTPUT); //utilizaré el pin 2 como salida Digital.
pinMode(3,OUTPUT); //utilizaré el pin 3 como salida Digital o Analógica.
pinMode(8,INPUT); //utilizaré el pin 10 como entrada Digital.

Las entradas analógicas no hacen falta incluirlas en el setup, puesto que esos pines (A0, A1, A2, A3, A4, A5) solo pueden ser entradas analógicas.

Si vamos a querer establecer una conexión con el ordenador.
Serial.begin(9600); /*hay que especificar los baudios (bits por segundo) a la que va a realizarse dicha
comunicación Arduino-PC */


3ª parte: Comandos que regirán el comportamiento de Arduino
void loop () {…}
En este bloque se deberá escribir todas aquellas instrucciones, órdenes, primitivas, comandos o funciones necesarias para que Arduino funcione según nuestro deseo.
Realmente, este bloque constituye un bucle infinito, ya que Arduino, mientras esté alimentada con energía, funcionará haciendo el programa loop una y otra vez.

Iremos viendo cuáles son estas funciones durante el desarrollo de estos apuntes.

3. SALIDAS DIGITALES digitalWrite(4,HIGH);
Podemos indicar a Arduino que en un pin determinado coloque un “0” o un “1” lógico (que serán 0 V o 5 V) mediante los siguientes comandos, respectivamente:
digitalWrite(12,LOW);

digitalWrite(12,HIGH);

4. SALIDAS ANALÓGICAS analogWrite(5,128);
Podemos indicar a Arduino que en un pin determinado coloque un valor de tensión comprendido entre 0 V y 5 V, pudiendo seleccionar entre 256 valores intermedios posibles (de 0 a 255), empleando la siguiente orden:
analogWrite(11,214); /* coloca en el pin 11 un valor de salida de 214, que equivale a unos 4,2 V

 */Realmente, la señal analógica de salida no es analógica en sí, sino un PWM. Esto significa que la salida es una señal modulada por pulsos, formada por una serie de pulsos (de valor 5 V) repartidos durante un tiempo determinado de tal forma que el valor promedio de la señal de salida se hace coincidir con el de la señal analógica que se persigue imitar. Es importante tener esto presente para comprender el
funcionamiento de Arduino y, por ejemplo, de los transistores conectados a ella.

5. ENTRADAS DIGITALES digitalRead(5);
Debemos indicar a Arduino qué pin vamos a emplear como entrada digital. Dicha señal de entrada podrá tener dos valores: LOW o HIGH.
x = digitalRead(3); //asigna a x el valor lógico que Arduino lee en el pin 3
Cualquier sensor que tenga dos posibles valores distintos puede emplearse como entrada digital.

Podemos hacer una entrada digital con un pulsador o interruptor a través de una resistencia de drenaje (pull down), normalmente de 10K. Debemos tener en cuenta que Arduino va a percibir todo el transitorio (sobreoscilación o bouncing) cada vez que el pulsador sea accionado, en el cambio de 0 a 5V. Eso significa que durante un muy breve periodo de tiempo, el valor en la entrada puede oscilar.

6. ENTRADAS ANALÓGICAS analogRead(A0);
Recordemos que las entradas analógicas en Arduino no hay que configurarlas en el setup. Dicha señal analógica de entrada podrá tener valores comprendidos entre 0 y 1023, correspondientes a los valores intermedios de un rango de 0 a 5 V.
x = analogRead(A3); //asigna a x el valor analógico que Arduino lee en el pin A3

Como los únicos pines válidos para una entrada analógica son los A0…A5, no hay posibilidad de confusión, y puede omitirse la A: x = analogRead(3);

Evidentemente, para emplear una entrada analógica necesitamos un sensor analógico, es decir, que sus valores eléctricos varíen en un rango significativo, no limitándose a dos posibles valores. Sensores analógicos pueden ser: LDR (fotorresistencia), NTC (termoresistencia), potenciómetro, sensor de sonido (piezoresistencia), sensor de ultrasonido, etc…

7.COMUNICACIÓN ARDUINO-PC Serial.begin(9600);
En muchas ocasiones es muy útil poder visualizar a través del ordenador los valores de lectura en los pines de entrada y de salida de Arduino. Asimismo, también puede ser necesario mandar información a Arduino desde el teclado del PC. 

Veamos cómo poner en contacto ambos aparatos:

Antes de nada, debemos configurar en el void setup() que vamos a establecer dicha comunicación, utilizando la orden 

Serial.begin( )
void setup( ) {
Serial.begin(9600); //se especifica los baudios, normalmente 9600
} //recordemos que 1 baudio = 1 bit/segundo

Luego, dentro del void loop() podemos utilizar las siguientes funciones:

Serial.print(val); //imprime el valor de la variable val
Serial.println(val); //imprime el valor de val e inserta una línea nueva
Serial.print(“hola, amigos”); //imprime el texto hola, amigos
Serial.print(‘\t’); //imprime una tabulación
Serial.print(val,BASE);

 /*imprime el valor de la variable val pero pasando la variable en la base que le especifiquemos: DEC, HEX, OCT, BIN, BYTE, que corresponden a: Decimal, Hexadecimal, Base 8, Binario, y caracter del código ASCII respectivamente */

x = Serial.available();

/*asigna a x el número de bytes disponibles en el puerto serie que aún no han sido leídos. Después de haberlos leídos todos, la función Serial.available() devuelve un valor 0 hasta que lleguen nuevos datos al puerto serie */

y = Serial.read(); 

/*asigna a y el valor disponible en el puerto serie, que lo introducimos desde el teclado del ordenador
en la zona de textos del Serial Monitor */

Serial.flush(); 

/*porque los datos pueden llegar al puerto serie a más velocidad que la del proceso del programa,
Arduino puede guardar todos los datos de entrada en un buffer. Si es necesario limpiar el buffer para
llenarlo de datos nuevos, debemos usar la función flush(); */

Cuando Arduino establece comunicación con el PC necesita utilizar los pines 0 y 1 (RX y TX), por lo tanto no debemos utilizarlos como entradas o salidas para nuestro circuito.

Para poder visualizar en pantalla los datos que Arduino va imprimiendo, debemos abrir la ventana de impresión en el siguiente botón (Serial Monitor):

8. MOTORES DE CORRIENTE CONTINUA (DC motor)
Un motor de corriente continua es un actuador que consume una intensidad relativamente elevada. La
intensidad de corriente máxima que Arduino puede suministrar por un pin de salida es de 40 mA. Así
pues, para poder gobernar a un DC motor, así como a cualquier otro actuador de considerable potencia,
podemos utilizar:
· un transistor.
· un relé.
· un integrado L293D (consiste en un puente H de diodos, específico para el control de motores de corriente continua, inclusive el cambio de giro).

9. REPRODUCIR SONIDO tone(3,2500);

Otro dispositivo de salida muy utilizado puede ser un timbre piezoeléctrico, un zumbador o un altavoz. Estos dispositivos se pueden usar en salidas digitales (Ruido o NoRuido), pero presentan su máxima aplicabilidad en salidas analógicas, pues podremos reproducir distintas notas musicales.

Los dispositivos de salida más empleados son:

Altavoces
Transductores Piezos
Para ello utilizaremos la función tone(pin,frecuencia);
tone(6,1350); //el altavoz conectado al pin 6 emitirá un sonido de 1350Hz. Tras un tone se suele poner un delay() que permita escuchar esa frecuencia haciendo una pausa en el programa*/

Para que deje de sonar un tone debo utilizar noTone(pin);
noTone(6); //el altavoz conectado al pin 6 dejará de sonar 

Otra posibilidad es la de especificar la duración del tono:
tone(pin,frecuencia,duración);
tone(9,4500,200); /*el altavoz conectado al pin 9 emitirá un sonido de 4500 Hz durante un tiempo de 200 milisegundos y luego se para */

¡Ojo! Cuidado con esta opción porque sí es verdad que el sonido durará 200 ms pero el programa no se detiene para escucharlo, sino que sigue corriendo, y si antes de que pasen 200 ms el código vuelve a toparse con un tone, este último sonido pisará al anterior.
Las frecuencias audibles por el oído humano van de los 20 Hz a los 20 KHz.

11. OPERADORES MATEMÁTICOS
Los operadores aritméticos que se utilizan en Arduino son:
asignación =
suma +
resta –
multiplicación *
división /
resto o módulo % //no funciona con datos en coma flotante
Veamos los siguientes supuestos:
float x;
int y;
int z;
x = 7/2; //x tomará el valor de 3.5 puesto que está declarado como float
y = 7/2; //y tomará el valor de 3 puesto que no puede tener decimales
z = 7%2; //z tomará el valor 1 puesto que es el resto de dividir 7 / 2

12. SERVOMOTORES #include 

Un servomotor es un motor que se caracteriza por su precisión, pues puede situarse en cualquier posición dentro de un rango de giro, normalmente de 0º a 180º. Así pues no son motores pensados para hacer mover un vehículo que recorra cierta distancia, sino para movimientos de precisión como pudiera
ser el de un brazo robot, cuyo margen de maniobra no exceda dicho rango de giro.

Son tres los cables de que dispone el servomotor, y debemos conectarlos de manera correcta:

Cable rojo: se conectará a la tensión de 5 V.
Cable negro: se conectará a tierra (0 V).
Cable blanco o naranja: se conectará al pin de control (del 0 al 13).

Este dispositivo se controla habitualmente a través del envío pulsos de anchura (en el tiempo) determinada. Así, para nuestro servomotor tenemos que:

Duración del pulso Posición del eje
Rango de duración del pulso de control:
900 μs – 2100 μs
Posición=3 · duración−2700
20
900 μs 0º
1200 μs 45º
1500 μs 90º
1800 μs 135º
2100 μs 180º

Las duraciones del pulso pueden cambiar en función del modelo del servomotor.

Aunque no es muy complicado sí hay que ser cuidadoso, y es relativamente fácil dañar al servomotor.
Para el control de los servomotores Arduino posee una librería específica. Una librería es una colección de funciones que están especialmente creadas para facilitar el manejo de ciertos dispositivos, y que no son cargadas por defecto a Arduino para ahorrar espacio en su memoria. Algunas de las librerías más utilizadas son las de control uso de: servomotores, motores paso a paso, pantallas de cristal líquido, matriz de LEDs, memorias SD, sensor de ultrasonido…

Veamos cómo controlar nuestro servomotor con Arduino:
En primer lugar debemos abrir la librería Servo.h, a través de:
Sketch / Import Library / Servo

Luego debemos declarar, como si de una variable fuera, nuestro servomotor, asignándole un nombre. Y lo hacemos con el siguiente comando:

Servo nombreServo;
Dentro del void setup() debemos configurar el pin de salida que Arduino va a utilizar para controlar el servomotor. Para ello se utiliza la función attach(pin):
nombreServo.attach(10); // será controlado por el pin 10
Existe una variante en la que se especifica la duración mínima y máxima de los pulsos de control attach(pin,duraciónMín,duraciónMáx):
nombreServo.attach(10,900,2100);

Para controlar el servomotor, utilizaremos la función write(ángulo):
nombreServo.write(45);// sitúa el eje del servo en la posición de 45º
¡Ojo! Entre posición y posición debemos poner alguna pausa para dar tiempo al servomotor a moverse.
Nota: el funcionamiento de los servomotores “low cost” puede que no se ajuste exactamente a lo esperado.

3. Programación por bloques.

3.1.- ArduinoBlocks es la herramienta perfecta para niños, jóvenes y adultos que quieren empezar a usar Arduino desde el primer momento sin necesidad de escribir ni una sola línea de código.

1.2 PLATAFORMA ARDUINOBLOCKS
ArduinoBlocks es una plataforma web on-line donde podemos programar nuestra placa Arduino de forma visual sin necesidad de conocer el lenguaje C++ que utiliza Arduino IDE.

La programación en ArduinoBlocks se realiza con bloques al estilo AppInventor o Scratch. No tenemos que escribir líneas de código y no nos permitirá unir bloques incompatibles evitando así posibles errores de sintaxis.

La plataforma ArduinoBlocks genera, compila y sube el programa a la placa Arduino por medio de la conexión USB. Una vez subido el programa, la placa Arduino no necesitará de la conexión al PC para funcionar pudiendo alimentarla con baterías o una fuente de alimentación para que funcione de forma autónoma.

Registrándonos como usuarios de la plataforma ArduinoBlocks podemos aprovechar todas estas posibilidades:

 Guardar tus proyectos en la nube de ArduinoBlocks.
 Añadir información al proyecto: descripción, componentes utilizados, imágenes, etc.
 Añadir archivos adjuntos relacionados con el proyecto: esquemas, fotos, archivos para impresión 3D, aplicaciones, etc.
 Compartir proyectos con el resto del mundo.
 Importar proyectos compartidos por otros usuarios.
 Valorar y comentar proyectos
 Programar directamente Arduino desde el propio navegador (Con la aplicación: ArduinoBlocks-Connector)
 Utilizar la consola serie desde el propio navegador

3.2. mBlock = Scratch + Arduino

mBlock  es un entorno gráfico de programación basado en el editor Scratch 2.0 para que escuelas y centros de formación pueda introducir la robótica de forma sencilla y enseñar a programar robots basados en Arduino. 

La interfaz es muy amigable e intuitiva. Usa bloques previamente definidos para dar órdenes al robot y si sabes programar también podrás sacarle todo el partido con el entorno de Arduino.

– Permite programar tus robots de forma inalámbrica mediante tecnología bluetooth o 2.4G
– Te permite traducir los bloques de Scratch a código fuente de Arduino
– Puedes probar en tiempo real el programa que relices en Scratch sin necesidad de grabarlo en la placa
– Y una vez probados puedes grabarlo de forma permanente en tu robot 

Puedes usarlo con tus placas de Arduino o también con los robots educativos de Makeblock:
– Para los que se inician: Robot Educativo mBot
– Para los que quieren un kit básico de Makeblock: Starter Kit
– Para los que necesitan un robot más avanzado con muchos sensores mBot Ranger 
– Y para los más experimentados en robótica: Ultimate Kit 

3.3. S4A

S4A es una modificación de Scratch que permite la programación simple de la plataforma de hardware de código abierto Arduino . Proporciona nuevos bloques para gestionar sensores y actuadores conectados a Arduino . También hay un panel de informes de sensores similar al de PicoBoard.

El objetivo principal del proyecto es atraer personas al mundo de la programación.El objetivo también es proporcionar una interfaz de alto nivel para los programadores de Arduino con funcionalidades tales como interactuar con un conjunto de tableros a través de eventos de usuario.

Los objetos Arduino ofrecen bloques para las funcionalidades básicas del microcontrolador, escrituras y lecturas analógicas y digitales, y también para las de mayor nivel. Puede encontrar bloques para administrar los servomotores de rotación estándar y continua:

En S4A, una placa Arduino está representada por un tipo especial de sprite. El sprite de Arduino encontrará automáticamente el puerto usb donde está conectada la placa.

Es posible conectarse a varias placas al mismo tiempo simplemente agregando un nuevo elemento de Arduino.

La interfaz

Detalles técnicos:

Tableros soportados

S4A funciona con Arduino Diecimila, Duemilanove y Uno. Otras placas no se han probado, pero también pueden funcionar.

Otras placas de desarrollo.

Raspberry Pi

Raspberry Pi es un computador de placa reducida, computador de placa única o computador de placa simple (SBC) de bajo costo desarrollado en Reino Unido por la Fundación Raspberry Pi, con el objetivo de estimular la enseñanza de ciencias de la computación en las escuelas.

Aunque no se indica expresamente si es hardware libre o con derechos de marca, en su web oficial explican que disponen de contratos de distribución y venta con dos empresas, pero al mismo tiempo cualquiera puede convertirse en revendedor o redistribuidor de las tarjetas RaspBerry Pi, por lo que da a entender que es un producto con propiedad registrada, manteniendo el control de la plataforma, pero permitiendo su uso libre tanto a nivel educativo como particular.

En cambio el software sí es open source, siendo su sistema operativo oficial una versión adaptada de Debian, denominada Raspbian, aunque permite usar otros sistemas operativos, incluido una versión de Windows 10. En todas sus versiones incluye un procesador Broadcom, una memoria RAM, una GPU, puertos USB, HDMI, Ethernet (El primer modelo no lo tenía), 40 pines GPIO y un conector para cámara. Ninguna de sus ediciones incluye memoria, siendo esta en su primera versión una tarjeta SD y en ediciones posteriores una tarjeta MicroSD

UDOO X86 - UDOO

RESUMEN

UDOO X86 es la nueva PC: la placa para PC x86 más poderosa de la historia y una plataforma compatible con Arduino 101, todas integradas en la misma placa.

En UDOO X86 puede ejecutar todo el software disponible para el mundo de PC, desde juegos hasta transmisión de video, desde editores gráficos hasta plataformas de desarrollo profesional , además de todo el software o el mundo Arduino, incluidos todos los bocetos, bibliotecas y el Arduino oficial.  101 IDE .

Nunca te preocupes por la falta de controladores o cosas por el estilo. Esta es una verdadera computadora de nueva generación.

Está basado en procesadores x86 Quad-Gene de nueva generación de 64 bits fabricados por Intel® , diseñados para el dominio de PC. Procesadores prodigiosos concentrados en 14 nm, con una cantidad de consumo de energía de 5 o 6 vatios.

Permite SOs como

— WINDOWS 10, 8.1, 7
– TODOS los LINUX DISTRO X86 64BIT
– ANDROID