Nota
¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirse?
Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Avances exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
3.1.5 Indicador de Batería (MCP3008)
Nota
Dependiendo de la versión de tu kit, identifica si tienes ADC0834 o MCP3008 y procede con la sección correspondiente.
Introducción
En este proyecto, realizaremos un dispositivo indicador de batería que puede mostrar visualmente el nivel de la batería en la barra de LED (LED Bargraph).
Advertencia
No utilices componentes de batería que excedan los 3.3V para evitar sobrecargas que puedan dañar el chip o la Raspberry Pi.
Componentes requeridos
En este proyecto necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
|
- |
Diagrama esquemático
Nombre T-Board |
Física |
wiringPi |
BCM |
SPICE0 |
Pin 24 |
10 |
8 |
SPIMOSI |
Pin 19 |
12 |
10 |
SPIMISO |
Pin 21 |
13 |
9 |
SPISCLK |
Pin 23 |
14 |
11 |
GPIO25 |
Pin 22 |
6 |
25 |
GPIO12 |
Pin 32 |
26 |
12 |
GPIO16 |
Pin 36 |
27 |
16 |
GPIO20 |
Pin 38 |
28 |
20 |
GPIO21 |
Pin 40 |
29 |
21 |
GPIO5 |
Pin 29 |
21 |
5 |
GPIO6 |
Pin 31 |
22 |
6 |
GPIO13 |
Pin 33 |
23 |
13 |
GPIO19 |
Pin 35 |
24 |
19 |
GPIO26 |
Pin 37 |
25 |
26 |
Procedimientos experimentales
Paso 1: Construye el circuito.
Paso 2: Ve a la carpeta del código.
cd ~/raphael-kit/c/3.1.5-2/
Paso 3: Compila el código.
gcc 3.1.5_BatteryIndicator.c -lwiringPi
Paso 4: Ejecuta el archivo compilado.
sudo ./a.out
Después de que el programa se ejecute, conecta un cable desde el pin 3 del MCP3008 y otro desde el GND a los dos polos de una batería. Verás que los LED correspondientes en la barra LED se encienden para mostrar el nivel de energía (rango de medición: 0-5V).
Nota
Si no funciona después de ejecutarlo, o aparece un mensaje de error: "wiringPi.h: No such file or directory", por favor consulta Instalar y verificar WiringPi.
Código
#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <stdio.h>
#define SPI_CHANNEL 0
#define SPI_SPEED 1000000 // 1MHz
#define VREF 3.3
int pins[10] = {6, 26, 27, 28, 29, 21, 22, 23, 24, 25};
int read_ADC(int channel)
{
if (channel < 0 || channel > 7) return -1;
unsigned char buffer[3];
buffer[0] = 1; // Bit de inicio
buffer[1] = (8 + channel) << 4; // Modo de un solo extremo
buffer[2] = 0;
wiringPiSPIDataRW(SPI_CHANNEL, buffer, 3);
int value = ((buffer[1] & 3) << 8) | buffer[2];
return value;
}
void LedBarGraph(int value) {
for (int i = 0; i < 10; i++) {
if (i < value)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
int main(void)
{
if (wiringPiSetup() == -1) {
printf("¡Error al configurar wiringPi!\n");
return 1;
}
if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
printf("¡Error al configurar SPI!\n");
return 1;
}
for (int i = 0; i < 10; i++) {
pinMode(pins[i], OUTPUT);
digitalWrite(pins[i], HIGH);
}
while (1) {
int analogVal = read_ADC(0); // MCP3008 CH0
if (analogVal < 0) continue;
float voltage = analogVal * VREF / 1023.0;
int level = analogVal * 10 / 1024;
if (level > 10) level = 10;
LedBarGraph(level);
printf("Valor ADC: %d\tVoltaje: %.2f V\tNivel: %d\n", analogVal, voltage, level);
delay(200);
}
return 0;
}
Explicación del código
int read_ADC(int channel) { ... }
Esta función lee valores analógicos del chip ADC MCP3008 usando SPI. El parámetro channel selecciona una de las 8 entradas analógicas (CH0–CH7). El MCP3008 devuelve un valor digital de 10 bits entre 0 y 1023 que representa el voltaje analógico.
void LedBarGraph(int value) { ... }
Esta función controla una barra de LED de 10 segmentos. Cada LED representa 1/10 del rango de voltaje. Los LED se encienden en orden hasta el nivel especificado.
Nota: Esta versión asume que los ánodos de los LED están conectados a los GPIOs y los cátodos a GND (es decir, activos en HIGH).
int main(void) { ... }
Lógica principal del programa:
Inicializa wiringPi y la comunicación SPI.
Configura los pines GPIO como salidas para controlar la barra LED de 10 segmentos.
Lee continuamente el voltaje analógico a través del MCP3008 (CH0).
Convierte la lectura en voltaje usando VREF = 3.3V.
Escala el voltaje a un nivel de 0–10 y enciende los LED correspondientes.
Muestra en consola el valor crudo del ADC, el voltaje (en voltios) y el nivel del LED.
Esto actúa como un indicador visual de nivel de batería o voltímetro analógico.