42

Click here to load reader

Apunte de Arduino Hecho Por Ronald Parte 1

Embed Size (px)

DESCRIPTION

apunte sobre los ejemplos de Arduino

Citation preview

Page 1: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Language ReferenceArduino programs can be divided in three main parts: structure, values (variables and constants), and functions.

Structure setup() loop()

Control Structures if if...else for switch case while do... while break continue return goto

FurtherSyntax ; (semicolon) {} (curlybraces) // (single line

comment) /* */ (multi-line

comment) #define #include

ArithmeticOperators = (assignmentoperator) + (addition) - (subtraction) * (multiplication) / (division) % (modulo)

ComparisonOperators == (equalto) != (notequalto) < (lessthan) > (greaterthan) <= (less than or equal

to) >= (greater than or

equal to)BooleanOperators

&& (and)

VariablesConstants

HIGH | LOW INPUT | OUTPUT |

INPUT_PULLUP LED_BUILTIN true | false integerconstants floatingpointconstants

Data Types void boolean char unsignedchar byte int unsignedint word long unsignedlong short float double string - chararray String - object array

Conversion char() byte() int() word() long() float()

Variable Scope&Qualifiers variable scope static volatile const

Utilities sizeof()

FunctionsDigital I/O

pinMode() digitalWrite() digitalRead()

Analog I/O analogReference() analogRead() analogWrite() - PWM

Dueonly analogReadResolution() analogWriteResolution()

Advanced I/O tone() noTone() shiftOut() shiftIn() pulseIn()

Time millis() micros() delay() delayMicroseconds()

Math min() max() abs() constrain() map() pow() sqrt()

Trigonometry sin() cos() tan()

RandomNumbers randomSeed() random()

Bits and Bytes lowByte() highByte() bitRead()

Ing. Ronald N. Kopp Página 1

Page 2: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

|| (or) ! (not)

Pointer Access Operators * dereferenceoperator &referenceoperator

BitwiseOperators & (bitwise and) | (bitwiseor) ^ (bitwisexor) ~ (bitwisenot) << (bitshiftleft) >> (bitshiftright)

CompoundOperators ++ (increment) -- (decrement) += (compoundaddition) -=

(compoundsubtraction) *=

(compoundmultiplication)

/= (compounddivision) &= (compoundbitwise

and) |=

(compoundbitwiseor)

bitWrite() bitSet() bitClear() bit()

ExternalInterrupts attachInterrupt() detachInterrupt()

Interrupts interrupts() noInterrupts()

Communication Serial Stream

USB (Leonardo and Due only) Keyboard Mouse

Glosario: code / function: comando sketch: boceto/programa delay: retraso / demora loop: bucle/lazo set: establecer/inicializar running: ejecutándose

Paginas consultadas:

http://wiring.org.co/reference/http://arduino.cc/en/Tutorial/HomePage

Ing. Ronald N. Kopp Página 2

Page 3: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Código de colores de las Resistencias

Ing. Ronald N. Kopp Página 3

Page 4: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Funciones básicasLos bocetos (sketch) utilizados aquí, de ejemplos, son programas que demuestran los comandos básicos de Arduino. Se encuentran incluidos en el programa Arduino; para abrirlos, hacemos clic en el botón Abrir de la barra de herramientas y buscamos en la carpeta de ejemplos.

1.Basics BareMinimum : The bare minimum of code needed to start an Arduino sketch. Blink : Turn an LED on and off. DigitalReadSerial : Read a switch, print the state out to the Arduino Serial Monitor. AnalogReadSerial : Read a potentiometer, print its state out to the Arduino Serial Monitor. Fade : Demonstrates the use of analog output to fade an LED. ReadAnalogVoltage : Reads an analog input and prints the voltage to the serial monitor

Ing. Ronald N. Kopp Página 4

Page 5: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

1. BareMinimum: La cantidad mínima de comandos necesarios para iniciar un boceto (sketch) en Arduino.

Este ejemplo contiene los comandos mínimos que se necesitan para hacer un boceto en Arduino y para que éste pueda ser compilado: el comando setup () y el comando loop ().

Hardware Required Arduino Board

CircuitSolo se necesita la placa Arduino para éste ejemplo.

Ing. Ronald N. Kopp Página 5

Page 6: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

CodeEl comando setup() se coloca cuando se inicia un boceto. Lo usaremos para inicializar variables, estados de los pines, comenzar a usar las bibliotecas, etc. El comando setup() sólo se ejecutará una vez, y esto será, después de cada arranque o reinicio de la placa Arduino.

Nombre setup()Ejemplo void setup() {

pinMode(0, OUTPUT); Serial.begin(9600);}

void loop() { Serial.print('.'); delay(1000); }

Descripción La función es llamada una vez que el programa empieza a ser ejecutado. Suele definir el ambiente inicial, tal como el estado de los pines (INPUT o OUTPUT), inicializar el puerto serial, etc. Todo esto antes que loop() empiece a ejecutarse. Las variables declaradas en setup() no son accesibles desde loop().

Sintaxis void setup() { declaraciones}

Parámetros Declaraciones Cualquier declaración valida.

Después de realizar el comando setup(), el comando loop() hace precisamente lo que su nombre sugiere, bucles de forma consecutiva, lo que permite al programa cambiar y responder mientras se ejecuta. El comando loop() en el párrafo de nuestro boceto es utilizado para controlar activamente la placa Arduino.

Nombre loop ()Ejemplo void setup() {

pinMode(0, OUTPUT);}

void loop() { digitalWrite(0, HIGH); }

Descripción Continuamente ejecuta las líneas de código dentro suyo, bloqueándose cuando el programa es detenido. La función loop() es usada en conjunción con setup(). El número de veces que loop() se ejecuta por segundo puede ser controlada con las funciones delay() y delayMicroseconds().

Sintaxis loop() { declaraciones}

Parámetros Declaraciones Una secuencia de declaraciones para ser ejecutados una y otra vez.

Ing. Ronald N. Kopp Página 6

Page 7: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

El código de abajo en realidad no hace nada, pero ésta estructura es útil para ser copiada y pegada, de tal manera que podamos empezar cualquier boceto por nuestra cuenta. También muestra cómo hacer comentarios de los comandos.Cualquier línea que comienza con dos barras inclinadas (//) no será leído por el compilador, podremos escribir lo que queramos después de ella. El comentar nuestro código puede ser particular mente útil para explicar, tanto a nosotros mismo y a otros, cómo funciona nuestro programa paso a paso.

Nombre //comentarioEjemplo // Inicializa el pin 0 como OUTPUT

// Asigna el valor HIGH al pin 0pinMode(0, OUTPUT); // Inicializa el pin 0 como OUTPUT digitalWrite(0, HIGH); // Asigna el valor HIGH al pin 0

Descripción Notas explicitarías dentro del código. Los comentarios son usados para recordarse a sí mismo y para informar a los demás acerca de una función en nuestro programa. Comentarios de una sola línea son marcados con los caracteres //. Los comentarios son ignorados por el compilador.

Sintaxis // comentarioParámetros Comentario Cualquier secuencia de caracteres.

void setup() {// poner el código de configuración aquí, para ejecutar una vez}

void loop() {// poner el código principal aquí, para ejecutar repetidamente}

Nombre /* */ (multiline comment)Ejemplo /*

Cambia de HIGH y LOW un pinalternando entre ellosy esperando 100 milisegundosen cada alteración

*/ digitalWrite(8, HIGH);delay(100);digitalWrite(8, LOW);

Descripción Notas de explicación incrustadas en el código. Los comentarios son usados para recordar e informar a otros acerca del funcionamiento de su programa. Los comentarios de multiples líneas son usados para descripciones de textos largos o para comentar partes del código mientras la aplicación esta depurando. Los comentarios son ignorados por el compilador

Sintaxis /* comentarios*/

Ing. Ronald N. Kopp Página 7

Page 8: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Parámetros Comentario Cualquier secuencia de caracteres.

Nombre {} (llaves)Ejemplo int a[] = { 5, 20, 25, 45, 70 };

Descripción Define el inicio y fin del bloque de una función y de bloques de instrucciones de estructuras como el for() y el if(). Los corchetes son también usados para definir los valores iníciales en la declaración de un arreglo

Sintaxis { declaración }{ ele0, ..., eleN }

Parámetros Declaraciones Cualquier secuencia de instrucciones válidaele0, ..., eleN Lista de elementos separados por coma

Ing. Ronald N. Kopp Página 8

Page 9: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

2. Blink: parpadear

Este ejemplo muestra la cosa más simple que podemos hacer con un Arduino, el destello de un LED.

Hardware Required ArduinoBoard LED

CircuitPara construir el circuito, conectamos una resistencia de 220 ohmios al pin 13. A continuación, conectamos la pata más larga de un LED (la pata positiva, llamada el ánodo) a la resistencia. Fijamos la pata más corta (la pata negativa, llamado el cátodo) a tierra. A continuación, conectamos la placa Arduino en el ordenador, iniciamos el programa de Arduino, e introducimos el código de abajo.

La mayoría de las placas Arduino ya tienen un LED conectado al pin 13 en la propia placa . Si ejecutamos este ejemplo, sin el hardware conectado, deberíamos ver que el LED este intermitente.

Ing. Ronald N. Kopp Página 9

Page 10: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Schematic

Ing. Ronald N. Kopp Página 10

Page 11: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

CodeEn el siguiente programa, lo primero que hacemos es asignar al pin 13 como un pin de salida con la línea:pinMode(13, OUTPUT);

Nombre pinMode()Ejemplo int inpin = 8;

int outpin = 9;int val = 0;

void setup() { pinMode(inpin, INPUT); pinMode(outpin, OUTPUT);}

void loop() { val = digitalRead(inpin); if (val == HIGH) { digitalWrite(outpin, HIGH); } else { digitalWrite(outpin, LOW); } }

Descripción El comando pinMode() designa al pin digital I/O especificado como INPUT o OUTPUT. Un pin I/O digital o binario puede tener dos posible valores: HIGH o LOW. Es posible asignar o leer el valor de un pin digital I/O usando los métodos digitalWrite() y digitalRead().

Sintaxis pinMode (pin, valor)Parámetros Pin Numero del pin

Valor INPUT o OUTPUT

En el bucle principal, encendemos el LED con la línea:digitalWrite(13, HIGH);

Nombre digitalWrite()Ejemplo int outpin = 0;

void setup() {pinMode(outpin, OUTPUT);}

void loop() {digitalWrite(outpin, HIGH);

Ing. Ronald N. Kopp Página 11

Page 12: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

}Descripción El comando digitalWrite() escribe un valor (o pone en un estado) a un pin digital. Los

valores o estados posibles son HIGH o LOWSintaxis digitalWrite (pin, valor)Parámetros Pin int: el número del pin

Valor HIGH o LOW

Esto suministra 5 voltios al pin 13 que creará una diferencia de voltaje a través de los terminales del LED, y lo encenderá. Luego lo apagamos con la línea:digitalWrite(13, LOW);

Para eso se necesita que el pin 13 vuelva a 0 voltios, y se vuelva a apagar el LED. Y entre el encendido y el apagado, se requiere un tiempo suficiente para que una persona vea el cambio , por lo que el comando delay() le dirá al Arduino que no haga nada durante 1000 milisegundos, o un segundo.

Nombre delay()Ejemplo int pin = 0;

int ledpin = 1;

void setup() { pinMode(pin, INPUT); pinMode(ledpin, OUTPUT);}

void loop() { if (pin == HIGH) { digitalWrite(ledpin, HIGH); } else { digitalWrite(ledpin, LOW); } delay(250); // Detiene el programa por 250 milisegundos}

Descripción Obliga al programa a detenerse por un tiempo especificado. El tiempo de demora es especificado en milésimas de segundo. La llamada a la función delay(3000) detendrá el programa por tres segundos. Alias de delayMIlliseconds().

Sintaxis delay(milisegundos)Parámetros Milisegundos int: Especificado en milisegundos (hay 1000 milisegundos en 1

segundo)

Cuando se utiliza el comando delay(), no pasa nada más por esa cantidad de tiempo. Una vez que hayamos entendido los ejemplos básicos, revisaremos el ejemplo BlinkWithoutDelay para aprender a crear un retraso mientras se hace otras cosas.

delay = retraso

Ing. Ronald N. Kopp Página 12

Page 13: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

// el Pin 13 tiene un LED conectado en la mayoría de las placas Arduino.// le damos un nombre:int led = 13;// el setup se ejecuta de rutina una vez cuando se presiona RESET o se enciende la placa:

void setup() { // inicializamos el pin digital como una salida. pinMode(led, OUTPUT); }

// la rutina loop se ejecuta una y otra vez por siemprevoid loop() { digitalWrite(led, HIGH); // enciende el LED (el nivel de tensión es un ALTO) delay(1000); // esperar un segundo digitalWrite(led, LOW); // apaga el LED haciendo el nivel de tensión un BAJO delay(1000); // espera un segundo}

Nombre intEjemplo int a; // Declara la variable "a" de tipo int

a = 23; // Asigna a "a" el valor 23int b = -256; // Declara la variable "b" y le asigna el valor -256int c = a + b; // Declara la variable "c" y le asigna la suma de "a" y "b"

Descripción Tipo de datos para enteros, números sin punto decimal. Los enteros pueden ser tan grandes como 32.767 y tan pequeños como -32,768. Estos son almacenados como 16 bits de información.

Sintaxis int varint var = valor

Parámetros var Nombre de la variable referenciado al valor.

valor Cualquier valor entero.

Nombre ; (punto y coma)Ejemplo int a; // Declaración

a = 30; // Asignación de la declaraciónSerial.print(i); // Función de la declaración

Descripción Es declaración destructora que separa elementos en un programa. Una declaración es una instrucción completa al computador y el punto y coma es usada para separar instrucciones (es similar al punto "." al escribir en Español). Los punto y coma son usados para separar diferentes elementos en una estructora for()

Sintaxis Decalración;Parámetros Declaraciones Una simple declaración para ejecutar

Ing. Ronald N. Kopp Página 13

Page 14: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

3. Digital Read Serial: Lectura digital serial

Este ejemplo muestra cómo supervisar el estado de un interruptor mediante la comunicación serie, entre el Arduino y el ordenador, a través del USB.

Hardware Required ArduinoBoard A momentary switch, button, or toggle switch 10k ohm resistor breadboard hook-up wire

Circuit

Conectamos los tres cables a la placa Arduino. Los dos primeros, el rojo y el negro, se conectan a las dos filas horizontales largas en el lado derecho del protoboard para facilitar el acceso a la alimentación de 5 voltios y tierra. El tercer cable va desde pin digital 2 hasta una pata del pulsador. Esa misma pata del pulsador se conecta a través de una resistencia pull-down (aquí 10K Ohms) a tierra. La otra pata del pulsador se conecta a la alimentación de 5 voltios.

Los pulsadores o conmutadores conectan dos puntos en un circuito cuando se los presiona. Cuando el pulsador está abierto (sin apretar) no hay ninguna conexión entre las dos patas del pulsador, por lo que el pin está conectado a tierra (a través de la resistencia pull-down) y lee como BAJO, o 0. Cuando se cierra el pulsador, se hace una conexión entre sus dos patas, conectando el pin a 5 voltios, de modo que el pin lee como ALTO, o 1.

Si desconectamos el pin I/O digital del todo, el LED puede parpadear de forma errática. Esto se debe a que la entrada es "flotante" es decir, que no tiene una conexión sólida a la tensión o a tierra, y

Ing. Ronald N. Kopp Página 14

Page 15: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

cambiará al azar a un estado, ya sea a un ALTO o a un BAJO. Es por eso que se necesita una resistencia pull-down en el circuito.

Schematic

Ing. Ronald N. Kopp Página 15

Page 16: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

CodeEn el programa a continuación, la primera cosa que haremos en la función setup será comenzar la comunicación serie, en 9600 bits de datos por segundo, entre la placa Arduino y el ordenador con la línea:Serial.begin(9600);

Nombre serialEjemplo int val;

void setup() { Serial.begin(9600); // Inicializa el puerto serial en 9600 baud}

void loop() { if ( Serial.available() > 0 ) // Si los datos están disponibles para leer { val = Serial.read(); // los lee y los almacena en 'val' } analogWrite(0, val);}

Descripción El puerto serial Serial de Wiring permite fácilmente leer o escribir datos hacia y desde un dispositivo externo. Permite comunicar dos maquinas y da la flexibilidad de hacer sus propios dispositivos y usarlos como entrada/salida de Wiring. El puerto serial es un puerto de nueve pines que solía existir en la mayoría de las PCs y puede ser emulado a través de un adaptador serial USB. El puerto Serial está disponible en los pines 0(Rx) y 1(Tx). Las velocidades típicas son: 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 y 115200 baudios.

Sintaxis serialMétodos begin() Abre el puerto serial para leer o escribir

read() Devuelve un número entre 0 y 255 para el siguiente byte esperado por el buffer. Devuelve -1 si no hay ningún byte, aunque esto debería ser evitado utilizando available() para ver si hay datos que estén disponibles.

write() Escribe un byte en el puerto serialprint() Escribe datos (int, float, byte, char, char[], números en base (DEC,

BIN, OCT or HEX) o Strings en el puerto serialprintln() Funciona como el método print pero imprime un carácter y hace un

salto de line cada vez que es llamada la funciónavailable() Devuelve el número de bytes disponibles.peek() Examina el siguiente byte que se encuentra disponible en el buffer

del puerto serial. Este método no saca el byte del buffer. Devuelve -1 si no hay datos disponibles

Ing. Ronald N. Kopp Página 16

Page 17: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

flush() Vacía el buffer del puerto serial. Posteriormente se llama read() y available() las cuales retornarán datos recibidos después del uso del comando flush()

end() Cierra el puerto serial

A continuación, configuramos el pin digital 2, como una entrada. Este pin leerá la señal de salida desde el pulsador del circuito:pinMode(2,INPUT);

Ahora que la configuración se ha completado, pasamos a configurar el bucle. Cuando se pulsa el pulsador, 5 voltios fluirán libremente a través de nuestro circuito, y cuando no se presione, el pin de entrada se conectará a tierra a través de la resistencia de 10kilo-ohmios. Esta es una entrada digital, lo que significa que el pulsador sólo puede estar en un estado encendido (visto por el Arduino como un "1", o ALTO) o en un estado de apagado (visto por el Arduino como un"0", o BAJO), sin nada en el medio.

Lo primero que hay que hacer en el bucle principal del programa es establecer una variable para contener la información que viene del pulsador. Dado que la información que viene del pulsador será un "1" o un "0", se puede utilizar un tipo de dato int. Llamaremos a esta variable sensorValue, y lo configuramos a que sea igual a lo que se lee en el pin digital 2. Podemos lograr todo esto con una sola línea de código:int sensorValue = digitalRead (2);

Nombre digitalRead()Ejemplo int inpin = 8;

int outpin = 9;int val = 0;

void setup() { pinMode(inpin, INPUT); pinMode(outpin, OUTPUT);}

void loop() { val = digitalRead(inpin); if (val == HIGH) { digitalWrite(outpin, HIGH); } else { digitalWrite(outpin, LOW); } }

Descripción Lee el estado (o valor) de un pin digitalSintaxis digitalRead(pin)Parámetros Pin Int

Ing. Ronald N. Kopp Página 17

Page 18: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Una vez que el Arduino ha leído la entrada, se debe hacer que imprima esta información a la computadora como un valor decimal. Para hacer esto utilizamos el comando Serial.println() en nuestra última línea de código:Serial.println (sensorValue);Ahora, cuando se abra el monitor serial en el entorno Arduino, se verá una corriente de "0"s si su interruptor está abierto, o "1"s si su interruptor está cerrado.

// el Pin digital 2 tiene un pulsador unido a él. Le daremos un nombre:int pushButton = 2;

// el setup se ejecuta de rutina una vez cuando se presiona RESET o se enciende la placa: void setup() {// comienza la comunicación serial a 9600 bits por segundo: Serial.begin(9600);// inicializamos alpulsador como una entrada: pinMode(pushButton, INPUT);}

// la rutina loop se ejecuta una y otra vez por siempre:void loop() {// leemos el pin de entrada: int buttonState = digitalRead(pushButton);// imprimimos el estado del botón: Serial.println(buttonState); delay(1); // retraso entre las lectura para la estabilidad}

Patas del usb

Ing. Ronald N. Kopp Página 18

Page 19: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Ing. Ronald N. Kopp Página 19

Page 20: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

4. AnalogRead Serial: Lectura analógica serial

En este ejemplo se muestra cómo leer una entrada analógica del mundo físico mediante un potenciómetro. Un potenciómetro es un dispositivo mecánico simple que proporciona una cantidad variable de resistencia cuando su eje se gira. Con el paso de tensión a través de un potenciómetro y a través de una entrada analógica del Arduino, es posible medir el valor de resistencia producida por un potenciómetro (o un pot para abreviar) como un valor analógico. En este ejemplo nosotros queremos monitorear el estado de nuestro potenciómetro estableciendo una comunicación serie entre el Arduino y el ordenador.

Hardware Required ArduinoBoard 10-kilohm Potentiometer

Circuit

Ing. Ronald N. Kopp Página 20

Page 21: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Conectamos los tres cables del potenciómetro a la placa Arduino. La primera de las patas exteriores del potenciómetro va a tierra. La otra pata exterior va a los 5 voltios. Y la pata del medio, va a la entrada analógica 0.

Al girar el eje del potenciómetro, cambia la cantidad de resistencia a cada lado de las escobillas que están conectado al terminal central del potenciómetro. Esto cambia el voltaje en el terminal central. Cuando la resistencia entre el centro y el lado conectado a 5 voltios es cercana a cero (y la resistencia en el otro lado es cerca de 10 kiloohmios), el voltaje en el terminal central se acerca a 5 voltios. Cuando las resistencias se invierten, la tensión en el terminal central se acerca a 0 voltios, o tierra. Este voltaje es el voltaje analógico que se está leyendo como una entrada.

Ing. Ronald N. Kopp Página 21

Page 22: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

El Arduino tiene un circuito en el interior llamado “convertidor analógico-digital” que lee éste cambio de voltaje y lo convierte a un número entre 0 y 1023. Cuando el eje se gira todo el recorrido en una dirección, hay 0 voltios que van al pin, y el valor de entrada es 0. Cuando el eje se gira todo el recorrido en la dirección opuesta, hay 5 voltios que van al pin y el valor de entrada es 1023. En el medio, analogRead() devuelve un número entre 0 y 1023 que es proporcional a la cantidad de voltaje que se aplica al pin.

Schematic

Ing. Ronald N. Kopp Página 22

Page 23: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Code

Ing. Ronald N. Kopp Página 23

Page 24: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

En el siguiente programa, lo primero que haremos en la función de configuración, es comenzar la comunicación serie, en 9600 bits de datos por segundo, entre el Arduino y el ordenador con el comando: Serial.begin(9600);

A continuación, en el bucle principal de nuestro código, es necesario establecer una variable para almacenar el valor de la resistencia (que estará entre 0 y 1023, perfecto par un tipo de dato entero) que viene desde nuestro potenciómetro:int sensorValue = analogRead(A0);

Nombre analogRead()Ejemplo int inpin = 0;

int val = 0;

void setup() { Serial.begin(9600);}

void loop() { val = analogRead(inpin); // lee el valor de entrada del pin análogo 0 Serial.println(val); // escribe el valor al puerto serial

Descripción El comando analogRead() lee el valor de un pin análogo. Los valores posibles están en el rango 0-1023, donde 0 es 0 voltios y 1023 es 5 voltios.

Sintaxis analogRead(pin)Parámetro Pin Int: número del pin análogo que se quiere leer

Por último, es necesario imprimir esta información para que el monitor serial lo muestre como un valor decimal(DEC). Nosotros haremos esto con el comando Serial.println() con la línea de código: Serial.println (sensorValue, DEC)

Ahora, cuando se abre el monitor de serial en el entorno de desarrollo Arduino, debería verse un flujo constante de números que van desde 0 hasta 1023, en correlación con la posición del potenciómetro. A medida que gira el potenciómetro, estas cifras responden casi al instante.

// el setup se ejecuta de rutina una vez cuando se presiona RESET o se enciende la placa: void setup() {// comienza la comunicación serial a 9600 bits por segundo: Serial.begin(9600);}

// la rutina loop se ejecuta una y otra vez por siempre:void loop() {

// lee el valor de entrada del pin analógico 0: int sensorValue = analogRead(A0);

Ing. Ronald N. Kopp Página 24

Page 25: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

// imprime el valor que se lee: Serial.println(sensorValue); delay(1); // Retraso entre las lectura para la estabilidad (el punto y coma cierra la sentencia)}

Ing. Ronald N. Kopp Página 25

Page 26: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

5. Fading : disminución temporal de la intensidad de las señales radio eléctricas.

Este ejemplo de muestra el uso de la función analogWrite() en la decoloración de un LED apagándolo y encendiéndolo. AnalogWrite() utiliza la modulación mediante pulsos (PWM), incrementando o decrementando la señal de salida mediante pequeños intervalos, para crear un efecto de iluminación o atenuación.

Hardware Required Arduinoboard Breadboard a LED a 220 ohm resistor

CircuitConectamos el ánodo (la pata más larga, positivo) de nuestro LED al pin de salida digital 9 en nuestro Arduino a través de una resistencia de 220 ohmios. Y Conectamos el cátodo (la pata más corta, negativo) directamente a tierra.

Ing. Ronald N. Kopp Página 26

Page 27: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Schematic

Ing. Ronald N. Kopp Página 27

Page 28: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

CodeDespués de configurar el pin 9 como una salida, no hay nada más quehacer en el comando setup () de nuestro código. pinMode(led, OUTPUT);

La función analogWrite() que se va a utilizar en el bucle principal de nuestro código requiere dos argumentos: Aquel que le diga a la función en que pin va a escribir, y uno que le indique cuál es el valor de PWM que debe escribir.analogWrite(led, brightness); Nombre analogWrite()Ejemplo int outpin = 29;

int val = 0;

void setup() {}

void loop() { analogWrite(outpin, val); // escribe un valor en el pin 29 PWM val = (val + 10) % 255; // incrementa el valor y lo mantiene en el rango 0-255}

Descripción El comando analogWrite() asigna un valor en el pin de salida PWM. Los valores posibles por defecto están en el rango de 0-255 (ver el comando setPWMResolution()). Nota: analogWrite es un alias para el comando PWMWrite(). Usar analogWrite() en un pin sin capacidad PWM hace que el pin sea colocado en HIGH sin ningún otro efecto.

Sintaxis analogWrite(pin, valor)Parámetro Pin Int: el número del pin de salida PWM

Valor Int: un valor en el rango de 0 - 255

Con el fin de atenuar el LED apagándolo y encendiéndolo, aumentamos gradualmente su valor PWM de 0 (completamente apagado) a 255 (completamente encendidos) y, a continuación, de nuevo a 0 una vez más para completar el ciclo. En el boceto de abajo, el valor PWM se ajusta mediante una variable llamada brightness. Cada vez que pasa a través del bucle, aumenta el valor de la variable en fadeAmount.brightness = brightness + fadeAmount;int fadeAmont = 5

Si el brillo llega a los extremos en cualquiera de sus valores (0 ó 255), entonces fadeAmount se cambia a negativo. En otras palabras, si fadeAmount es 5, cuando brightness llegue a 255 fadeAmountse se establecerá en -5. Esto hará que vaya disminuyendo la intensidad en escalones de 5, hasta llegar a 0. Al llegar a este valor fadeAmount cambiará nuevamente de -5 a 5 y esto hará que vaya aumentando en escalones de 5 hasta llegar a 255. Como vemos el brillo no solo cambia de atenuación sino también de dirección.

Ing. Ronald N. Kopp Página 28

Page 29: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

if (brightness == 0 || brightness == 255) {fadeAmount = -fadeAmount ;} ;

Nombre if()Ejemplo true || false // Evalúa verdadero porque el primero es verdadero

false || true // Evalúa verdadero porque el segundo es verdaderotrue || true // Evalúa verdadero porque ambas son verdaderofalse || false // Evalúa falso porque ambas son falso

Descripción Permite al programa tomar una decisión sobre que bloque de código ejecutar. Si la expresión evalúa true, las instrucciones encerradas en bloque son ejecutadas y si la expresión evalúa false las instrucciones no son ejecutada

Sintaxis if (expresión) { declaraciones }

Parámetro Expresión Cualquier expresión que evalúe true o false

Declaración Una o más instrucciones para ser ejecutadas

Nombre == (equality)Ejemplo int a = 23;

int b = 23;if (a == b) { Serial.print("las variables a y b son iguales");}

Descripción Determina si dos valores son equivalentes. El operador de igualdad es diferente del operador de asignación

Sintaxis valor1 == valor2Parámetro Valor1 int, float, char, byte, boolean

Valor2 int, float, char, byte, boolean

Nombre || (logical OR)Ejemplo true || false // Evalúa verdadero porque el primero es verdadero

false || true // Evalúa verdadero porque el segundo es verdaderotrue || true // Evalúa verdadero porque ambas son verdaderofalse || false // Evalúa falso porque ambas son falso

Descripción Permite al programa tomar una decisión sobre que bloque de código ejecutar. Si la expresión evalúa true, las instrucciones encerradas en bloque son ejecutadas y si la expresión evalúa false las instrucciones no son ejecutada

Sintaxis expresión1 || expresión2Parámetro Expresión 1 Cualquier expresión válida

Expresión 2 Cualquier expresión válida

Como vemos el brillo no solo cambia de atenuación sino también de dirección.

Ing. Ronald N. Kopp Página 29

Page 30: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

analogWrite() permite cambiar el valor PWM muy fácilmente, por que el retraso (dalay) al final del boceto controla la velocidad de atenuación (fade). Intentemos cambiar el valor de demora (dalay) y ver cómo cambia el programa.delay(30);

int led = 9; // el pin que el LED está conectadoint brightness = 0; // lo brillante que esta el LEDint fadeAmount = 5; // cuantos escalones se desvanecerá el LED por vez

// el setup se ejecuta de rutina una vez cuando se presiona RESET o se enciende la placa: void setup() { // inicializamos el pin 9 como una salida: pinMode(led, OUTPUT);}

// la rutina loop se ejecuta una y otra vez por siempre:void loop() { // escribimos el valor de la variable brightness en el pin 9: analogWrite(led, brightness);

// cambiamos el brillo para la próxima vez que se traviese el bucle: brightness = brightness + fadeAmount;

// invertimos la dirección de la decoloración en los extremos de la atenuación: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; }

// Esperarmos 30 milisegundos para ver el efecto de atenuación delay(30); }

Ing. Ronald N. Kopp Página 30

Page 31: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

6. Analog Read Voltage: lectura analógica de tensión

En este ejemplo se muestra cómo leer una entrada analógica sobre el pin 0, convertir los valores de analogRead() en tensión, e imprimirlo en el monitor serial.

Hardware Required ArduinoBoard a variable resistor, like a potentiometer

Circuit

Conectamos los tres cables del potenciómetro a la placa Arduino. La primera de las patas exteriores del potenciómetro va a tierra. La otra pata exterior va a los 5 voltios. Y la pata del medio, va a la entrada analógica A0.

Al girar el eje del potenciómetro, cambia la cantidad de resistencia a cada lado de la escobilla que está conectado al terminal central del potenciómetro. Esto cambia el voltaje en el terminal central. Cuando la resistencia entre el centro y el lado conectado a 5 voltios es cercana a cero (y la resistencia en el otro lado está cerca de 10 kiloohmios), el voltaje en el terminal central se acerca a 5 voltios. Cuando las resistencias se invierten, la tensión en el terminal central se acerca a 0 voltios, o tierra. Este voltaje es el voltaje analógico que se está leyendo como una entrada.

El Arduino tiene un circuito en el interior llamado “convertidor analógico-digital” que lee este cambio voltaje y lo convierte a un número entre 0 y 1023. Cuando el eje gira todo el recorrido en una dirección, hay 0 voltios que van al pin 0, y el valor de entrada es 0. Cuando el eje gira todo el recorrido en la dirección opuesta, hay 5 voltios que van al pin 0 y el valor de entrada es 1023. En el

Ing. Ronald N. Kopp Página 31

Page 32: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

medio, analogRead() devuelve un número entre 0 y 1023 que es proporcional a la cantidad de voltaje que se aplica al pin.

Schematic

Ing. Ronald N. Kopp Página 32

Page 33: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

CodeEn el siguiente programa, lo único que haremos en la función de configuración, es comenzarla comunicación serie, en 9600 bits de datos por segundo, entre el Arduino y el ordenador con el comando: Serial.begin(9600);

A continuación, en el bucle principal de nuestro código, es necesario establecer una variable para almacenar el valor de la resistencia (que estará entre 0 y 1023, perfecto par un tipo de dato entero) que viene desde nuestro potenciómetro:int sensorValue = analogRead(A0);

Para cambiar los valores de 0 a 1023 en un rango que corresponda a la tensión que la clavija está leyendo, tendremos que crear otra variable, un float, y hacer un poco de matemáticas. Para crear un factor de escala entre 0,0 y 5,0, dividimos 5,0 por 1023,0 y luego lo multiplicamos por sensorValue:float voltage = sensorValue * (5.0 / 1023.0);

Nombre floatEjemplo float a; // Declara la variable "a" de tipo float

a = 1.5387; // Asigna a "a" el valor 1.5387float b = -2.984; // Declara la variable "b" y le asigna el valor -2.984float c = a + b; // Declara la variable "c" y le asigna la suma de "a" y "b"

Descripción Tipo de datos para números de punto flotante, un número que tiene un punto decimal. Los números de punto flotante son usados frecuentemente para aproximar valores análogos y continuos porque tienen más resolución que los enteros. Los números de tipo float pueden ser tan grandes como 3.4028235E+38 y tan pequeños como -3.4028235E+38. Estos son almacenados como 32 bits (4 bytes) de información

Sintaxis float varfloat var = valor

Parámetro Var Nombre de variable referenciada al número de punto flotante

Valor cualquier valor de punto flotante

Por último, es necesario imprimir esta información para que el monitor serial lo muestre como un valor decimal (DEC). Nosotros haremos esto con el comando Serial.println() con la línea de código: Serial.println(voltage)

Ahora, cuando abrimos el monitor serial en el entorno Arduino, deberíamos ver un flujo constante de números que van desde 0,0 hasta 5,0. A medida que se gira el potenciómetro, esto corresponderá a la tensión de entrada en el pin A0.

Ing. Ronald N. Kopp Página 33

Page 34: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

// el setup se ejecuta de rutina una vez cuando se presiona RESET o se enciende la placa: void setup() {// comienza la comunicación serial a 9600 bits por segundo: Serial.begin(9600);}

// la rutina lopp se ejecuta una y otra vez por siempre:void loop() {

// leeos la entrada del pin analógico 0 y lo almacenamos en la variable sensorValue: int sensorValue = analogRead(A0);// convertirmos la lectura analógica (que va desde 0 hasta 1023) en un voltaje (0 - 5V): float voltage = sensorValue * (5.0 / 1023.0);// imprimimos el valor que se leer: Serial.println(voltage);}

Ing. Ronald N. Kopp Página 34

Page 35: Apunte de Arduino Hecho Por Ronald Parte 1

Arduino

Ing. Ronald N. Kopp Página 35