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.

2.2.1 Fotorresistor (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 fotorresistor es un componente comúnmente utilizado para medir la intensidad de la luz ambiental. Ayuda al controlador a reconocer el día y la noche y a realizar funciones de control de luz como lámparas nocturnas. Este proyecto es muy similar al del potenciómetro, y puedes 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í está el enlace:

Nombre

ARTÍCULOS 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 de la T-Board

physical

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: Construye el circuito.

../_images/july24_2.2.1_photoresistor_mcp3008.png

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

cd ~/raphael-kit/c/2.2.1-2/

Paso 3: Compila el código.

gcc 2.2.1_Photoresistor.c -o photoresistor -lwiringPi -lm

Paso 4: Ejecuta el archivo compilado.

./photoresistor

Cuando el código se está ejecutando, el brillo del LED cambiará de acuerdo con la intensidad de luz detectada por el fotorresistor.

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>
#include <softPwm.h>

#define SPI_CHANNEL 0      // Usar canal SPI 0 (CE0)
#define SPI_SPEED   1000000 // Velocidad SPI de 1 MHz
#define LedPin      3       // GPIO3 (WiringPi) para PWM del LED

// Leer valor ADC desde MCP3008, canal 0~7
int readMCP3008(int channel) {
    if (channel < 0 || channel > 7) return -1;

    unsigned char buffer[3];
    buffer[0] = 1;                          // Bit de inicio
    buffer[1] = (8 + channel) << 4;         // SGL/DIF = 1, D2-D0 = canal
    buffer[2] = 0;

    wiringPiSPIDataRW(SPI_CHANNEL, buffer, 3);

    // Combinar el resultado
    int result = ((buffer[1] & 3) << 8) | buffer[2];
    return result;
}

int main(void) {
    if (wiringPiSetup() == -1) {
        printf("¡Falló la inicialización de wiringPi!\n");
        return 1;
    }

    if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
        printf("¡Falló la configuración de SPI!\n");
        return 1;
    }

    softPwmCreate(LedPin, 0, 100); // Inicializar PWM por software

    while (1) {
        int analogVal = readMCP3008(0); // Leer de CH0
        printf("Valor ADC: %d\n", analogVal);

        // Escalar valor ADC de 10 bits (0–1023) al rango de PWM (0–100)
        int pwmVal = analogVal * 100 / 1023;
        softPwmWrite(LedPin, pwmVal);

        delay(100);
    }

    return 0;
}

Explicación del código

El código aquí es el mismo que en 2.1.7 Potenciómetro. Si tienes alguna otra pregunta, por favor revisa la explicación del código de 2.1.7 Potenciómetro (MCP3008) para más detalles.