Вы находитесь на странице: 1из 16

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica Arquitectura de Computadoras Laboratorio 2 Entradas/Salidas Analogicas

Uso de Potenciometro en Arduino Junto con los pines digitales, Arduino tambin tiene 6 pines que se pueden utilizar para entrada analgica. Estas entradas reciben un voltaje (de 0 a 5 voltios) y lo convierten en un nmero digital entre 0 (0 voltios) y 1024 (5 voltios) (10 bits de resolucin). Un dispositivo muy til que explota estas entradas es un potencimetro (tambin llamado una resistencia variable). Cuando est conectado con 5 voltios a travs de sus patillas exteriores del pin del medio leer algn valor entre 0 y 5 voltios depende del ngulo al que se gira (es decir, 2,5 voltios en el medio). A continuacin, puede utilizar los valores devueltos como una variable en el programa Materiales: 1 Potenciometro de 10Kohms 1 Resistencia de 220ohms / 330ohms 1 LED Amarillo Cables Diagrama esquemtico:

Implementacin

El cdigo queda de la siguiente manera: /* Analog Input * Demonstrates analog input by reading an analog sensor on analog * pin 0 and turning on and off a light emitting diode(LED) connected to digital pin 13.

* The amount of time the LED will be on and off depends on the value obtained by * analogRead(). */ int sensorPin = 0; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from the sensor void setup() { pinMode(ledPin, OUTPUT); //declare the ledPin as an OUTPUT: } void loop() { sensorValue = analogRead(sensorPin);// read the value from the sensor: digitalWrite(ledPin, HIGH); // turn the ledPin on delay(sensorValue); // stop the program for <sensorValue> milliseconds: digitalWrite(ledPin, LOW); // turn the ledPin off: delay(sensorValue); // stop the program for for <sensorValue> milliseconds: }

Se muestra una imagen del circuito implementado:

Lectura de voltaje analgico Este ejemplo muestra cmo leer una entrada analgica en el pin 0, convertir los valores de analogRead () en tensin, e imprimirlo al monitor serial. Materiales

Arduino Board a variable resistor, like a potentiometer

Al girar el eje del potencimetro, se cambia la cantidad de resistencia a cada lado del control que est conectado al pin central del potencimetro. Esto cambia el voltaje en el pin 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 Kohms), el voltaje en la patilla central se acerca a 5 voltios. Cuando las resistencias se invierten, la tensin en la patilla central se acerca a

0 voltios, o tierra. Esta tensin es la tensin analgica que ests leyendo como una entrada. Arduino tiene un circuito interno llamado convertidor analgico-a-digital (ADC) que lee este cambio de voltaje y lo convierte en un nmero entre 0 y 1023. Cuando el eje del potenciometro gira completamente en una direccin, hay 0 voltios en un pin, y el valor de entrada es 0. Cuando el eje se gira todo el camino en la direccin opuesta, hay 5 voltios que van a la clavija y el valor de entrada es 1023. En el medio, analogRead () devuelve un nmero entre 0 y 1023 que es proporcional a la cantidad de voltaje que se aplica al pin. Esquematico

Codigo Serial.begin(9600); int sensorValue = analogRead(A0);

Para cambiar los valores de 0 a 1023 a un rango que corresponde a la tensin del pin est leyendo, usted tendr que crear otra variable, un float, y hacer un poco de matemticas. Para escalar los nmeros comprendidos entre 0.0 y 5.0, se divide por 5,0 1023,0 y que se multiplican por sensorValue: float voltage= sensorValue * (5.0 / 1023.0); Serial.println(voltage) Ahora, al abrir el monitor serial en el entorno de desarrollo Arduino (haciendo clic en el botn a la derecha del botn "Upload" en la cabecera del programa), debera ver un flujo constante de nmeros que van desde 0,0 hasta 5,0. A medida que gira el eje, los valores cambiarn, correspondiente a la tensin de entrada en pin A0. /* ReadAnalogVoltage Reads an analog input on pin 0, converts it to voltage, and prints the result to the serial monitor. Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. */

// the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); }

// the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 5V): float voltage = sensorValue * (5.0 / 1023.0); // print out the value you read: Serial.println(voltage); }

Las figuras que muestran el funcionamiento del circuito son:

Circuito con LDR En el presente circuito se mostraran las caractersticas del LDR y su uso en un circuito en Arduino. Mientras que conseguir la entrada de un potencimetro puede ser til para humanos experimentos controlados, qu es lo que utilizamos cuando queremos un experimento controlado ambientalmente? Se utiliza exactamente los mismos principios pero en lugar de un potencimetro (resistencia basada en torsin ) se utiliza una foto resistencia (resistencia basada en la luz). Arduino no puede directamente medir la resistencia (se detecta voltaje), as que se crea un divisor de tensin (http://ardx.org/VODI). El voltaje exacto en el pin de deteccin es calculable, pero para los propsitos de esta experiencia(slo sensor de luz relativa) se puede experimentar con los valores y ver lo que funciona para nosotros. Un valor bajo se producir cuando el sensor est bien iluminado, mientras que un valor alto se producir cuando est en la oscuridad.

El diagrama pictorico sera el siguiente:

El codigo que muestra el funcionamiento de este circuito esta a continuacion: /* * A programa that will change the * intensity of an LED based on the amount of * light incident on the photo resistor.

* */ //PhotoResistor Pin int lightPin = 0; //the analog pin the photoresistor is connected to //the photoresistor is not calibrated to any units so //this is simply a raw sensor //value (relative light) //LED Pin int ledPin = 9;//the pin the LED is connected to we are controlling brightness so //we use one of the PWM (pulse //width modulation pins) void setup() { pinMode(ledPin, OUTPUT); //sets the led pin to output } /* * loop() - this function will start after setup * finishes and then repeat */ void loop() { int lightLevel = analogRead(lightPin); //Read the lightlevel

lightLevel = map(lightLevel, 0, 900, 0, 255); //adjust the value 0 to 900 to 0 to 255 lightLevel = constrain(lightLevel, 0, 255); //make sure the value is betwween 0 and 255 analogWrite(ledPin, lightLevel); //write the value } Invertir la respuesta: Tal vez sera ms interesante una respuesta opuesta. Eso se puede hacer fcilmente ya que slo se cambiaria: analogWrite(ledPin, lightLevel); ----> analogWrite(ledPin, 255 - lightLevel); Upload and watch the response change: Luces nocturnas En lugar de controlar el brillo del LED en respuesta a la luz, puede activar o desactivar el led, basndose en un valor umbral. Cambie el cdigo de loop () con. void loop(){ int threshold = 300; if(analogRead(lightPin) > threshold){ digitalWrite(ledPin, HIGH); }else{ digitalWrite(ledPin, LOW); }

Вам также может понравиться