Nota

Ciao, benvenuto nella comunità SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirsi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e giveaway festivi: Partecipa a concorsi e promozioni durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

3.1.4 Ventilatore Intelligente (MCP3008)

Nota

../_images/mcp3008_and_adc0834.jpg

A seconda della versione del kit, verifica se possiedi ADC0834 o MCP3008 e procedi con la sezione corrispondente.

Introduzione

In questo progetto utilizzeremo motori, pulsanti e termistori per realizzare un ventilatore intelligente manuale + automatico con velocità del vento regolabile.

Componenti richiesti

In questo progetto, ci servono i seguenti componenti.

../_images/list2_Smart_Fan.png

Schema elettrico

T-Board Name

physical

wiringPi

BCM

SPICE0

Pin 24

10

8

SPIMOSI

Pin 19

12

10

SPIMISO

Pin 21

13

9

SPISCLK

Pin 23

14

11

GPIO22

Pin 15

3

22

GPIO5

Pin 29

21

5

GPIO6

Pin 31

22

6

GPIO13

Pin 33

23

13

../_images/schematic_3.1.4_smart_fan_mcp3008.png

Procedure sperimentali

Passo 1: Monta il circuito.

../_images/july24_3.1.4_smart_fan_mcp3008.png

Nota

Il modulo di alimentazione può utilizzare una batteria da 9V con il connettore per batteria da 9V presente nel kit. Inserire il ponticello del modulo di alimentazione nella linea di alimentazione a 5V della breadboard.

../_images/image118.jpeg

Passo 2: Entra nella cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/c/3.1.4-2/

Passo 3: Compila.

gcc 3.1.4_SmartFan.c -o SmartFan -lwiringPi -lm

Passo 4: Esegui il file compilato.

./SmartFan

Quando il codice viene eseguito, avvia il ventilatore premendo il pulsante. Ogni volta che lo premi, il livello di velocità aumenta o diminuisce di 1. Ci sono 5 livelli di velocità: 0~4. Quando si imposta il 4o livello e si preme il pulsante, il ventilatore si spegne con velocità 0.

Quando la temperatura aumenta o diminuisce di oltre 2℃, la velocità aumenta o diminuisce automaticamente di 1 livello.

Nota

Se non funziona dopo l’esecuzione o appare l’errore: «wiringPi.h: No such file or directory», fare riferimento a Installazione e verifica di WiringPi.

Codice

#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <stdio.h>
#include <softPwm.h>
#include <math.h>

#define SPI_CHANNEL 0
#define SPI_SPEED   1000000
#define MotorPin1   21
#define MotorPin2   22
#define MotorEnable 23
#define BtnPin      3

int read_ADC(int channel)
{
    if (channel < 0 || channel > 7) return -1;

    unsigned char buffer[3];
    buffer[0] = 1;                      // Bit di avvio
    buffer[1] = (8 + channel) << 4;     // Modalità single-ended e canale
    buffer[2] = 0;

    wiringPiSPIDataRW(SPI_CHANNEL, buffer, 3);

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

int temperture()
{
    int analogVal = read_ADC(0);
    double Vr = 3.3 * analogVal / 1023.0;  // Usa 3.3V come Vref per MCP3008
    double Rt = 10000.0 * Vr / (3.3 - Vr);
    double temp = 1 / (((log(Rt / 10000.0)) / 3950.0) + (1 / (273.15 + 25.0)));
    double cel = temp - 273.15;
    double Fah = cel * 1.8 + 32;
    printf("Celsius: %.2f C  Fahrenheit: %.2f F\n", cel, Fah);
    return (int)cel;
}

int motor(int level)
{
    if (level == 0) {
        digitalWrite(MotorEnable, LOW);
        return 0;
    }
    if (level >= 4) {
        level = 4;
    }
    digitalWrite(MotorEnable, HIGH);
    softPwmWrite(MotorPin1, level * 25);
    return level;
}

void setup()
{
    if (wiringPiSetup() == -1) {
        printf("wiringPi setup fallito!\n");
        return;
    }

    if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
        printf("SPI se