Crea sito

Progetto rilevatore apertura garage con Arduino

image_pdfimage_print

Oggi vedremo un piccolo progetto, che ha lo scopo di creare un sistema IoT in casa, per la segnalazione dell’apertura del garage, oppure di una porta, con rilevamento acustico.

Sectional-type_overhead_garage_door

Requisiti hardware

Requisiti software

Descrizione del progetto

L’idea alla base del progetto, è quello di sfruttare un micro-controllore come Arduino oppure Photon per la rilevazione attraverso un sensore magnetico l’apertura del garage, oppure di una finestra/porta. Appena viene rilevata l’apertura, il dispositivo invierà un pacchetto/segnale ad un piccolo server posto in casa, come ad esempio un Raspberry PI Zero, che attraverso un buzzer emetterà un piccolo segnale acustico. Nelle future versioni del progetto, verranno aggiunte funzionalità.

Tutte e due i dispositivi devono essere connessi alla stessa rete WiFi, in modo da poter ricevere senza problemi i pacchetti TCP. Per quanto riguarda l’utilizzo del Buzzer per il Raspberry Pi Zero, conviene usare una resistenza di 100 ohm in serie, tra il PIN GPIO6 e il dispositivo.

Codice Photon Particle

TCPClient client;
byte server[] = { 192, 168, 1, 10 };
int port = 8000;
unsigned long previousMillis = 0;
unsigned int interval = 2000;


void setup() {
  pinMode(D2, INPUT_PULLUP);
  attachInterrupt(D2, notify, RISING);
}

 void loop()
{

}

void notify(){
    unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {
     previousMillis = currentMillis;
		client.connect(server, port);
        if ( client.connected() == TRUE )
       {
          client.flush();
          client.print("open");

        }
    }
}

Codice Arduino

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,1,10);  

EthernetClient client;
int port = 8000;
int pin = 2;
unsigned long previousMillis = 0;
unsigned int interval = 2000;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac);
  }
  delay(1000);
  pinMode(pin,INPUT);
  Serial.println("connecting...");
  attachInterrupt(pin, notify, RISING);
}

void loop() {
  
}

void notify(){
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
     previousMillis = currentMillis;
    client.connect(server, port);
        if ( client.connected() == true )
       {
          client.flush();
          client.print("open");
        }
    }
}

Nota bene

Per entrambi i programmi, è necessario modificare l’IP del server, con quello relativo al Raspberry PI Zero.

Codice per Raspberry PI Zero

package main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class Main {
	public static void main(String[] args) throws IOException, InterruptedException {
		final GpioController gpioBuzzer = GpioFactory.getInstance();
		final GpioPinDigitalOutput buzzer = gpioBuzzer.provisionDigitalOutputPin(RaspiPin.GPIO_06, "Buzzer",
				PinState.LOW);
		buzzer.low();

		ServerSocket welcomeSocket = new ServerSocket(8000);

		while (true) {
			Socket connectionSocket = welcomeSocket.accept();
			BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
			String message = inFromClient.readLine();
			if (message.equalsIgnoreCase("open")) {
				buzzer.high();
				Thread.sleep(2000);
				buzzer.low();
			}
		}
	}
}

Per quest’ultimo progetto, è necessario aggiungere la libreria JAR pi4j all’interno del progetto in Eclipse.

Il codice completo del progetto, è disponibile in questo repo su GitHub.

Author: ismanettoneblog

Share This Post On

Submit a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


*