Paso 11: Entradas analógicas y salidas.
Algunos de los pins de I/O de Arduino pueden también utilizarse como entradas y salidas, digitales para medir tensiones (entrada) o dim LED (salida) por ejemplo.
Entradas analógicas
Arduinos la mayoría tienen entre 6 y 12 pines de entrada analógicas. Puede medir tensión oscilan entre 0v y la tensión de entrada (5v o 3v3)
Un tablero, estos pernos están etiquetados A0-A5, y en el caso de Leonardo, algunos de los pines en el lado digital también pueden ser utilizados como entradas analógicas. Están marcadas con un punto y el nombre (A6-A11) está escrito en la parte posterior.
Tenga en cuenta que, leyendo una entrada analógica es (relativamente) lento, en comparación con lectura digitales pins. Esto es debido a que Arduino mide voltajes utilizando un generador de tensión de referencia interna (DAC, convertidor de Digital a analógico) y comparando el voltaje de entrada a la tensión de referencia a continuación, cambiar el voltaje de referencia, comparando una vez más, cambiar el voltaje de referencia, comparando... hasta que las dos tensiones son iguales. http://APCMAG.com/Arduino-Analog-to-digital-conver...
La resolución de la DAC interno es de 10 bits. Esto significa que el número máximo puede leer 10 pedacitos largos, o 210 = 1024, así que un número entre 0 (B0000000000) y 1023 (B1111111111). 1023 significa que la entrada es de 5v (o 3v3) y 0v 0 significa.
Potenciómetros
Un potenciómetro, resistencia variable o un pote para el cortocircuito, es sólo una perilla con un limpiador que se desliza sobre una tira circular de material resistente. Así, varía la resistencia entre el limpiaparabrisas y los extremos.
Vamos a conectar nuestros potenciómetros y faders como divisores de tensión simple. Puede leer más en esta página de Wikipedia si no estás familiarizado con este principio.
Si usted toma una mirada en el esquema, se pueden ver 2 resistencias. R1 es la resistencia entre el pin derecho del potenciómetro y el limpiador (patilla central) y R2 la resistencia entre el pin izquierdo y el limpiaparabrisas. Echa un vistazo a la fórmula así. Ya que nuestro potenciómetro fijo valor (50kΩ, por ejemplo), R1 + R2 siempre será 50kΩ, mientras que R2 puede variar entre 0Ω y 50kΩ. (Si R2 = 50k y R1 = 0 y viceversa) Por lo tanto, la fracción siempre tendrá como resultado un número entre 0 y 1. Multiplicar este cociente por 5V (Vsubin/sub), y obtendrá una tensión entre 0V y 5V en la salida. Este voltaje puede ser leído por el Arduino ADC (analógico al convertidor digital) y representa la posición del potenciómetro (o fundido). Así que, básicamente, conecte la clavija de la izquierda al suelo, el eje derecho a 5V pin en el Arduino y el pin del centro a una entrada analógica. (imagen 3)
Conecte un potenciómetro al pin A0 y abra el ejemplo AnalogReadSerial (archivo > ejemplos > 01.Basics).
La función sólo nueva es analogRead(pin). Es bastante explica por sí mismo, que sólo le da el valor de 10 bits, que representa el voltaje en el pin determinado.
El programa sólo imprimirlas sobre la serie, así que abrir el serial monitor (CTRL + SHFT + M) o el plotter serie (CTRL + SHFT + L) y gire el potenciómetro. Debería ver los valores oscilan entre 0 y 1023.
Temporización de 10 o más, en lugar de 1 ms puede dar mejores resultados en el plotter serie.
Puede asignar los valores de 0-1023 gama a otra gama, por ejemplo de 0 a 100. Esto puede hacerse usando la función de mapa. Echa un vistazo al ejemplo AnalogReadSerialMap. La sintaxis de la función de mapa: mapa (valor, lowerLimitInput, upperLimitInput, lowerLimitOutput, upperLimitOutput) valor es sólo el mapa, en este caso la lectura del sensor. El rango de esta entrada es 0 a 1023, por lo que son nuestros límites de entrada. Queremos que la salida al rango de 0 a 100, por lo que son nuestros límites de salida. Esto significa que si el sensor Lee 1023, el valor de salida será de 100.
Podríamos lograr el mismo resultado utilizando sensorValue * 100 / 1023.
Para convertir a un cociente, tenemos que usar un tipo de datos distinto int: float (coma flotante). Si dividimos el valor del sensor por 1023, obtenemos un cociente entre cero y uno.
Podemos cambiar el tipo de datos de la variable sensorValue flotar, o convertir el valor de un int a un float. El primer método se utiliza en AnalogReadSerialRatio-a, el último uno en AnalogReadSerialRatio-b.
Si no convertimos nuestro valor a un flotador en primer lugar, el resultado se considerará como un int, así. Ignorarse los valores después de que se acaba el punto decimal, por ejemplo, 1/2 = 0, pero 1.0/2 = 0.5. Números normales como '1' se tratará como enteros, a menos que agregue un decimal (1.0), a continuación, se tratará como un flotador. Si uno de los factores en un cálculo es un flotante, el resultado también será un flotador.
Para convertir de un int a un float, se puede utilizar la función float(number) , o puede usar la notación c ++ para encasillamiento (conversión de un tipo de datos a otro) (float) cantidad .
Para convertir de un flotador a un int, puede hacerlo de la misma manera: int(number) o número (int), pero nota que simplemente truncará el número en punto decimal, simplemente ignorará los valores que vienen después de la marca decimal. Por ejemplo, int(1.1) = 1, pero int(1.9) = 1, incluso int(1.99999) dará 1. Para redondear el número, utilice la función round(number) , por ejemplo, round(1.1) = 1, round(1.5) = 2, round(1,99) = 2.
https://www.Arduino.CC/en/Reference/Cast
https://www.Arduino.CC/en/Reference/FloatCast
Medición de voltajes
Puesto que un valor analógico de 1023 corresponde a 5v (o de 3, 3V 3, 3V microcontroladores), usted puede convertir esto a un voltaje mediante el uso de analogRead(A0) * 5.0 / 1023. Se utiliza en el ejemplo de AnalogReadSerialVoltage.
Leer tensiones superiores a 5v (3.3v), necesitarás 2 resistencias, para crear un divisor del voltaje. Podemos transformar la fórmula anterior para obtener Vsubin/sub si sabemos Vsubout/sub. (ver imagen)
Conectar una resistencia (R2) de la tierra a la entrada analógica, luego conectar la tierra de la tensión a tierra de Arduino y luego conecte otra resistencia (R1) de la tensión a medir con el conector analógico. (ver imagen) Utilizar la fórmula anterior para calcular los valores de resistencia adecuados. Cualquier valor entre 10k y 100 k debería funcionar bien. Si la resistencia es demasiado baja, se dibujar demasiado corriente e influyen en la lectura mucho.
También medir 12v por ejemplo, usar R1 = 47k y R2 = 22k. Esto me da un voltaje máximo de 15.87v, si me gustaría ir superior a este voltaje, romper mi Arduino.
Nota: si R2 es - por cualquier razón - desconectado o interrumpido, la alta tensión se conectará a la Arduino directamente (a través de R1) y probablemente dañará o destruirlo. Así que no cambie las resistencias si se aplica un alto voltaje.
Abra el ejemplo AnalogReadSerialHighVoltage.
En la parte superior del archivo, hay algunas declaraciones constante . Como una variable, constantes pueden almacenar valores de todo tipo, pero a diferencia de las variables, constantes no pueden cambiar mientras se ejecuta el programa. Esto significa que se almacenan en el espacio de almacenamiento del programa, en lugar de la memoria dinámica (RAM), dejando más espacio para las variables y matrices etc..
Cambiar los valores de estas constantes según su configuración. La relación se calcula automáticamente, así que no tienes que cambiarlo. Usted podría utilizar los códigos de color de la resistencia para obtener un valor teórico, pero tendrás una mucho mejor aproximación si se medir las resistencias con un multímetro. Lo mismo pasa con el voltaje de funcionamiento.
Salidas analógicas
El Arduino no salida voltajes analógicos, sólo puede salida 5v o 0v. Para la salida de tensiones en el medio, utiliza una técnica denominada PWM (Modulación por ancho de pulso).
El Arduino crea una onda cuadrada y luego varía el en-apagado-tiempos y de la onda. Por ejemplo, 2ms en, 2ms o 1 ms en 3 MS off. Esto se conoce como el ciclo de trabajo de la onda cuadrada. 2ms en, 2ms apagado es ciclo de deber del 50%; 1ms en 3ms off es un ciclo de trabajo del 25%. (ver imagen)
Ahora puede calcular la tensión media, que es el área bajo la curva dividida por la cantidad de ciclos. Veamos el ejemplo del ciclo de deber del 50%: el área (evaluado más de un ciclo) es sólo un rectángulo de 5 por 0.5, por lo que la zona es de 2,5. Dividido por la cantidad de ciclos aún da 2.5, por lo que el voltaje promedio es 2, 5V.
En otras palabras, el voltaje promedio puede ser escrito como el ciclo de trabajo multiplicado por la tensión de alimentación. Por ejemplo, un ciclo de trabajo del 25% sería 5v · 0,25 = 1.25v.
Estos voltajes promedio están indicados en rojo en las imágenes.
Tus ojos son demasiado lentos para ver la onda cuadrada subyacente, por lo que este método es perfectamente bien para la regulación de LED.
Abra el ejemplo analogPotDimmer.
Conecte un LED (+ resistencia) al pin digital 5 y un potenciómetro en el pin analógico A0. Girando el potenciómetro regula el LED.
Es la única nueva función analogWrite (pin, ciclo de deber). Sólo establece el ciclo de trabajo del pwm en un pin. Tenga en cuenta que el ciclo de trabajo es un valor de 0 a 255, esto corresponde a 0% - 100%
Otro ejemplo es analogWriteDimmer. Conecte un pulsador al pin 2 y un LED al pin 5. Cuando usted presione y sostenga el botón, el LED es más brillante, cuando se suelta, luego presione y sostenga otra vez, disminuirá su brillo.