apertura porte da PC

Ciao a tutti

Scopo del progetto
automazione cancelli

Descrizione:
Mi servirebbe avere un applicazione sul PC, sempre in primo piano con 4 pulsanti, ognuno per l'apertura di un cancello.

Esistente :
4 cancelli automatici comandati in radiofrequenza con 4 telecomandi. Ogni cancello ha una sua centralina in cui ho trovato un contatto pulito per azionare il cancello. I cancelli non sono molto distanti e non ci sono muri tra i cancelli che possano ostacolare rediofrequenze.

struttura comunque molto vecchia con muri troppo spessi che preferirei non bucare per cablaggi.

Ho portato un cavo ethernet al cancello centrale.

Materiale/controllori già a disposizione che potrei usare;
Non so mai se le mie pensate siano valide e cerco sempre conferme da esperti, ma usando quello che ho a disposizione metterei un arduino uno con shield ethernet al cancello centrale con un relay e con rf24. Ai restanti cancelli monterei un arduino nano con rf24 e relay.

Software controllori
Su arduino uno con shield ethernet attiverei un webserver che, in base alla chiamata http ricevuta attiva il relay collegato direttamente o invia tramite rf24 segnare ad uno degli altri arduino nano per apertura del relativo cancello

Software PC
un programma che faccia apparire un piccolo riquadro sempre in primo piano con i pulsanti per l'apertura. Ogni pulsante ovviamente invia la chiamata http corretta per l'apertura del relativo cancello.

Se guardate i miei precedenti post, nonostante io non si un programmatore, il codice me lo sono sempre scritto da solo, ma a questo giro sono un po' arrugginito e ho poco tempo a disposizione, per cui - qualche esempio che per analogia possa riutilizzare/riadattare - sarebbe davvero molto gradito.

Sto dando un'occhiata ora alle librerie di mysensors, che mi pare facciano una roba simile a quello che mi serve, ma non mi è chiaro se poi sono obbligato a installare anche un ulteriore host con home assistant o similari per il controllo.

Un grazie a chiunque dedicherà un po' del suo tempo a indirizzarmi.
Marco

Useresti Ethernet shield e webserver solo per azionare quattro relè?

qualsiasi soluzione migliorativa è gradita. Non essendo un esperto è almeno tollerabile che le mie soluzioni siano svantaggiose - se ho inteso bene il senso di quello che mi dici.
Comunque sì, confermo che devo semplicemente aprire 4 cancelli. Se proprio vogliamo complicare le cose metterei dei sensori per rilevare se il cancello è chiuso o aperto, ma per quelli me la vedrò da solo successivamente. Ora devo proprio solo partire con qualche esempio che mi consenta di lavorarci velocemente lunedì mattina
grazie

Visto che hai già passato un cavo, potresti usare un collegamento seriale RS485 da casa alla prima centralina.
Puoi anche usare un adattatore per il PC, ma alla postazione PC sarebbe meglio collegare una UNO o - preferibilmente - una scheda con una seconda seriale fisica, così potresti collegare quattro pulsanti hardware da usare in alternativa alla schermata su PC se vuoi aprire un cancello ed il PC è per qualche motivo spento o fermo.

Fra la prima e le altre centraline va bene il link radio.

Se vuoi restare sul semplice, te ne esci con tre attiny sulle tre centraline secondarie ed una nano-micro sulla prima. Se ti viene complicato farti le schedine con attiny, metti nano su tutte ma considera che per azionare il relè ti servirà comunque un circuito esterno (transistor - MOSFET).

A questo punto avresti:

PC --- USB ---> CONTROLLORE CENTRALE ----- RS485 -----> PRIMA CENTRALINA --- RF ---> ALTRE C

con un semplicissimo protocollo invii dal PC al controllore centrale tramite USB (o premendo il pulsante in alternativa) il numero di cancello da aprire, da questo controllore lo invii verso la prima centralina.
La prima centralina riceve il numero, se è quello del "suo" cancello, attiva il relè. Se è quello di un altro cancello, lo invia al link radio e viene ricevuto dalle altre tre centraline. Ciascuna delle altre tre, se riceve il proprio numero attiva il relè. Il firmware delle tre centraline secondarie sarebbe elementare, se ricevi qualcosa confrontalo con il "tuo" numero e se è uguale attiva il relè, puoi anche fare identico fw ed assegnare il numero con due jumper che andrà a leggere all'accensione.
Anche gli altri fw sarebbero abbastanza semplici.
Poi ovviamente introdurrai qualche miglioramento di sicurezza ma per partire con l'esperimento può andare.

Almeno, io lo farei così.

E' un po' più lungo perché ... tocca studiare, ma in Megatopic c'è un ottima libreria, indipendente dal "media" di trasmissione che permette i collegamenti "master/slave" con più slaves.

E' ben supportata e vari utenti qui l'hanno già utilizzata ...
... tanto per evitare di reinventare la "ruota" e rischiare di farla quadrata :smiley:

Guglielmo

Ci entra nell'attiny85?

paulus1969:
Ci entra nell'attiny85?

... non so, non ho provato ... prova a compilare e vedi :wink:

Guglielmo

>grzmrc: ... guarda QUESTO link :wink:

Sono prodotti professionali, quindi ... NON ti aspettare i prezzi delle cinesate.

Guglielmo

Ho provato a seguire la strada che credevo più semplice, ma sto incontrando troppe difficoltà.
Riuscireste a fare capire a una testa dura come me, come mai non riesco a trasmettere e o a ricevere?

Ricapitolando ho un primo arduino con shield ethernet che una volta ricevuto il comando da web deve trasmettere una stringa ad un secondo arduino che dovrebbe aprire un altro cancello.
Come codice sono fermo a questo punto perché il secondo arduino non riceve nulla nella stringa text.

1 arduino schema
Schema primo arduito (trasmettitore e web)
codice primo arduino

#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <nRF24L01.h> 
#include <RF24.h> 

RF24 radio(5, 6); // CE, CSN 

const byte address[6] = "00001"; 



byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 10, 0, 64, 119 }; // indirizzo IP della shield
byte gateway[] = { 10, 0, 64, 122 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 255, 128 }; //subnet mask
EthernetServer server(80); 

int CancelloPin = 9; //  pin che apre il cancello attaccato direttamenete al relay
String readString; 


void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(CancelloPin, OUTPUT);
Serial.begin(9600);
radio.begin(); 
radio.openWritingPipe(address); 
radio.setPALevel(RF24_PA_MIN); 
radio.stopListening(); 


}

void loop(){
EthernetClient client = server.available();
if (client) {
 boolean currentLineIsBlank = true;
 while (client.connected()) {
 if (client.available()) {
 char c = client.read();
 readString.concat(c); 
 
 if (c == '\n' && currentLineIsBlank) {
 
 Serial.print(readString);

 //primo cancello
 if(readString.indexOf("Cancello=0") > 0) {
 digitalWrite(CancelloPin, HIGH); 
 delay(500);
 digitalWrite(CancelloPin, LOW);
 } 

//secondo cancello
if(readString.indexOf("Cancello=1") > 0) {
const char text[] = "Apri Sto Cancello!"; 
radio.write(&text, sizeof(text)); 
delay(1000); 
 Serial.print("Secondo Cancello");
 }

 //terzo cancello
 if(readString.indexOf("Cancello=2") > 0) {
  Serial.print("Terzo Cancello");
 }

 
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println();
 client.print("<html><head><title>Megalab.it by MGTeck & Gabry 1609</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
 
 client.print("<h4><a href='/?Cancello=0'>Cancello</a> | <a href='/?Cancello=1'>Cancello1</a></h4>");
 client.print("<h4><a href='/?Cancello=2'>Cancello2</a> | <a href='/?Cancello=3'>Cancello3</a></h4>");
 client.print("<h4><a href='/?Cancello=4'>Cancello4</a> | <a href='/?Cancello=4'>Cancello4</a></h4>");
 client.println("</body></html>");
 readString="";
 client.stop();

 } 
 } 
 } 
} 
}

2 arduino (nano)+nrf24l01
lo schema di collegamento è questo con unica eccezione dei 3,3 volt che li prendo esterni
schema nano

codice ricevitore

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";

boolean button_state = 0;
int led_pin = 3;

void setup() {
pinMode(led_pin , OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);   //Setting the address at which we will receive the data
radio.setPALevel(RF24_PA_MIN);       //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
radio.startListening();              //This sets the module as receiver
}

void loop()
{
if (radio.available())              //Looking for the data.
{
char text[32] = "";                 //Saving the incoming data
radio.read(&text, sizeof(text));    //Reading the data
Serial.print(text); //questa stringa mi risulta sempre vuota... se fosse piena potrei aprire sto cancello!!!

delay(5);
}
}

Io non so più dove sbattere la testolina. Probabilmente se trascorro un altro paio di notti sul pezzo rischio di saltarci fuori, ma se qualcuno si muove a compassione mi farebbe davvero cosa gradita :confused: .

Io direi di usare il semplice principio KISS

Il primo arduino riceve da eth e chiude 4 contatti su 4 trasmettitori per radiocomando compatibili coi 4 cancelli esistenti

Di vantaggio aggiuntivo hai che non tocchi i cancelli, ché se li tocchi e tra 15 anni si guastano ti danno la colpa

Se vuoi ti racconto di come io e papà abbiamo fatto aprire il cancello del palazzo all'avvicinarsi delle nostre 3 auto senza toccare nemmeno un filo dell'impianto

Usando the KISS principle

Scusate l'intromissione e magari l'apparente arroganza, ma non è pericoloso automatizzare i cancelli a cui possono accedere più utenti?
Non si incappa in violazioni normative?

pazzokli:
... Non si incappa in violazioni normative?

Certo che SI se metti le mani sul cancello ... e se fosse così avrei già chiuso il thread, come ho fatto più volte in passato, ma qui si parla di controllare i "telecomandi che azionano il cancello" o comunque i comandi remoti che azionano il cancello, senza mettere fisicamente le mani sull'elettronica del cancello stesso (cosa non ammessa).

Guglielmo

Vero anche questo, però mi permetto di fare un piccolo esempio
Anche io volevo fare un sistema che quando sono a 500m da casa inizia ad aprire il cancello.
Poi ho pensato: il comando di apertura/chiusura è sempre quello. E se il cancello per esigenze di altri deve restare aperto (o sta salendo un'auto) e io do il comando di chiusura senza guardare?
Non a caso il raggio d'azione del telecomando è a portata di sguardo.
Li mi sembra di aver capito che addirittura il comando arriva da remoto via web...
Detto questo non voglio sostituirmi al moderatore.
Ritornate pure OT.

pazzokli:
... Poi ho pensato: il comando di apertura/chiusura è sempre quello. E se il cancello per esigenze di altri deve restare aperto (o sta salendo un'auto) e io do il comando di chiusura senza guardare? ...

Qualunque cancello che si rispetti e che è a norme, ha tutti i sistemi di controllo per evitare il 99% degli incidenti e ... se c'è qualche cosa in mezzo, tu puoi dare anche 100 comnadi di chiudere, tanto non si chiude :smiley: :smiley: :smiley:

Guglielmo

Confermo che i cancelli hanno fotocellule e non si chiudono se c'é qualcuno in mezzo. Sul discorso 'distanza' i cancelli sono visti tramute telecamera.

Sul metodo.... io pensavo proprio di usare dei relay con i quali chiudere un contatto della centralina del cancello. Il contatto é in bassa tensione ed é tutto ben documentato nel manuale, per cui non ci sono rischi.

Poi é vero che per fare funzionare sti nrf24l01 sto sputando sangue, forse per via di un problema di coesistenza con w5100 e la soluzione alternativa di azionare i telecomandi non sarebbe male. Ma uso i telecomandi in dotazione? Il braccio di apertura é faac

grzmrc:
... la soluzione alternativa di azionare i telecomandi non sarebbe male. Ma uso i telecomandi in dotazione?

E' sempre la soluzione più semplice :smiley: ... o usi quelli in dotazione (ma poi resti senza perché li devi comunque smontare e lavorarci sopra) o ne acquisti degli aggiuntivi ...

Guglielmo

Vai in un qualunque ferramenta e te li fai copiare, usi telecomandi nuovi e certamente provati e funzionanti

Credo che non tutti siano dublicabili dal ferramenta. Alcuni di quelli con rolling code nelle istruzioni c'è scritto che durante il processo di duplicazione devono stare vicino alla centralina e ci vuole un telecomando già accoppiato.

Nulla di serio

Vai dal ferramenta
Ne compri uno adatto
E te lo duplichi da te

Oppure ti servi direttamente da un CAT

Sono solo dettagli

Secondo voi posso evitare di comperare i radiocomandi visto che non me li ripagherà nessuno?
Sui telecomandi originali c'è scritto XT4 433 SLH LR
Ho dei moduli ricevitori e dei moduli trasmettitori a 433 da usare con arduino come quelli in foto:

Usando questo sketch quando premo il pulsante del telecomando però non vedo proprio nulla
Nel programma c'è scritto (no ROLLING CODE). Se il telecomando è rolling code non c'è nulla da fare?
grazie

/*
programma per analizzare il codice di un qualsisai emettitore 433MHZ (no ROLLING CODE)
*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  //  => riceve sul pin numero 2
}

void loop() {
  if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("Codifica sconosciuta");
    } else {
      Serial.print("ricevuto ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocollo: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }

    mySwitch.resetAvailable();
  }
}