Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Uso de las entradas analógicas de Arduino

Por Félix Maocho
16/12/2015

Objetivo de este post

Repaso de los pin analógicos de Arduino, utilizados como sistema  de medir la intensidad de las señales que recibe Arduino de los sensores.

Los sensores se especializan en detectar alguna característica del mundo real, calor, sonido, luminosidad, peso, distancia, etc. y generan una corriente eléctrica de un voltaje proporcional al la intensidad de la característica que exploran. El dato de su lectura a través de los pin analógico, puede ser utilizado en el software para actuar según convenga. También se repasan algunas de las instrucciones o mandatos más habituales.

Para las prácticas de este post se necesita la tarjeta controladora Arduino, la tarjeta de prototipado protoboard, un PC ,el cable de conexión a Arduino, diez  led del mismo color, once  resistencias de 220 homios, un potenciometro, así como buen numero de cables de conexión , (macho/macho si se trabaja con tarjetas protoboard).

Párrafo para inexpertos , (puedes saltarlo si eres íntimamente usuario de Arduino)

El mundo real rara vez se puede definir con posturas extremas de si o no, las cosas no son blanco o negro. están secas o mojadas, brillantes o obscuras, calientes o frías, lo habitual es que entre ambos valores extremos haya todo un abanico de posibilidades intermedias, grises, húmedas, luminosas, templadas. Por tanto, si deseamos que Arduino reciba una información correcta de la realidad, tendermos que tener un sistema de información que sea algo más de HIGH o LOW, 0 ó 1, que son los únicos valores proporcionados por las entradas digitales. Para eso es para lo que Arduino tiene son las entradas digital, para recibir la información del mundo exterior, en una abanico de posibilidades intermedias entre dos estados posibles.

Entradas analógicas

En la imagen de entrada se encuentran en el borde inferior derecho de la tarjeta Arduino, en Arduino UNO son seis y vienen marcadas de A0 a A5. A semejanza de las digitales, captan un voltaje de una circuito, lo transforman en un número y lo traspasan a una variable, que puede utilizarse posteriormente en el software para actuar como sea conveniente.

Para las practicas, también utilizaremos alguna entradas y salidas no programables es decir que siempre y en cualquier caso actúan de la misma forma, como la 5V que cede siempre una corriente a 5 voltios y la GND que siempre funciona como tierra. Por último practicarmos con l el pin AREF que permite tener un voltaje de referencia para hacer comparaciones.

Lo primero que hay que tener en cuenta es que mientras los pin digitales pueden actuar como de salida (OUPUT) o de entrada (INPUT), los pin analógicos solo pueden actuar como de entrada (INPUT) La tarjeta Arduino UNO no está diseñada para permitir salidas con voltajes entre Ov y 5v lo mas que puede, (como vimos en el capítulo dedicado a los pins digitales), es enviar señales moduladas no en el voltaje, sino en el tiempo, a través de los pin con posibilidades PWM (puelse width modulation) o en castellano pines con modulación.

Por tanto, si deseamos hacer lecturas analógicas utilizaremos los pines analógicos (marcados de A1 a A5), pero si deseamos generar respuestas analógicas, lo más similar a ello que podeos producir son los impulsos modulados de pina PWM (generalmente en Arduino UNO los pines 3, 5, 6, 9, 10 y 11)

Las entradas analógicas tienen un funcionamiento muy parecido a las entradas digitales, por lo que en la práctica tanto el montaje como el código en el software es muy similar, la única gran diferencia es que la respuesta no se reduce a HIGH y LOW, sino a valores comprendidos entre 0 y 1024 según la intensidad del voltaje que detecten. Por tanto, es de aplicación la mayoría de lo que vimos en esta entrada. Sin embargo en ciertos aspectos son radicalmente distintos, por lo que para entender correctamente su uso y funcionalidad es necesario veamos un mínimo de teoría.

Hay que comprender que los valores HIGH y LOW no se corresponden a voltajes de 5V y 0V sino que loss pin digitales si el voltaje supera un determinado voltaje umbral responden HIGH y si no se llega a ese voltaje umbral responde LOW. Es decir la entrada digital hace una lectura un tanto burda de la realidad o con palabras mas técnica una lectura de muy poco precisión. Las entradas analógicas son más sofisticadas y dan una respuesta variada según el voltaje que detectan, en una palabra son más precisas,

¿Cuanto más precisas?v- Pues la señal entre los extremos puede tener 1024 niveles diferentes. O sea que para entendernos podremos ver el mundo con una precisión de una escala de 1024 niveles de gris, lo cual es bastante alta, y suficiente para la mayoría de los casos.

Por dar una idea de la precisión de la que hablamos, supongamos que estamos monitorizando la temperatura de enfermo con un termómetro médico tradicional que mide un rango de temperaturas entre 34º y lo 44º, de forma que a los 34º  emite un voltaje de 0v y a los 44º un voltaje de 5v, el sistema no tendría dificultad de detectar una precisión de una centésima de grado, o sea 10 veces mas precisión que la del típico termómetro médico, en el que solo se detectan las décimas.

Por tanto suponiendo que tengamos sensores de la suficiente calidad, no deberemos tener problema con la precisión que detectan las entradas analógicas y la realidadm es que lo difícil, (y caro) es tener sensores del tipo que sea, capaces de dar 1024 respuestas diferentes en función del estímulo recibido..

¿Por qué 1024 respuestas?

Nuevamente volvemos a encontrar una potencia de 2, el número 1024 en un procedo digital, como ya indicamos en el post “Utilizar los pin digitales como salida de corriente a un circuito” , la razón de este uso es que son las máximas cifras que se pueden acumular en “palabras” digitales de determinado tamaño en este caso de 10 bits

1023=1+2+4+8+16+32+64+124+248+596

más el valor de cero, equivalente a 10 ceros seguidos.

Así pues, ssupongamos que tenemos un aparato que en función de un estímulo externo nos manda una señal entre 0v y 5v lo que quiere decir que cada peldaño de la señal que queremos medir tendrá una “altura” equivalente a 5 voltios de diferencia divididos en 1024 peldaños, es decir aproximadamente 0,005 voltios o cinco milésimas de voltio.

¿Como se utiliza esa señal dentro del programa?

Vamos a hacer un proyecto muy sencillo. Pondremos en un circuito una resistencia variable y en función del voltaje que deje pasar encenderemos más o menos leds. La proporción sera un led por cada o,5 volios de modo que tendremos de 0 a 10 leds encendidos según el voltaje asea de o a 5 voltios , por cada voltio dos bombillas encendidas.

Veamos el circuito

Pin analógico

El potenciómetro lleva en su interior una resistencia variable, según gires el mando la resistencia aumenta o decrece. Generalmente tiene tres patas, una pata lateral se conecta a 5V. la central es la que produce una salida de voltaje variable que en nuestro caso llevamos el pin analógico A0 para u su análisis y la otra pata exterior se conecta a tierra (GND). Girando el potenciómetro el voltaje de la corriente que sale dpor el cable del centrod  aumente o decrece.

Incluimos una resistencia de 220 Ω al la salida de 5V para que en el caso que la resistencia del potenciómetro pase a cero no se produzca un cortocircuito entre 5V y GND (tierra).

De los pines digitales 2 a 11, (el o y 1 están reservados para otros usos de los que hablaré en otro post),  parten diez circuitos iguales, que primero pasan, como es costumbre, por una resistencia de 220 Ω para evitar cortocircuitos y luego conectan con el ánodo de un led cuyo cátodo esta conectado con el bus azul que se encuera vertical en el lado izquierdo del la tarjeta protoboard que a su ve está conectado con la entrada GND (tierra) que tiene la tarjeta en el lado superior.

En cada vuelta (loop) del programa hará lo siguiente:

  • 1º) lee el voltaje de el circuito
  • 2º) por cada o,5 v  enciende una luz. Como 5 voltios correponden a 1024 unidades, 5,0 son aprox 100
  • 3º) espera un segundo
  • 4ª) Apaga los leed que hubiera encendidos y repite el proceso.

/*
Prueba de pin Analógico
Voltímetro. Cada led encendido equivale a 0,5 volts
por el circuito que contiene el potenciómetro
Este ejemplo es de dominio público
*/

// Declaración de variables
int tension =0; // variable que almacena el voltaje (de 0 a 1023)
espera1 =1000; // milisegundos de espera para dar tiempo a hacer la lectura
// indicadores de estado de los Led 0=apagado 1=encendido
int encendido2 =0;
int encendido3 =0;
int encendido4 =0;
int encendido5 =0;
int encendido6 =0;
int encendido7 =0;
int encendido8 =0;
int encendido9 =0;
int encendido10 =0;
int encendido11 =0;

void setup() {
// incializa los pines 2 a 11 como OUTPUT
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}

void loop() {
tension = analogRead(A0); // 1º) realizar la lectura por el pin A0
// 2º) Encender un led por cada 100 unidades de tension
if tension > 100 { // si es mayor que 100 (0.5v)
digitalWrite(2, HIGH);
encendido2 =1; // led del pin2 como encendido
}
if tension > 200 {
digitalWrite(3, HIGH);
encendido3 =1;
}
if tension > 300 {
digitalWrite(4, HIGH);
encendido4 =1;
}
if tension > 400 {
digitalWrite(5, HIGH);
encendido5 =1;
}
if tension > 500 {
digitalWrite(9, HIGH);
encendido9 =1;
}
if tension > 900 {
digitalWrite(10, HIGH);
encendido10 =1;
}
if tension > 1000 {
digitalWrite(11, HIGH);
encendido8 =11;
}
// Acabados de encender los led que marcan cada uno 0,5v

delay(espera1); // 3º) esperar para que se capte la lectura
// 4º) Apagar los led encendidos
if encendido2 =1; // si esta encendido el led 2, lo apagamos
digitalWrite(2, LOW);
encendido2 =0; // ponemos el indicador en apagado
}
if encendido3 =1;
digitalWrite(3, LOW);
encendido3 =0;
}
if encendido4 =1;
digitalWrite(4, LOW);
encendido4 =0;
}
if encendido5 =1;
digitalWrite(5, LOW);
encendido5 =0;
}
if encendido6 =1;
digitalWrite(6, LOW);
encendido6 =0;
}
if encendido7 =1;
digitalWrite(7, LOW);
encendido7 =0;
}
if encendido8 =1;
digitalWrite(8, LOW);
encendido8 =0;
}
if encendido9 =1;
digitalWrite(9, LOW);
encendido9 =0;
}
if encendido10 =1;
digitalWrite(10, LOW);
encendido10 =0;
}
if encendido11 =1;
digitalWrite(11, LOW);
encendido11 =0;
}

} // Fin de la funcion loop

Observen

  • No hemos definido el uso del pin A0 porque ya viene definido como entrada de fábrica, no puede ser otra cosa.
  • Tampoco defino en este caso variables con el numero de pin digital que se utilizara como OUPUT pues utilizando casi todos igual no tiene mucho sentido. Como dije anteriormente no es necesario hacerlo, aunque generalmente es cómodo, en este caso vean que al definirlos como OUPUT, les llamamos directamente a cada pin por su número. El hacerlo indirectamente a través de una variable vale para corregir el programa rápidamente si a la hora de montar el Hardware nos resulta más cómodo cambiar el pin inicialmente previsto.
  • Hemos definido unas variables que nos indiquen si están encendidos o apagados cada led, para evitar en sucesivos ciclos hacerlo cuando ya están encendidos o apagados, pero no es imprescindible, pues si mandamos apagar algo ya apagado, o encender algo ya encendido no ocurrirá nada.
  • Lo último que hacemos al acabar un loop, es volver a dejar todo como nos lo encontramos al empezar de modo que cada loop funciona igual que cuando empezamos, si no borraramos los led estos se quedarían encendidos y el resto de las lecturas darían lugar a confusión pues guardaríamos la lectura más alta realizada. Esto es muy habitual en programación ygual que suele haber casas especiales all empezar suele haberlas al finalizar
  • Aunque el voltímetro funciona perfectamente nunca se encienderán todos los led en su totalidad, aun reduciendo al mínimo el potenciómetro. Es debido a que la resistencia de seguridad limita el voltaje que entra en el potenciómetro, de modo que ya no le llegue a los 5v sino a menos, por tanto después de salir del potenciómetro, nunca puede marcar 5v sino necesariamente menos. Eso quiere decir que parte de el aparato que hemos construido no se va a utilizar nunca, porque nunca el voltaje llegara a ser el suficiente para hacer encenderse los led.

Cómo mejorar la precisión de la lectura 

Tal como está ahora el circuito, una parte de los 1024 niveles que da la máquina no se usaran nunca por que el voltaje no va a ser nunca el suficiente. Eso pasa con todos los sensores que podamos imaginar, todos dan un voltaje que varia desde cero, cuando no detectan a un máximo, que dependiendo del aparato y de la medida que realicen, estára en un voltaje o otro, unos se quedan necesariamente por debajo de lo que podemos leer (5v) y desperdiciamos parte de sus posibilidades, como en nuestro caso, mientras que otros sensores, sometidos a estímulos suficientemente fuertes, puede que emitan voltajes superiores a 5v, con lo que, por un lado se nos salen de rango de lo que Arduino puede medir, y por otro, pueden llegar a dañar nuestra tarjeta al someterla a un sobrevoltaje, (Arduino UNO no aguanta mas de 7 volts) . Veamos como se actúa en uno y otro caso.

Si sabemos que la señal que leemos no pasa de determinado voltaje

En el primer caso, cuando el voltaje máximo está garantizado que no pasa de un determinado nivel, por ejemplo 4v, la cosa es fácil, basta con que disminuyamos la altura de cada peldaño, Por ejemplo en nuestro caso, henos usados usado 10 peldaños de 0,5v, lo que nos daba un contador que iba de 0 a 5v, pero si hacemos peldaños de 0,4v, los diez peldaños cubrirán el rango que podemos tener de 0 a 4v con mayor precisión. Una simple regla de tres, nos dará la altura del nuebo peldaño, si 0,5v son (aproximadamente) 100 unidades, 0,4v seran ((4×100)/5)=80

Por tanto,en el programa haremos que  el 1ª led se encenderá si supera 80, el 2ª  si supera 160, el 3ª, 240…. y la 10ª, 400.  Supongamos que tenemos que la tensión leida es de de 2,6v. Con el voltimetro que hemos hecho, se encenderán 5 leds y nos informaría que el voltaje está entre, 2,5v y 3v, con un error máximo de 0,25v. Con el nuevo sistema de peldaños mas bajos, al hacer las pruebas se encenderían 6 leds, que informan que el voltaje esta comprendido entre, 2,4v y 2,8v con un error máximo de 0,2 volts. Es decir, tendríamos un voltímetro de más calidad.

Claro esta que también otra forma de aumentar la precisión es aumentar el número de peldaños y darlos menor tamaño. Por ejemplo queremos leer con una precisión de 2 decimas en un rango de 0v a 5v es decir queremos lecturas que sepan diferenciar entre los 2,1v y los 2,2v.Haremos que cada 20 unidades se correspondan con 0,1 voltios de modo que 1000 unidades son (1000/20) = 5,0 voltios.

Como solo tenemos 10 leds daremos la lectura dividida en dos tandas siguiendo el sistema decimal, la primera lectura da los enteros y la segunda la parte decimal de modo que sii quetemos iindcar un voltaje de 2,4 volts primero encendemos s led y seguidamente 4 led,

Asi pues dejamos el hardware sin cambios pero el programa cambiará al que sigue:

 

En cada vuelta (loop) del programa

  • 1º) Lee el voltaje de el circuito
  • 2º) Separa la parte entera y la decimal, Si ha leído, 2,5 volts separa el 2 del 5
  • 3º) Enciende los leeds que indique la parte entera (en nuestro ejemplo 2)
  • 4º) Espera un segundo
  • 5ª) Apaga los leed que hubiera encendido
  • 6º) Enciende los leeds que indique la parte decimal (en nuestro ejemplo 5)
  • 7º) Espera un segundo
  • 8ª) Apaga los leed que hubiera encendidos y repite el proceso
  • 9º) Espera tres segundo  para separar esta lectura de la siguiente

/*
Prueba de pin Analógico 2
Voltímetro mejorado, Lectura del voltaje en dos tandas
primera enteros segunda decimales error menor de 0,1 volt
Este ejemplo es de dominio público
*/

// Declaración de variables
int tension =0; // variable que almacena el voltaje ( de 0 a 1023)
voltaje =0; // variab¡le que almacena el voltaje proporcional a la tensión
entero =0; // variable que conserva la parte entera del voltaje de 0 a 4
decimal=0; // variable que conserva la parte decinal del voltaje de 0 a 9
espera1 =1000; // 1 segundos de espera para dar tiempo a hacer la lectura
espera3 =3000; // 3 segundos de espera para dar tiempo a separar dos lecturas

// indicadores de estado de los Led 0=apagado 1=encendido
int encendido2 =0;
int encendido3 =0;
int encendido4 =0;
int encendido5 =0;
int encendido6 =0;
int encendido7 =0;
int encendido8 =0;
int encendido9 =0;
int encendido10 =0;
int encendido11 =0;

void setup() {
// incializa los pines 2 a 11 como OUTPUT
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}

void loop() {
// 1º) Lee el voltaje de el circuito
tension = analogRead(A0); // realizar la lectura por el pin A0
voltaje = tension /20 // por cada 20 pasos es un voltaje de 0,1 volt

// 2º) Separa la parte entera y la decimal
entero = voltaje/10 // calculamos la parte entera del voltaje
decimal = voltaje – (entero*10) // restamos las decenas

// 3º) Enciende los leeds que indique la parte entera
if entero = 1 { // si era más de un voltio
digitalWrite(2, HIGH);
encendido2 =1;
}
if entero = 2 {
digitalWrite(3, HIGH);
encendido2 =1;
}
if entero = 3 {
digitalWrite(4, HIGH);
encendido4 =1;
}
if entero = 4 {
digitalWrite(5, HIGH);
encendido5 =1;
}

delay(espera1); // 4º) Espera un segundo

// 5ª) Apaga los leed que hubiera encendido
if encendido2 =1; // si esta encendido el led 2, lo apagamos
digitalWrite(2, LOW);
encendido2 =0;
}
if encendido3 =1;
digitalWrite(3, LOW);
encendido3 =0;
}
if encendido4 =1;
digitalWrite(4, LOW);
encendido4 =0;
}
if encendido5 =1;
digitalWrite(5, LOW);
encendido5 =0;
}

// 6º) Enciende los leeds que indique la parte decimal
if decimal = 1 { // si era más de 1 décima de voltio
digitalWrite(2, HIGH);
encendido2 =1;
}
if decimal = 2 {
digitalWrite(3, HIGH);
encendido3 =1;
}
if decimal = 3 {
digitalWrite(4, HIGH);
encendido4 =1;
}
if decimal = 4 {
digitalWrite(5, HIGH);
encendido5 =1;
}
if decimal = 5 {
digitalWrite(6, HIGH);
encendido6 =1;
}
if decimal = 6 {
digitalWrite(7, HIGH);
encendido7 =1;
}
if decimal = 7 {
digitalWrite(8, HIGH);
encendido8 =1;
}
if decimal = 8 {
digitalWrite(9, HIGH);
encendido9 =1;
}
if decimal = 9 {
digitalWrite(10, HIGH);
encendido10 =1;
}

// 7º) Espera 1 segundo
delay(espera1); // procedemos a esperar a que se capte la lectura

// 8ª) Apaga los leed que hubiera encendidos
if encendido2 =1; // si esta encendido el led 2, lo apagamos
digitalWrite(2, LOW);
encendido2 =0; // ponemos el indicador en apagado
}
if encendido3 =1;
digitalWrite(3, LOW);
encendido3 =0;
}
if encendido4 =1;
digitalWrite(4, LOW);
encendido4 =0;
}
if encendido5 =1;
digitalWrite(5, LOW);
encendido5 =0;
}
if encendido6 =1;
digitalWrite(6, LOW);
encendido6 =0;
}
if encendido7 =1;
digitalWrite(7, LOW);
encendido7 =0;
}
if encendido8 =1;
digitalWrite(8, LOW);
encendido8 =0;
}
if encendido9 =1;
digitalWrite(9, LOW);
encendido9 =0;
}
if encendido10 =1;
digitalWrite(10, LOW);
encendido10 =0;
}
if encendido11 =1;
digitalWrite(11, LOW);
encendido11 =0;
}
delay(espera3); // 9º) Espera 3 para separar la siguiente lectura
} // Fin de la funcion loop

Observen

  • Un mismo Hardware puede ser utilizado de diferente forma, con solo cambiar el software que le controla. Cuando esto se puede hacer a distancia, hablamos de “cambiar el firmware”. Normalmente se hace a través de Internet. Así, actualiza el sistema operativo Microsoft, o las compañías telefónicas los “smartphone”, mecánicamente el aparato es el mismo, pero su funcionamiento cambia radicalmente. Como en el futuro, más y más máquinas estarán conectadas a Internet, (por el Internet de las cosas), no sera extraño que directamente el fabricante de la nevera, o de la lavadora, nos cambie el programa de “nuestro” electrodoméstico, para, (se supone), mejorar su funcionamiento, con el fines como el ahorrar energía o dar nuevas prestaciones a los equipos.
  • En este ejemplo el Led gobernado por el pin 11 no puede tener oportunidad de encenderse, porque los enteros no pasan de 5 y el numero más alto de decimales es el 9, pero aclara el entender que se trata de un contador el mantener diez luces aunque la décimo no se enciende nunca.
  • Se hace prácticamente la misma acción, encender o apagar un leed, repetidas veces, en su momento aprenderemos a construir funciones, (que por ejemplo se llamaran “enceder_led(3)”, siendo tres el parámetro), que actúan de forma ligeramente diferente con solo cambiar los parámetros con que se llama la función. Esto simplifica, tanto la compresión del programa como su puesta a punto, pues escrita la función sin errores para un determinado valor del parámetro. funcionara también bien con un valor diferente.

Qué hacer si sabemos que la señal que leemos supera los 5v

Todo lo que hemos visto son medios para conseguir tene lecturas de más precisión cuando el voltaje que nos manda el sensor no llega a los 5 v que luede admitir Arduino, pero como dijimos con  frecuencia ocurre lo contrario, que queremos detectar  el voltaje de un circuito que supera los 5v. Por decir un ejemplo queremos mandar una señal acústica cuando la tensión de una batería de automóvil de 12 voltios cae por debajo de cierto valor por ejemplo 8 voltios.  En este caso no podemosmedir directamente el circuito a 12v  porque nos destrozaría nuestra placa.

En ese caso Montaremos un circuito auxiliar parecido a este y de él tomaremos el voltaje, de modo que estemos seguros que nunca entrará en Arduino una lectura superior a 5 voltios.

Este montaje se llama Divisor de la Tensión El sensor esta en un circuito que está a 24 voltios como máximo, por lo que da lecturas de entrada en el Divisor de Tensión  pueden llegar a 24, más que suficiente para quemar nuetra placa, pero ahí una primera resistencia baja la tesion por debajo de los 5 voltios y de ahí sacamos nuestra derivación al pin de Arduino para su lectura, cuando baje la tension del punto donde nace nuestra derivación, bajara proporcionalmente l el valor de lectura y detectaremos que está bajando y si cesa l el voltaje tambien cesará en pin de lectura.

La segunda resistencia se une a tierra GND y solo tiene por objeto minimizar el consumo de electricidad que se pierde por hacer esta monitorizacion del circuito. Ambas resistencias deben ser adecuadas para permitir en el segmento del centro se alcancen voltajes próximos a 5 V como máximo y a la vez, que por el circuito que contiene las dos resistencias se pierda la menor cantidad de energía posible, Si operamos con voltajes hasta 24 voltios, podemos colocar do potenciómetros en sustitución de las resistencias, hasta conseguir que por el segmento que va a tierra el voltaje sea muy pequeño por ejemplo 1 voltio y que por el segmento intermedio pase un voltaje que como máximo es 5 voltios.

¡¡¡ Atención !!!.

Este sistema puede sser suficiente hasta voltajes de 35 voltios, si son mayores las resistencias no aguantan la intensidad de la corriente y se fundirán.

Con este sistema  y con la adecuación de los “escalones” de cada tramo de lectura, podemos obtener medidas que son normalmente suficientemente precisas para lo que nos propongamos.

Mandatos utilizados

Resumimos las funciones y mandatos  de Arduino que hemos utilizado. De no entender el funcionamiento o la sintaxis de alguna buscarla en el Manual en español en PDF

Documentación
Párrafo /* ………. */
Comentario // …………

Declaración de variables y parámetros
Declaración de numero entero int parva = valor

Ciclo de trabajo de Arduino
Función Setup que solo se ejecuta al incoo del programa void setup() { ……….}
Función Loop que se repite indefinidamente void loop() { ……………….}

Mandatos en la función setup
Definir pin como salida pinMode(salida, OUTPUT)

Mandatos en la función loop
Condicional if if variable = valor {….}
Abrir un pin digital digitalWrite(pin, HIGH);
Cerrar un pin digital digitalWrite(pin, LOW);
Leer analógicamte el voltaje de un circuito Variable = analogRead(Pinanalogico);
Pausa delay(tiempo);
Operar con variables
Cambiar el valor de una variable var = valor
Incrementar una viable var = var +1
Operaciones matemáticas con variables enteras y números enteros
voltaje = tension /20 // dividir
decimal = voltaje – (entero*10) // restar y multiplicar

Félix Maocho

 

 

Anuncios

16 diciembre 2015 - Posted by | General, Robotica | , , ,

2 comentarios »

  1. Simplemente comentar que el pin analógico A0 debe ir conectado a la toma central del potenciómetro. Gracias por el Blog.

    Comentario por José | 17 diciembre 2015 | Responder

    • Corregido el error.No tengo ni idea de donde busqué la documentación y debía ser la descripción un potencómetro raro. Doblemente agradecido, primero por leerme y luego, por tomarse la molestia de avisar de un error.

      Comentario por felixmaocho | 17 diciembre 2015 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: