Presentación

En este curso queremos dar una introducción a la robótica educativa. La robótica se sostiene sobre dos pilares básicos la electrónica y la progración. Nuestro objetivo es utilizar la robótica como hilo conductor para introducir de forma práctica al alumnado en conceptos STEAM (Ciencia, Tecnología, Ingeniería, Diseño, Matemáticas). De modo que se cree la necesidad de unos conocimientos más profundos en física, electrónica, computación, programación, mecánica, etc.

El desarrollo será progresivo. En cada capitulo se irán introduciendo los conceptos físicos necesarios, se presentarán los componentes electrónicos que se usarán y se irá añadiento nuevas instrucciones a las estructuras de programación haciendo que las actividades vayan aumentando progresivamente en complejidad.

La robótica utiliza un sistema de entrada, procesamiento y salida. Mediante el uso de sensores captan el entorno que les rodea, procesan esa información junto a la que tenían almacenada previamente y dan una respuesta mediante unos actuadores.

Como plataforma de procesamiento se ha optado por Arduino por la cantidad de información que se puede encontrar y la comunidad que lo respalda. Además utiliza un lenguaje de programación de alto nivel que es sencillo de entender.

¿Qué es Arduino?

arduino puertoserie

Arduino es una plataforma electrónica abierta para la creación de prototipos basada en software y hardware gratuitos. Fue creado para cualquier persona interesada en crear entornos u objetos interactivos.

Arduino puede tomar información del entorno a través de sus pines de entrada de una variedad de sensores y puede actuar controlando luces, motores y otros actuadores.

El microcontrolador de la placa Arduino se programa utilizando el lenguaje de programación Arduino y el entorno de desarrollo Arduino. El software se puede descargar de forma gratuita desde arduino.cc

También se puede programar utilizando entornos de programación gráfica; Visualino, S4A, Snap4Arduino, mBlock, etc.

Cuando decimos que Arduino es una plataforma abierta nos referimos a que podemos construirnos nuestro propio Arduino con componetes electrónicos básicos.

arduino protoboard

Arduino Uno

Descripción de Arduino UNO

Puede encontrar más información sobre esta placa en el sitio web arduino.cc.

Visión general

arduinouno descripciondepines

Partes

Microcontrolador:

Es el cerebro de la placa controladora Arduino. Realiza las funciones de procesamiento. Utiliza el microcontrolador ATmega328P.

arduino microcontrolador

Puerto USB

Comunica la placa Arduino al ordenador para cargar el programa en la memoria o enviar datos. También alimenta la placa controladora Arduino.

arduino usb

Alimentación

Para que la placa funcione sin el USB conectado al ordenador, necesitamos conectar una fuente de alimentación o batería con un voltaje entre 7 y 12V.

arduino alimentacion

Botón de reset (reinicio)

Se utiliza para reiniciar el sistema y volver a ejecutar un programa desde el principio.

arduino reset

Entradas y salidas digitales

Arduino Uno cuenta con 14 pines de entrada-salida digitales (Pines 0 → 13). Algunos de estos pines tienen además otras funcionalidades:

  • Pines de comunicación serie UART (0 y 1): pin 0 (Rx): recibiendo datos en serie y pin 1 (Tx): transmisión en serie de datos.

  • Pines de interrupciones (2 y 3): Permiten asociar una función al cambio de estado de uno de estos pines.

  • Pines PWM marcados con ~ (3, 5, 6, 9, 10, 11): se pueden utilizar como salidas de señal PWM (pseudo-analógicas) de 8 bit de resolución (256 valores)

  • Pines de comunicación SPI (10, 11, 12 y 13): SS, MOSI, MISO y SCL.

arduino ES digitales

Estos pines se suelen ir cogiendo de menor a mayor empezando por el pin 2 y dejando libres los pines 0 y 1. Normalmente si vamos a usar un led usaremos el pin 13. Cuando queremos usar componentes que pueden variar su brillo o su movimiento usaremos los pines PWM. Si necesitamos un solo componente usaremos el pin 3. Si queremos usar dos cogeremos los pines 5 y 6. Si queremos tres usaremos los pines 9, 10 y 11.

Entradas analógicas

Permiten conectar hasta 6 periféricos a las entradas analógicas de Arduino.

  • Pines A0 → A5: Entradas analógicas con una resolución de 10 bit (1024 valores).

    • Comunicación I2C: pin A4 (SDA) Señal de datos y pin A5 (SCL) Señal de reloj (clock).

arduino E analogicas

Estos pines se suelen ir cogiendo de menor a mayor empezando por el A0.

Entradas y salidas de energía

Le permiten alimentar componentes, sensores, etc.

  • 5V: salida a 5V.

  • 3,3 V: salida a 3,3V.

  • GND: tierra o 0V.

  • Vin: Entrada de energía entre 7 y 12V.

  • IOREF: Salida con la tensión a la que trabaja la placa.

arduino power

De estos pines siempre se suelen usar 5V y GND conectados a los raíles de alimentación de la protoboard.

LED

La placa Arduino Uno incorpora 4 LEDs:

arduino leds
  • Uno que indica que la placa está encendida (power),

  • otro conectado al pin 13 para verificar el funcionamiento de la placa (LED_BUILTIN),

  • y dos LEDs que indican que se están transmitiendo (TX) o recibiendo (RX) datos entre la placa Arduino y otro dispositivo.

Pinout de Arduino ONE

En esta imagen tienes información sobrelos pines de conexión.

pinout Arduino Uno

Otras caracteristicas de la placa Arduino son:

  • Microcontroller: ATmega328P

  • Operating Voltage 5V

  • Input Voltage (recommended) 7-12V

  • Input Voltage (limits) 6-20V

  • Digital I/O Pins 14 (of which 6 provide PWM output)

  • Analog Input Pins 6

  • DC Current per I/O Pin 40 mA

  • DC Current for 3.3V Pin 50 mA

  • Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader

  • SRAM 2 KB (ATmega328)

  • EEPROM 1 KB (ATmega328)

  • Clock Speed 16 MHz

Arduino Nano

Tiene la misma funcionalidad que un Arduino UNO pero con un tamaño bastante más pequeño.

Pinout de Arduino Nano

En esta imagen tienes información sobre los pines de conexión.

pinout Arduino Nano

Especificaciones técnicas de Arduino Nano

  • Mismo microcontrolador que Arduino Uno ATmega328.

  • Arduino Nano se puede conectar directamente sobre una protoboard gracias a la distribución de sus patillas.

  • Consumo de energía, 19 mA

  • Tamaño de la placa de circuito impreso,18 x 45 mm

  • Peso, 7 g

Arduino Nano en una protoboard

Arduino Leonardo

Físicamente, las dos tarjetas pueden parecer muy semejantes. Tiene las mismas dimensiones y la misma cantidad de pines, dispuestos de la misma forma. Las características de alimentación también son las mismas: voltaje de entrada recomendado de 7 a 12 V, como límite inferior 6 V y como superior 20 V. El voltaje de operación es de 5 V. La frecuencia del resonador cerámico también es la misma, 16 MHz.

La principal diferencia es el microcontrolador en que está basada cada una de ellas. Por un lado, la tarjeta Arduino UNO esta basada en el ATmega328. Este microcontrolador no tiene comunicación USB integrada, por lo que la tarjeta requiere un convertidor USB a Serial. Esta función es realizada por un ATmega16u2, un microcontrolador adicional programado para realizar la conversión. Por otra parte, la tarjeta Arduino Leonardo esta basada en un microcontrolado ATmega32u4 que cuenta con comunicación USB integrada. Lo anterior ocasiona que al conectar una tarjeta Arduino UNO, un puerto virtual COM es asignado para la comunicación. Al conectar la tarjeta Leonardo a una computadora, ésta es reconocida como un teclado o ratón, lo que da la posibilidad de emplear funciones Keyboard o Mouse.

La tarjeta Arduino UNO cuenta con 6 canales de entrada analógica, en los pines del A0 al A5. La tarjeta Arduino Leonardo cuenta con 12 canales de entrada analógica, los pines del A0 al A5, y los pines 4, 6, 8, 9, 10 y 12, que corresponden a los canales del A6 al A11. La tarjeta Arduino Leonardo cuenta con una salida de PWM mas que la tarjeta UNO, ubicada en el pin 13. El resto de las salidas de PWM se ubican en los mismos pines en ambas tarjetas. Estos pines son el 3, 5, 6, 9, 10 y 11.

Otra de las diferencias que es importante tomar en cuenta cuando se va a adquirir una tarjeta UNO o Leonardo es el cable USB que se requiere para conectarlas a la computadora. En el caso de la tarjeta UNO se requiere un cable A – B, como el que utilizan la mayoría de las impresoras actualmente. La tarjeta Leonardo requiere un cable A – micro B.

Pinout de Arduino Leonardo

En esta imagen tienes información sobre los pines de conexión.

pinout Arduino Leonardo

Resumen de diferencias:

Arduino UNO

Arduino Leonardo

Microcontrolador

ATmega328

ATmega32u4

Entradas analógicas

6 entradas: A0, A1, A2, A3, A4, A5

12 entradas: A0, A1, A2, A3, A4, A5, 4, 6, 8, 9, 10, 12

Salidas de PWM

6 salidas: 3, 5, 6, 9, 10, 11

7 salidas: 3, 5, 6, 9, 10, 11, 13

Comunicación I2C

SDA: A4, SCL: A5

SDA: 2, SCL: 3

Comunicación SPI

SS: 10, MOSI: 11, MISO: 12, SCK: 13

En el conector ICSP

Interrupciones externas

Interrupción 2

Interrupción 5

Memoria Flash

32 KB (0.5 KB para el bootloader)

32 KB (4 KB para el bootloader)

SRAM

2 KB

2.5 KB

EEPROM

1 KB

1 KB

IDE Arduino

Para programar las instrucciones de procesamiento en nuestro Arduino vamos a usar el IDE de Arduino. El IDE es un entorno de desarrollo integrado, es decir, una aplicación que tiene lo necesario para crear programas, cargarlos en la placa Arduino y analizar los resultados.

arduino IDE

Instalación del entorno de programación

Puedes descargarlo en la dirección https://www.arduino.cc/en/software. Si tu sistema operativo es Linux instálelo directamente desde los repositorios.

Configuración

Conecte la placa Arduino a la computadora con un cable USB.

Abra el IDE de Arduino y, en " Herramientas " o " Utilidades " → " Tarjeta ", busque su modelo de Arduino. En nuestro caso es Arduino Uno. Es posible que el programa ya lo haya detectado automáticamente.

arduino IDE tarjeta2

Es posible que también deba configurar el puerto serie al que está conectada la placa Arduino: vaya a " Herramientas " → " Puerto " y busque el puerto serie al que está conectada.

arduino IDE tarjeta3

Si tiene problemas para comunicarse con el puerto serie, puede deberse a la falta de permisos. En Linux, como administrador, conecta la placa, abre una terminal y escribe lo siguiente. Luego reinicie la computadora para que los cambios surtan efecto de forma permanente:

Incluya usuarios en el grupo de marcado:

sudo usermod -a -G dialout

Otorgue permisos para comunicarse con el puerto serie tyACM0:

sudo chmod 777 /dev/ttyACM0

Cree un enlace simbólico al puerto:

sudo ln -sf /dev/ttyACM0

Abra el programa "Blink" en Archivo → Ejemplos → Básicos → Blink y descárguelo a la tarjeta Arduino haciendo clic en el segundo botón de arriba descargar

Notarás que parpadea el LED conectado al pin 13. Esto significa que la placa funciona bien y se conecta perfectamente con el ordenador, por lo que ya podemos empezar a programar.

arduino IDE blink

Otros programas de utilidad

Autodesk 123D Circuits

De los circuitos de Autodesk

Autodesk 123D Circuits es una aplicación web que le permite crear y compartir proyectos Arduino en línea. Simplemente conecte los componentes a un protoboard, agregue el código, pruébelos y compártalos.

Fritzing

Por Fritzing Team CC By-SA de wikimedia

Fritzing es un software de código abierto que ilustra y documenta los prototipos de Arduino. Puede ser útil para nuestros proyectos.

Guía de programación

Esta página enumera las funciones más comunes utilizadas en Arduino, como un manual de referencia. En las páginas siguientes se irán introduciendo poco a poco las distintas funciones a través de ejemplos y ejercicios.

Para más tipos de variables y funciones puede consultar la referencia de Arduino.

Estructura básica de un programa

programa led parpadeante

Comentario explicativo

Aunque no es obligatorio si es muy recomendable tener un comentario explicativo. Sobre todo para que al cabo de unas semanas recordemos qué hace el programa y qué montaje le corresponde. Es deseable que se comenten los números de pines, con qué componente electrónicos hay que conectarlos y que lógica HIGH-LOW de funcionamiento tienen. También se suele añadir el nombre de los/as autores/as y si es un ejercicio el enunciado.

Declaración de variables y funciones:

Para facilitar la reutilización del programa se declaran todos los pines que vamos a usar como variables constantes con el modificador const. A partir de aquí en lugar de utilizar esos número de pin utilizararemos los nombres que les hemos asociado. Estos nombres se suelen escribir en mayúsculas y con subrayados. Si tenemos que utilizar variables de ámbito global también las definiremos aquí. Si queremos crear nuestras propias funciones también las definiriamos en este apartado después de las variables. Si fuera necesario podemos incluir algunas librerías de ayuda con #include <nombre_libreria.h>. Estas sentencias deben ser las primeras justamente después del comentario explicativo.

const int PIN_LED_AZUL = 9; // Conectamos un led al pin 9
int  botonA = LOW; // Declaramos la variable botonA y la inicializamos a LOW (o valor 0)
char opcion; // Declaramos la variable opción sin inicializarla a ningún valor predeterminado.

Configuración

setup()
{
   ...
}

En esta función setup() pondremos el código de configuración inicial. Funciona solo una vez. También podemos forzar su uso al pulsar el botón reset de la placa Arduino. Aquí indicamos la configuración de los pines. Por ejemplo, que el pin 13 es un pin de salida: pinMode(led, OUTPUT);`

Programa

loop()
{
   ...
}

Las instrucciones contenidas en la función loop() se ejecutan indefinidamente, hasta que se desconecta la placa Arduino de la electricidad. Es decir, el código cuando llegue al final del bloque volverá a ejecutarse por el principio. Por ejemplo, programamos que un led se encienda y apague una sola vez y la función loop() hará que este se encienda repetidamentes hasta desconectar la placa.

Comentarios

Usamos /* … */ para crear un bloque de comentarios de varias líneas. Usamos // … para agregar un comentario hasta final de la línea

/*
   Esto es un bloque
   de comentarios en
   varias líneas
*/
// Esto es un comentario hasta final de línea.
int variable = 3: // Este también es un comentario hasta final de línea.

Variables

Una variable es un hueco en la memoria que podrá ir cambiando de valor con la ejecución del programa. Estos huecos se declaran para almacenar un tipo de dato predeterminado (números, caracteres, …​) y solamente pueden guardar datos de dicho tipo. Si no queremos que su valor cambie podemos añadirle el modificador const al tipo de dato declarado. A estas variables se les llaman variables constantes o simplemente constantes y se les suelen dar un nombre con todas sus letras en mayúsculas.

Comando

Descripción

Ejemplo

int

Es el tipo de variable predeterminado . Almacena un número entero de 16 bits en el rango de -32768 a +32767.

int suma = 0;

booleano

Valor booleano : toma el valor verdadero (true) o falso (false)

boolean esMayor = true;

char

Carácter: almacena un ASCII

char letra = 'a';

String

texto: almacena una cadena

String texto = "Hola mundo";

byte

Almacena un número entero de 8 bits en el rango de 0 a 255

byte edad = 23;

long

Almacena un número entero de 32 bits en el rango de -2.147.483.648 a 2.147.483.648

long Contador = -10000;

float

Almacena un número decimal de 32 bits

float pi = 3.1416;

const int

Valor entero constante

const int LED = 13;

const char

Caracter constante

const char SALIR = 's';

Un array o matriz es un conjunto de variables de un tipo de datos específico. Hay que tener en cuenta que el índice comienza a contar en 0.

tipo nombre [nº de variables];
tipo nombre [] = {valor1,…, valor n};

Ejemplos

int valores[10];

valores[0] = 20;
valores[1] = 23;

int leds[] = {7,8,9,10};
char opciones[3] = {'a','b','c'};
  • Crea (declara) el array “valores” con espacio para almacenar 10 números de tipo int (entero). En este caso no se inicializa con ningún valor. En las siguientes líneas almacena en la primera posición el valor 20 y en la segunda posición el valor 23.

  • Crea (declara) el array “leds” de tipo int (entero) sin indicar el número de elementos que contendrá pero que inicializa con los valores 7,8,9 y 10.

  • Crea (declara) el array “opciones” con espacio para almacenar 3 caracteres de tipo char en los que almacena (inicializa) los valores a,b y c. Es importante utilizar las comillas simples ' para los valores de tipo caracter.

Funciones

Funciones digitales:

Comando Descripción Ejemplo

pinMode(pin, modo)

Te permite configurar un pin como salida, entrada o entrada con pull_up.

pinMode(LED_BUILTIN,OUTPUT);
pinMode(4,INPUT);
pinMode(PULSADOR_A,INPUT_PULLUP);

digitalRead(pin)

Leer un pin digital. Posibles valores 0 o 1.

botonA = digitalRead(PIN_BOTON_A);
estado = digitalRead(4);

digitalWrite(pin, estado)

Le permite escribir un pin digital con 1 o 0 (o con HIGH y LOW)

digitalWrite(13,HIGH);
digitalWrite(LED_ROJO,LOW);

Funciones analógicas:

Comando Descripción Ejemplo

analogRead (pin)

Le permite leer un valor analógico de 0 a 1023. Solamente en los pines marcados como 'entradas analógicas' de A0 a A5.

sensorA = analogRead(A0);

analogWrite (pin, valor_PWM)

Le permite escribir un valor analógico de 0 a 255. Solamente en los pines marcados como ~ PWM.

analogWrite (3, 134);

tono(pin, frecuencia, duración);

Genera un sonido de la frecuencia deseada, en el pin indicado y con una duración que le indicamos

tone(6,12000,500);

noTone(pin);

Termina el tono que está sonando para el pin indicado.

noTone(6);

Funciones para escalar variables:

Comando Descripción Ejemplo

variable_salida = map(variable_entrada, minEntrada, maxEntrada, minSalida, maxSalida)

Escala el valor de la variable de entrada con valores entre minEntrada y maxEntrada con valores de salida minSalida y max Salida.

 angulo = map(potenciometro,0,1023,0,180);  //el valor del potenciometro de 10bit (0-1023 lo escalamos al valor del ángulo para mover un servo de 0 a 180)

Funciones de comunicación serie:

Comando Descripción Ejemplo

Serial.begin(9600)

Inicialización de la comunicación serie con el editor. El valor indicado es la velocidad en bit por segundo, normalmente 9600. La inicialización ser debe hacer en la función setup().

Serial.begin(9600);

Serial.print()

Mostrar en pantalla. Se puede escribir texto o el contenido de las variables. Muy útil para localizar errores y depurar programas.

Serial.print(variable1);
Serial.print("Texto"");

Serial.println()

Tiene la misma utilidad que la función Serial.print pero añade un salto de línea.

Serial.println(variable1);
Serial.println("Texto"");

Funciones de espera:

Comando Descripción Ejemplo

delay(n)

Hace una pausa de n milisegundos.

delay(1000);

delayMicroseconds(n)

Hace una pausa de n microsegundos.

delayMicroseconds(100);

millis(n) o micros(n)

Devuelve el tiempo transcurrido desde el inicio del programa en milisegundos o microsegundos.

t_encendido = millis();
t_encendido_micro = micros();

Funciones para generar valores aleatorios:

Comando

Descripción

Ejemplo

random(max)

Devuelve un número aleatorio entre cero (incluido) y máx (no incluido).

azar = random(7); //Valor aleatoria entre 3 y 6.

random(min,max)

Devuelve un número aleatorio entre mín (incluido) y máx (no incluido).

azar = random(3,7); //Valor aleatoria entre 3 y 6

randomSeed(valor)

Inicia el generador de números aleatorios con el valor dado.

randomSeed(12345);
randomSeed(analogRead(0));

Constantes

Comando Descripción Ejemplo

LOW

Representa un valor '0 lógico'. Se puede usar 0 o false como sinomino de LOW. El pin tendrá un valor eléctrico de 0V.

digitalWrite(13,LOW);

HIGH

Representa un valor '1 lógico'. Cualquier valor diferente de cero o true es sinomimo de HIGH. El pin tendrá un valor eléctrico de 5V (3.3V en otros Arduino).

digitalWrite(13,HIGH);

false

Representa el valor '0 lógico'. Se utilza con las variables de tipo boolean.

boolean esMayor = false;
if(salir == false) {  }

true

Representa el valor '1 lógico'. Se utilza con las variables de tipo boolean.

boolean esCierto = true;
while(ultimaVuelta != true) {  }

LED_BUILTIN

Indica el pin en el que la mayoría de placa Arduino tienen un led. Suele ser el pin 13.

digitalWrite(LED_BUILTIN,HIGH);

Operadores

Lógicos:

Devuelve un valor false o true.

Comparacion

Igual a

==

Diferente de

!=

Mayor que

>

Menos de

<

Mayor o igual a

>=

Menor o igual a

Lógicos

y lógica

&&

o lógica

||

no lógica

!

Ejemplos

if( (boton == LOW) && (salir != false) )
{ }

while(valor < 10)
{  }

Matemáticos

Devuelven un valor numérico a la variable de la izquierda.

Matemáticos

Asignar (hacia la izquierda)

=

Módulo (resto)

%

Suma

+

Restar

-

Multiplicación

*

División

/

La operación módulo es el resto de una división entera.

Un uso muy común es junto a variables que hagan de contadores cuando solamente queremos que actúen en un rango determinado. Por ejemplo si queremos que un número valor se mueva en el rango 0 a 4 de forma cíclica.

// La variable valor toma valores de 0 a 4 cíclicamente
num++;
valor = num % 4;

Ejemplos

resultado = valor * 5 + (2 * numero);
suma = suma + entrada;

El siguiente código es erroneo. Intenta asignar a 4 el valor de suma. La asignación siempre la recibe el operando de la izquierda.

valor + 4 = suma;

Operadores compuestos

Operador

Operación

Ejemplo

Equivalencia

++

Incrementar una unidad

n++

n = n + 1

- -

Disminuye una unidad

n- -

n = n - 1

+=

Suma

n += 3

n = n + 3

- =

Resta

n -= 3

n = n - 3

*=

Producto

n *= 3

n = n * 3

/=

División

n /= 3

n = n / 3

Estructuras de Control

Las instrucciones de un programa pueden seguir tres tipos de flujo: secuencial, condicional o repetitivo.

Flujo secuencial

Las instrucciones de un programa se van ejecutando de arriba hacia abajo de forma secuencial. Cada instrucción se separa de la siguiente con un punto y coma ;. Se suelen crear bloques de instrucciones mediante llaves {}.

{
   primera instrucción;
   segunda instrucción;
   ...
   última instrucción;
}

Existen unas instrucciones que interrumpen el flujo secuencial y establecen un flujo condicional o repetitivo.

Flujo condicional

El flujo condicional establen un orden que depende de alguna condición lógica. Dicha condición será evaluada y solamente podrá tener dos posibles valores: verdadero o falso (true o false).

if(condición) {bloque}

Cuando se cumple la condición establecida el flujo salta al bloque interno de la condición if. Es decir, se ejecutan las instrucciones definidas entre llaves {…}. Cuando no se cumple la condición no se ejecutan y el programa continúa su curso.

Ejemplo: Si la variable entrada es menor a 500 se ejecuta el bloque A.

if (entrada < 500)
{
   // Bloque A
}
if
if(condición) {bloque A} else {bloque B}

En este caso definimos dos bloques, uno para cuando se cumple la condición establecida, y otro para cuando no se cumple.

Ejemplo: Si el ingreso es menor a 500 se ejecuta el proceso 1, y si el proceso 2 no se ejecuta

if (entrada < 500)
{
   // Bloque A
}
else
{
   // Bloque B
}
if else

Para ahorrar líneas las llaves de los bloques condicionales y repetitivos pueden empezar en la misma línea de la instrucción. El ejemplo anterior se podría escribir como:

if (entrada < 500) {
   // Bloque A
} else {
   // Bloque B
}
switch() case break

Permite elegir entre varias opciones de una variable dada. En cada caso no se utilizan bloques entre llaves si no que hay que indicar mediante una instrucción break que salga del bloque actual. Es decir, el comprendido entre las llaves del switch. Se utiliza la instrucción default a modo de else para el resto de casos.

Ejemplo: si la variable opción toma el valor 4, se ejecuta el proceso 1, si se toma el proceso 5, se ejecuta el proceso 2 y si no se cumple ninguna de las condiciones anteriores (por defecto) se ejecuta el proceso 3.

switch(opcion) {
   case 4:
      // bloque 1
   break;
   case 5:
      // bloque 2
   break;
   default:
      // bloque 3
   break;
}
switch

Flujo repetitivo

El flujo repetitivo repetirá el bloque interno mientras que la condición sea cierta. Hay tres bucles repetitivos que se deben utilizan cuando sean más indicados. El bucle for se utiliza cuando se sabe de antemano en número de repeticiones que vamos a realizar. El bucle while se utiliza cuando no sabemos las veces que tenemos que repetir las instrucciones dando se el caso de que no se ejecute ninguna vez. El bucle do while se utiliza cuando no sabemos las veces que tenemos que repetir las intrucciones pero sí sabemos que al menos debemos recorrerlo una vez.

for(inicio, condición, incremento) {bloque}

Esta instrucción permite repetir el bloque interno un número de veces determinado. Además se creará un contador que irá incrementándose o decrementándose al ritmo que queremos. El bucle se repetirá mientras que la condición sea cierta.

Ejemplo: Usamos el contador 'a' de tipo entero(int). Ejecutamos el proceso dándole a la variable 'a' los valores desde 0 a 9. Cuando a tome el valore 10 la condición no se cumplirá y sale del bucle.

for(int a = 0 ; a < 10 ; a++ )
{
   // Proceso a repetir
}

Ejemplo: Repetir un bloque de 25 a 5 contando de 5 en 5.

for(int i = 25 ; i < 5 ; i = i - 5)
{
   // Proceso a repetir
}
for
while(condición) {bloque}

El bloque interno se repetirá mientras la condición sea cierta. Si desde el principio no se cumple la condición no se entrerá en el bucle. El bucle terminará cuando la condición ya no se cumpla. Por lo que es importante que dentro del bloque se modifique la variable de la condición.

Ejemplo: Ejecutamos un proceso mientras que 'a' sea menor o igual que 'b'.

b = 200;
while (a <= b )
{
   // proceso a repetir
   a = analogRead (A0);
}

Ejemplo: ejecutamos un proceso 200 veces. En este caso lo ideal es utilizar un bucle 'for', ya que inicializa, comprueba la condición e incrementa en la misma instrucción.

var = 0;
while(var < 200) {
   // acción a repetir
   var++;
}
while
do {bloque} while(condición)

El bloque interno se ejecutará una vez y al finalizar por primera vez el bloque se evaluará la condición. Se volverá a repetir el bucle mientras la condición sea cierta. El bucle termina cuando la condición ya no se cumpla. Como en el caso del bucle while es importante que dentro del bloque se modifique la variable de la condición.

Ejemplo: Leeremos 'a' la primera vez y repetiremos el bucle mientras se cumpla la condición. Mientras que 'a' sea menor o igual que 'b'.

b = 200;
do {
   // proceso a repetir
   a = analogRead (A0);
} while (a <= b )
Más ejemplos en la web de Luis Llamas

Montajes electrónicos

¿Qué es la electrónica? Se puede decir que la electrónica es el campo de la ingeniería relacionado con el diseño y aplicación de dispositivos electrónicos cuyo funcionamiento depende del flujo de electrones para la generación, transmisión, recepción y almacenamiento de información , entre otros. Esta información puede constar de voz, música, una imagen, datos, etc.

La electrónica estudia cómo la electricidad es controlada por piezas llamadas componentes electrónicos . Combinando estos componentes de manera adecuada, podemos ensamblar circuitos electrónicos de diferentes características y propiedades.

Sin electrónica no conoceríamos radio, televisión, calculadoras, computadoras, teléfonos, robots, satélites y mucho más.

Señales analógicas y digitales

La electrónica se puede dividir en analógica y digital.

grafico analogico digital

Una señal analógica es aquella que puede tener valores infinitos . Por ejemplo, las ondas de radio o televisión son señales analógicas. La electrónica analógica funciona con señales continuas , tanto en el tiempo como en el alcance, pueden tomar valores infinitos .

altavoz ondas

Por ejemplo, un micrófono capta una señal de audio como señal eléctrica analógica. En un altavoz, una señal eléctrica analógica se convierte en una onda de sonido.

grafico onda

Una señal digital solamente puede tomar dos valores. La electrónica digital es parte de la electrónica que maneja los sistemas electrónicos en los que la información está codificada en solo dos estados: 0 y 1 . A cada uno de ellos se le asigna un cierto voltaje o rango de voltaje, llamados niveles lógicos .

grafico binario

Cuando las cantidades a procesar (temperatura, velocidad, etc.) son analógicas, deben convertirse a señales digitales. Esto se hace con convertidores de analógico a digital (A / D). Por ejemplo, en un termómetro digital.

chip A D

De manera similar, cuando un sistema tiene que entregar una señal analógica y su fuente está en formato digital, se utilizará un convertidor de digital a analógico (D / A). Por ejemplo, un reproductor de CD de audio.

Ley de Ohm. Potencia

La ley de Ohm relaciona las magnitudes de voltaje , resistencia y corriente de la siguiente manera:

V = I · R

Voltaje en voltios (V), corriente en amperios (A), resistencia en Ohmios (Ohm)

Esta es una ecuación de primer grado en la que puede borrar la magnitud que desea calcular cuando conoce las otras dos.

Hay una regla mnemotécnica que puede ayudarte. Consiste en un triángulo como el de la imagen, cuando cubres con la mano la magnitud que quieres calcular puedes ver los cálculos que tienes que hacer.

ohm tri
ohm tri i
ohm tri r
ohm tri v

Energia electrica o Potencia

La energía eléctrica ( P ) es la energía consumida por unidad de tiempo. Se mide en vatios ( W ) Cuanta más potencia tiene un aparato eléctrico más electricidad en la unidad de tiempo.

Cálculos:

P = E / t ⇒ E = P · t

Como E = V · I · t , tenemos: P = V · I

P = V · I

P = Potencia en watios (W), V = voltaje en voltios (V), I = corriente en amperios (A)

Protoboard y componentes

Las placas prototipo se utilizan para probar circuitos electrónicos y comprobar que funcionan antes de soldar los componentes en el circuito final.

Los componentes se sitúan en los orificios de la placa. Estos agujeros están conectados entre sí como se ve en la figura, y tendrás que tener esto en cuenta para montar los circuitos allí.

protoboard conex

Las líneas horizontales superior e inferior se utilizan para conectar la fuente de alimentación.

Aquí puede ver varios ejemplos de conexión: en serie y en paralelo.

proto serie
proto paralelo

Buenas prácticas en los montajes.

  • Al iniciarse en el uso de la protoboard se recomienda utilizar la línea de alimentación positiva en la parte superior y la línea de alimentación negativa de la parte inferior. De modo que los montajes se parezcan a sus esquemas electrónicos donde se suele poner la alimentación arriba (5 V) y la tierra abajo (GND). En los cables de alimentación se suele usar el color rojo para el positivo y el negro, el marrón o el gris para el negativo.

esquema led
proto energia
  • Al utilizar componentes (resistencias, led, …​) intentar posicionarlos en el canal central o que hagan de puente entre las líneas horizontales de alimentación (positiva o negativa) y una columna de la protoboard. De este modo nos ahorramos conexiones ya que los propios componentes hacen de cables de conexión con sus patillas.

  • Hacer las conexiones lo más cortas posibles entre las líneas horizontales de alimentación (positiva o negativa) y las columnas de la protoboard. Si es posible realizar estas conexiones mediante cables tipo 'grapa'. Como el cable amarillo del dibujo anterior.

  • Hay determinados componentes que debido a su tamaño han de colocarse en el canal central, pulsadores, display de 7 segmentos, chip, etc. Tenedlo en cuenta a la hora de planificar los montajes. Colocar dichos componentes en primer lugar.

  • Nunca conecte dos pines del mismo componente en la misma línea vertical, ya que lo estaría cortocircuitando.

protoboard conex alimentacion
  • Para tener ambos polos de alimentación (positivo y negativo) en las líneas superior e inferior de alimentación se suele hacer unas conexiones de arriba a bajo en un lado de la protoboard (A).

  • Algunas protoboard tienen las líneas de alimenteción cortadas por la mitad. Suelen tener el dibujo interrumpido para indicar este hecho (B). Si queremos continuidad pondremos unas conexiones de tipo 'grapa',

protoboard conex confusion
8bit computer

Referencias

Tecnoloxia.org

Control y robótica y Electrónica Material elaborado por María Loureiro con licencia CC By-SA.

TallerTecno.com

Arduino Material elaborado por el Departamento de Tecnología del IES Llano de la Viña de Villargordo (Jaén).

LuisLlamas.es

Arduino Material elaborado por Luis Llamas con licencia CC BY-NC-SA.