Práctica 5 - ADC

 

INTRODUCCIÓN

 

En esta práctica se implementa la lectura de un puerto ADC a través de una variación de voltaje con un potenciómetro y se despliega el valor analógico a través de LEDs. Esta práctica utiliza el módulo XENSE de XIDE para facilitar componentes y conexiones.

 

Selecciona la plataforma y entorno de programación.

 

 

PYTHON
PROCESSING
PYTHON

Descripción

En esta práctica se implementa una lectura analógica, mediante un potenciómetro incluido en el módulo XENSE el cual se conecta a los pines de la tarjeta Raspberry Pi RX Y TX los cuales se configura como entrada y señal analógica. Para visualizar dicha lectura se utilizan 8 LEDs incluidos en el módulo XENSE de tal manera que se observe el incremento o decremento de voltaje del potenciómetro, a la vez se implementa una interfaz donde se despliega una etiqueta con el valor actual del potenciómetro.

 

Valor de potenciómetro.


Materiales: 

1 x Raspberry Pi. Comprar

1 x Módulo XENSE. Comprar

1 x Juego de cable Dupont. Comprar

1 x Protoboard de 830 puntos. Comprar

 

Software: 

Raspbian. Descargar

Python. Descargar

 

Procedimiento

1.Instala la librería RPi.GPIO-0.7.0.tar.gz, para poder utilizar los GPIOs de la tarjeta Raspberry Pi. En el siguiente link encontrarás un manual para poder instalarla.

2.En el apartado de "Diagrama esquemático" que se encuentra a continuación selecciona tu Raspberry Pi y realiza las conexiones que se muestran en la imagen.

3.Descarga el código fuente al final de esta práctica en el apartado de "Descargas".

4.En el siguiente link encontrarás un manual para poder ejecutar el programa de Python desde la terminal de Raspberry Pi.

 

Diagrama esquemático

 

Raspberry Pi Zero W
Raspberry Pi 3 A+
Raspberry Pi 3 B+
Raspberry Pi Zero W

Raspberry Pi 3 A+

Raspberry Pi 3 B+

 

Código

Código

 

# AUTOR: MICROSIDE TECHNOLOGY S.A. DE C.V.

# FECHA: AGOSTO 2019

# Implementar una lectura analógica de un potenciómetro y desplegar el valor en 8 LEDs.

import sys
from Tkinter import *                                                                   #Librería para poder realizar interfaz grafica
import RPi.GPIO as GPIO                                                          # librería para poder utilizar los GPIO de la raspberry pi
import serial                                                                                  # librería para poder utilizar el puerto serial
import threading                                                                            # librería para poder utilizar timers
import time                                                                                    # libreria de tiempo
import numpy as np                                                                      #librería para utilización de esquemas numéricos


RAIZ = Tk()                                                                                #se crea la variable RAIZ para toda la interfaz y se llama la clase TK()

RAIZ.title("ADC")                                                                            # Definimos el nombre de la interfaz
RAIZ.geometry('250x60')                                                              # Definimos el tamaño de la interfaz
GPIO.setmode(GPIO.BOARD)                                                 #Definimos la manera en que utilizaremos los pines ya sea por numeración de pines o GPIO

puerto = serial.Serial(port = '/dev/ttyS0',                                     #escribe el nombre del puerto al que está conectado el dispositivo
baudrate = 9600,
bytesize = serial.EIGHTBITS,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE)

                                                                                                 # Inicializa los GPIO de salida que se van ocupar
PIN_LEDS = [12, 16, 18, 22, 32, 36, 38, 40]
for i in PIN_LEDS:
                 GPIO.setup(i, GPIO.OUT, initial=GPIO.LOW)

dato = 0
salto = "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r"
orden="R"
def adc():
    while True:
         if (orden is "R"):
                                  #reset_output_buffer()
            puerto.write(orden.encode())
            time.sleep(0.1)
            puerto.write(salto.encode())
           time.sleep(0.1)
                                  #reset_input_buffer()
           dato = puerto.readline()
          dato = np.fromstring(dato.decode('ascii', errors = 'replase'), sep = ' ')                     #convierte los valores para poder utilizarlos como enteros
         etiqueta1.config(text= dato[0])
                                                                 #if para encender y apagar LED de acuerdo a los datos del potenciómetro
          if((dato[0] >= 0) and (dato[0] <= 128)):

                  GPIO.output(12, True)
                 GPIO.output(16, False)
                 GPIO.output(18, False)
                 GPIO.output(22, False)
                 GPIO.output(32, False)
                 GPIO.output(36, False)
                 GPIO.output(38, False)
                GPIO.output(40, False)

       if((dato[0] >= 128) and (dato[0] <= 256)):
               GPIO.output(12, True)
               GPIO.output(16, True)
               GPIO.output(18, False)
               GPIO.output(22, False)
               GPIO.output(32, False)
               GPIO.output(36, False)
               GPIO.output(38, False)
               GPIO.output(40, False)

      if((dato[0] >= 256) and (dato[0] <= 384)):
                 GPIO.output(12, True)
                 GPIO.output(16, True)
                 GPIO.output(18, True)
                 GPIO.output(22, False)
                 GPIO.output(32, False)
                 GPIO.output(36, False)
                 GPIO.output(38, False)
                 GPIO.output(40, False)

       if((dato[0] >= 384) and (dato[0] <= 512)):
              GPIO.output(12, True)
             GPIO.output(16, True)
              GPIO.output(18, True)
              GPIO.output(22, True)
              GPIO.output(32, False)
              GPIO.output(36, False)
              GPIO.output(38, False)
              GPIO.output(40, False)

     if((dato[0] >= 512) and (dato[0] <= 640)):
             GPIO.output(12, True)
             GPIO.output(16, True)
             GPIO.output(18, True)
             GPIO.output(22, True)
             GPIO.output(32, True)
             GPIO.output(36, False)
             GPIO.output(38, False)
             GPIO.output(40, False)

     if((dato[0] >= 640) and (dato[0] <= 768)):
            GPIO.output(12, True)
            GPIO.output(16, True)
            GPIO.output(18, True)
            GPIO.output(22, True)
            GPIO.output(32, True)
            GPIO.output(36, True)
            GPIO.output(38, False)
           GPIO.output(40, False)

   if((dato[0] >= 768) and (dato[0] <= 896)):
          GPIO.output(12, True)
          GPIO.output(16, True)
         GPIO.output(18, True)
          GPIO.output(32, True)
          GPIO.output(36, True)
         GPIO.output(38, True)
         GPIO.output(40, False)

  if((dato[0] >= 896) and (dato[0] <= 1023)):
         GPIO.output(12, True)
         GPIO.output(16, True)
         GPIO.output(18, True)
         GPIO.output(22, True)
         GPIO.output(32, True)
        GPIO.output(36, True)
        GPIO.output(38, True)
       GPIO.output(40, True)

etiqueta = Label(RAIZ, text="Valor de potenciómetro es:")
etiqueta.grid(column=4, row=5)

etiqueta1 = Label(RAIZ, text="")                      #etiqueta de tipo label que nos muestra el valor del potenciometro
etiqueta1.grid(column=5, row=5)
timer = threading.Timer(1.1,adc)                         # Activa la función led en un tiempo de 0.5 segundos
timer.start()

RAIZ.mainloop()

 

Descargas

R5-PYTHON

Descarga código en Python de la práctica 5.

 

PROCESSING

Descripción

Esta práctica se implementa una lectura analógica, mediante el potenciómetro incluido en el módulo XENSE el cual se conecta a los pines de la Raspberry Pi RX Y TX los cuales se configuran como entrada y señal analógica. para visualizar dicha lectura se utilizan 8 LEDs incluidos en el módulo XENSE, de tal manera que se observe el incremento o decremento de voltaje del potenciómetro, a la vez se implementa una interfaz donde se desplegará un gráfico en forma de rectángulo que muestra cuando el potenciómetro es manipulado.

 

Simulación de potenciómetro al ser manipulado.


Materiales: 

1 x Raspberry Pi. Comprar

1 x Módulo XENSE. Comprar

1 x Juego de cable Dupont. Comprar

1 x Protoboard de 830 puntos. Comprar

 

Software:

Raspbian. Descargar

Processing. Descargar

 

Procedimiento

1.En el apartado de "Diagrama esquemático" que se encuentra a continuación selecciona tu Raspberry Pi y realiza las conexiones que se muestran en la imagen.

2.Al final de esta práctica en el apartado de “Descargas", puedes encontrar los archivos del código fuente o bien cópielo del apartado de "código”, que se encuentra más abajo.

3.Sí descargaste el archivo del paso 2, omite este paso. Si copiaste el código abrir el software Processing pega el código en un nuevo proyecto.

4.En el siguiente link encontrarás un manual para poder ejecutar el programa en Processing.

Diagrama esquemático

 

Raspberry Pi Zero W
Raspberry Pi 3 A+
Raspberry Pi 3 B+
Raspberry Pi Zero W

Raspberry Pi 3 A+

Raspberry Pi 3 B+

 

Código

Código

/*

AUTOR: MICROSIDE TECHNOLOGY S.A. DE C.V.

FECHA: AGOSTO 2019

*/

/**************************************************************************

Implementar una lectura analógica de un potenciómetro y desplegar el valor en 8 LEDs.

**************************************************************************/

import processing.io.*;                                                // importamos la librería para poder utilizar los GPIO de la raspberry pi
import processing.serial.*;                                          // importamos la librería para poder utilizar los puertos seriales
Serial puerto;                                                              // declaramos una variable de tipo serial
int leds[]={21, 20, 16, 12, 25, 24, 23, 18};               // declaramos los GPIO a utilizar
int l1=0, i;

String orden ;
void setup() {
background(256,256,256);                                               // color blanco a la interfaz
for (i=0; i<8; i++) {                                                          //inicializamos los GPIO como salida
GPIO. pinMode(leds[i], GPIO.OUTPUT);
}
size(300, 200);                                                                    // declaramos el tamaño de la interfaz
puerto = new Serial(this, "/dev/ttyS0", 9600);                   //declaramos nuestro puerto serial a utilizar
}
void draw() {
puerto.write("R\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r");                                                             // instrucción al módulo XENSE  para leer los datos del potenciómetro
if (puerto.available()>0) {                                                    //convertimos a string nuestra variable puerto
orden=puerto.readString();
if (orden.length() <=6) {                                                         //convertimos los datos a tipo entero para poder utilizar los datos
orden = trim(orden);
l1=Integer.parseInt(orden);
}
}
                                     //if para encender y apagar los leds conforme las medidas del potenciómetro
if (l1>0 && l1<=128) {
encender(0);
}
if (l1>128 && l1<=256) {
encender(1);
}
if (l1>256 && l1<=384) {
encender(2);
}
if (l1>384 && l1<=512) {
encender(3);
}
if (l1>512 && l1<=640) {
encender(4);
}
if (l1>640 && l1<=768) {
encender(5);
}
if (l1>768 && l1<=896) {
encender(6);
}
if (l1>896 && l1<=1000) {
encender(7);
}
if (l1>1000 && l1<=1023) {
encender(8);
}
rect();                                                                      //ejecutamos la función rect
}
void encender(int x) {                                            //función para encender y apagar led
for (i=0; i<x; i++)
GPIO.digitalWrite(leds[i], GPIO.HIGH);
for (i=x; i<8; i++)
GPIO.digitalWrite(leds[i], GPIO.LOW);
}
void rect(){                                                                     //función que dibuja los gráficos en la interfaz
fill(156, 156, 156);
rect(22, 80, 255, 30);
fill(0, 245, 0);
rect(22, 80, l1/4, 30);
fill(0,0,0);
text("0",22,75);
text("1023",255,75);

}

Descargas

R5-PROCESSING

Descarga código en Processing de la práctica 5.

 

Fecha

agosto 5, 2019

Categoría

Prácticas Raspberry Pi

× WhatsApp