Nota

¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

¿Por qué unirse?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Preestrenos exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y avances.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones y sorteos festivos: Participa en sorteos y promociones especiales de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

2.2.1 Fotoresistor (MCP3008)

Nota

../_images/mcp3008_and_adc0834.jpg

Dependiendo de la versión de tu kit, identifica si tienes ADC0834 o MCP3008 y procede con la sección correspondiente.

Introducción

El fotoresistor es un componente comúnmente usado para detectar la intensidad de la luz ambiental. Ayuda al controlador a reconocer el día y la noche y realizar funciones de control de luz, como lámparas nocturnas. Este proyecto es muy similar al potenciómetro, y podrías pensar que cambia el voltaje para detectar la luz.

Componentes requeridos

En este proyecto, necesitamos los siguientes componentes.

../_images/list2_2.2.1_photoresistor.png

Es definitivamente conveniente comprar un kit completo, aquí tienes el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los siguientes enlaces.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

LED

COMPRAR

MCP3008

-

Fotoresistor

COMPRAR

Diagrama esquemático

Nombre

T-Board

WiringPi

BCM

SPICE0

pin24

10

8

SPIMOSI

pin19

12

10

SPIMISO

pin21

13

9

SPISCLK

pin23

14

11

GPIO22

pin15

3

22

../_images/schematic_2.2.1_photoresistor_mcp3008.png

Procedimientos experimentales

Paso 1: Construir el circuito.

../_images/2.2.1_Photoresistor_bb.png

Paso 2: Ir a la carpeta del código.

cd ~/raphael-kit/nodejs/

Paso 3: Ejecutar el código.

sudo node photoresistor-2.js

Código

const Gpio = require('pigpio').Gpio;
const mcpadc = require('mcp-spi-adc');

// Abrir canal 0 del MCP3008 (entrada analógica CH0)
const adc = mcpadc.openMcp3008(0, { speedHz: 1350000 }, (err) => {
if (err) {
    console.error("No se pudo abrir MCP3008:", err);
    process.exit(1);
}

console.log("MCP3008 inicializado en SPI0/CE0.");

// Inicializar LED en GPIO22 (compatible con PWM)
const led = new Gpio(22, { mode: Gpio.OUTPUT });

// Configurar intervalo para leer ADC y actualizar brillo del LED cada 100ms
const interval = setInterval(() => {
    adc.read((err, reading) => {
    if (err) {
        console.error("Error de lectura del ADC:", err);
        return;
    }

    const adcValue = reading.value;          // Flotante entre 0.0 y 1.0
    const pwmValue = Math.round(adcValue * 255); // Escalar a 0–255

    console.log(`ADC = ${adcValue.toFixed(4)}, PWM = ${pwmValue}`);

    led.pwmWrite(pwmValue); // Actualizar brillo del LED
    });
}, 100);

// Manejar Ctrl+C (SIGINT) para limpieza
process.on('SIGINT', () => {
    console.log('\nCerrando correctamente...');
    clearInterval(interval);  // Detener el bucle del intervalo
    led.digitalWrite(0);      // Apagar LED
    process.exit(0);
});
});

Explicación del código

const Gpio = require('pigpio').Gpio;

Esta línea importa el módulo pigpio, que se utiliza para controlar los pines GPIO de la Raspberry Pi. Soporta salida PWM necesaria para atenuar un LED.

const mcpadc = require('mcp-spi-adc');

Esta línea importa la librería mcp-spi-adc, que permite la comunicación con el convertidor analógico-digital MCP3008 utilizando la interfaz SPI de la Raspberry Pi.

const adc = mcpadc.openMcp3008(0, { speedHz: 1350000 }, (err) => { ... });

Abre el canal de entrada analógica 0 del chip MCP3008 usando SPI por hardware. La velocidad de reloj SPI está configurada en 1,35 MHz. Si ocurre un error al abrir el canal, el programa lo registra y finaliza.

const led = new Gpio(22, { mode: Gpio.OUTPUT });

Inicializa el pin GPIO22 como salida. Este pin se usa para controlar el brillo de un LED mediante PWM con la librería pigpio.

setInterval(() => {
    adc.read((err, reading) => {
        ...
    });
}, 100);

Configura un bucle recurrente que se ejecuta cada 100 milisegundos. En cada ciclo, lee el valor analógico del canal 0 del MCP3008. El resultado es un número flotante entre 0.0 y 1.0, que representa la relación entre el voltaje de entrada y el de referencia.

const pwmValue = Math.round(adcValue * 255);
led.pwmWrite(pwmValue);

Convierte el valor analógico en un valor PWM de 8 bits en el rango 0–255, y lo escribe en el GPIO22 para ajustar proporcionalmente el brillo del LED.

process.on('SIGINT', () => {
    clearInterval(interval);
    led.digitalWrite(0);
    process.exit(0);
});

Agrega un manejador de señales para cerrar el programa de manera segura cuando se presiona Ctrl+C. Detiene el bucle del intervalo, apaga el LED y finaliza el programa de forma correcta.