Nota

Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Immergiti più a fondo in Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti?

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

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

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

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

  • Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.

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

2.2.4 Modulo Reed Switch

Introduzione

In questo progetto impareremo a conoscere il reed switch, un interruttore elettrico che si attiva grazie a un campo magnetico applicato.

../_images/2.2.4reed_switch.png

Componenti necessari

In questo progetto abbiamo bisogno dei seguenti componenti.

../_images/2.2.4component.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Modulo Interruttore Reed

ACQUISTA

Schema elettrico

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

../_images/reed_schematic.png ../_images/reed_schematic2.png

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/2.2.4fritzing.png

Passo 2: Cambia la directory.

cd ~/raphael-kit/c/2.2.4/

Passo 3: Compila.

gcc 2.2.4_ReedSwitch.c -lwiringPi

Passo 4: Esegui.

sudo ./a.out

Il LED verde si accenderà quando il codice sarà eseguito. Se si avvicina un magnete al modulo reed switch, il LED rosso si accende; allontanando il magnete, si riaccende il LED verde.

Nota

Se non funziona dopo l’esecuzione o compare un messaggio di errore: "wiringPi.h: No such file or directory", consulta Installazione e verifica di WiringPi.

Codice

#include <wiringPi.h>
#include <stdio.h>

#define ReedPin             0
#define Gpin                2
#define Rpin                3

void LED(char* color)
{
    pinMode(Gpin, OUTPUT);
    pinMode(Rpin, OUTPUT);
    if (color == "RED")
    {
        digitalWrite(Rpin, HIGH);
        digitalWrite(Gpin, LOW);
    }
    else if (color == "GREEN")
    {
        digitalWrite(Rpin, LOW);
        digitalWrite(Gpin, HIGH);
    }
    else
        printf("LED Error");
}

int main(void)
{
    if(wiringPiSetup() == -1){ // se l'inizializzazione di wiring fallisce, stampa un messaggio sullo schermo
        printf("setup wiringPi failed !");
        return 1;
    }

    pinMode(ReedPin, INPUT);
    LED("GREEN");

    while(1){
        if(0 == digitalRead(ReedPin)){
            delay(10);
            if(0 == digitalRead(ReedPin)){
                LED("RED");
                printf("Detected Magnetic Material!\n");
            }
        }
        else if(1 == digitalRead(ReedPin)){
            delay(10);
            if(1 == digitalRead(ReedPin)){
                while(!digitalRead(ReedPin));
                LED("GREEN");
            }
        }
    }
    return 0;
}

Spiegazione del Codice

#define ReedPin             0
#define Gpin                2
#define Rpin                3

Il pin GPIO17, GPIO27 e GPIO22 della T_Extension Board corrispondono rispettivamente ai GPIO0, GPIO2 e GPIO3 in wiringPi. Assegna GPIO0, GPIO2 e GPIO3 a ReedPin, Gpin e Rpin.

void LED(char* color)
{
    pinMode(Gpin, OUTPUT);
    pinMode(Rpin, OUTPUT);
    if (color == "RED")
    {
        digitalWrite(Rpin, HIGH);
        digitalWrite(Gpin, LOW);
    }
    else if (color == "GREEN")
    {
        digitalWrite(Rpin, LOW);
        digitalWrite(Gpin, HIGH);
    }
    else
        printf("LED Error");
}

Imposta una funzione LED() per controllare i 2 LED, il parametro di questa funzione è color.

Quando color è "RED", imposta Rpin su HIGH (accendi il LED rosso) e Gpin su LOW (spegni il LED verde); quando color è "GREEN", accendi il LED verde e spegni quello rosso.

while(1){
        if(0 == digitalRead(ReedPin)){
            delay(10);
            if(0 == digitalRead(ReedPin)){
                LED("RED");
                printf("Detected Magnetic Material!\n");
            }
        }
        else if(1 == digitalRead(ReedPin)){
            delay(10);
            if(1 == digitalRead(ReedPin)){
                while(!digitalRead(ReedPin));
                LED("GREEN");
            }
        }
    }

Leggi il valore del modulo reed switch, se il valore letto 2 volte è 0, chiama LED("RED") per accendere il LED rosso e stampa "Rilevato materiale magnetico!".

Se il valore è 1, il LED verde si accende.

Immagine del fenomeno

../_images/2.2.4reed_switch.JPG