P13 Electronica
P13 Electronica
P13 Electronica
1. Objetivos 3
2. Marco Teórico 3
3. Marco Conceptual 6
4. Desarrollo 7
4.1. Parte C 7
Índice de Figuras
Marco Teórico
[Escriba aquí]
Figura 1 Pines analógicos
En Arduino para tratar las entradas y salidas digitales usamos las siguientes
funciones:
analogReference() – configura la referencia de voltaje usada para la entrada
analógica.
analogRead() – lee el valor del pin analógico especificado.
analogWrite() – escribe un valor analógico (onda PWM) al pin especificado. No en
todos los pines digitales se puede aplicar PWM.
Salidas Analógicas. PWM
Como hemos dicho Arduino Uno tiene entradas analógicas que gracias a los
conversores analógico digital puede entender ese valor el microcontrolador, pero
no tiene salidas analógicas puras y para solucionar esto, usa la técnica de PWM.
Algunos pines digitales pueden usarse como salidas analógicas PWM:
[Escriba aquí]
Las Salidas PWM (Pulse Width Modulation) permiten generar salidas analógicas
desde pines digitales. Arduino Uno no posee salidas analógicas puras, sin
embargo el Arduino Due sí tiene salidas analógicas puras mediante dos DAC.
El arduino due, posee dos salidas analógicas puras mediante dos conversores
digital a analógico. Estos pines pueden usarse para crear salidas de audio usando
la librería correspondiente.
La función para hacer una salida PWM en un pin es:
analogWrite() – escribe un valor analógico (onda PWM) al pin especificado. No en
todos los pines digitales se puede aplicar
PWM. http://arduino.cc/en/Reference/AnalogWrite
Para aquellos proyectos donde haga falta una conversión de señal analógica a
digital, y que el microcontrolador usado no disponga de esta capacidad, es
interesante contar con este tipo de módulo ADS1115, que provee de esa
capacidad de conversión ADC con una precisión de 16-bit.
Además, este componente electrónico puede ser interesante también para
extender las capacidades de conversión, incluso si el microcontrolador que estás
usando para tu proyecto tiene dicha capacidad pero necesitas algo más.
Por otro lado, tienes que entender que el ADS1115 tiene dos modos de medición,
uno es el diferencial y otro el single ended:
Diferencial: usa dos ADCs para cada medición, reduciendo el número de canales
a 2, pero aporta una ventaja clara, y es que puede medir tensiones negativas y no
es tan vulnerable al ruido.
Single ended: tiene cuatro canales al no usar los dos como en el caso anterior.
Cada uno de los canales de 15-bits.
Además de esos modos, incluye un modo comparador en el que se genera una
alerta a través del pin ALRT cuando alguno de los canales supera un valor umbral
que se puede configurar en el código fuente del sketch.
Si quieres hacer mediciones inferiores a los 5v, pero con precisiones superiores,
debes saber que el ADS1115 tiene un PGA que puede ajustar la ganancia de
voltaje desde los 6.144v a los 0.256v. Siempre teniendo en cuenta que la máxima
tensión que se puede medir en cualquier caso será la tensión de alimentación
empleada (5v).
Los datos de entrada y configuración del DAC se pueden programar en la
memoria (EEPROM) utilizando el comando de interfaz I2C. El Convertidor Digital
Analógico tiene un pin de selección de bit de dirección A0 externo. Este pin A0
puede vincularse a VDD (5V) o GND (Tierra) de nuestro Arduino para así elegir
[Escriba aquí]
una de nuestras dos opciones de dirección que deseemos trabajar ya sea I2C:
0x62 o 0x63. El MCP4725 tiene una interfaz en serie compatible con I2C de dos
hilos para modo estándar (100 kHz), rápido (400 kHz) o alta velocidad (3.4 MHz).
Marco Conceptual
[Escriba aquí]
Desarrollo
Parte C
Para este programa se alimentó un motor con una pila cuadrada de 9V, al
presionar el botón hacia que el motor girara en un sentido y con uno de los
potenciómetros hacia que cambiara el sentido de giro de este motor. El código
que hará este trabajo está diseñado en el software de Arduino ID.
int TermM1 = 9;
boolean RotDir;
int VelRot;
void setup() {
pinMode(TermM1,OUTPUT);
pinMode(TermM2,OUTPUT);
void loop() {
RotDir = true;
else
RotDir = false;
[Escriba aquí]
driveMotor(RotDir, map(VelRot,0, 512, 0, 255));
delay(10);
if(dir){
analogWrite(TermM1,vel);
analogWrite(TermM2,0);
}
else {
analogWrite(TermM1,0);
analogWrite(TermM2,vel);
}
}
[Escriba aquí]