Modulo RF 433Mhz funziona solo con lo sketch di esempio

Salve mi chiamo Alessandro e sono un ingegnere elettronico di vecchia data. Ho iniziato le mie prime esperienze con il basic del Commodore 64 per poi passare al suo linguaggio macchina (chip 6510). Varie esperienze studentesche col GW-basic (M20) e poi praticamente mi sono avvicinato a ogni linguaggio che andava di moda. In seguito il C e C++ l'hanno fatta da padroni. Data l'età ho deciso di lasciare ai giovani il Python e tutto il mondo .net. Da ragazzo con in mano la rivista "nuovo elettronica" mi sono dilettato con i sui schemi (che non comprendevo minimamente) armato di pennarelli per disegnare i circuiti sulle schede di rame, acido e vaschette e saldatori che sembravano più delle saldatrici. I percorsi lavorativi poi non mi hanno consentito di approfondire Il mio background di elettronica e mi sono dedicato completamente allo sviluppo software. Negli anni però ho sempre mantenuto un certo grado di attenzione a quello che era il mondo dell'elettronica. Ho accumulato un sacco di materiale in particolare di Arduino. Rimboccate le maniche, di recente mi sono dedicato allo sviluppo di numerosi progetti. Sì sono sempre completati senza grosse difficoltà. Naturalmente l'accesso alla rete e in particolare al vostro utilissimo forum risolve praticamente la totalità dei problemi che si possono incontrare. Mi piace il problem solving e sono abituato ad affrontare i problemi che possono derivare sia da impianti elettrici che dalla programmazione. In questo caso però mi sono arreso. Nell'ambito di un progetto più vasto che comprende un modulo SIM900 vari relè RTC ed altre schede. Ho voluto inserire anche un modulo di trasmissione RF 433 MHz. È stata la prima cosa che ho testato. Tramite il modulo ricevitore o letto i codici del telecomando per aprire il cancello sfruttando Il codice di esempio (ReceiveDemo_Advanced) riportato nella libreria RCSwith. Sfruttando sempre un esempio della medesima libreria (SendDemo) per la trasmissione del codice sono riuscito a far aprire Il cancello praticamente al primo tentativo. Inserito il codice del progetto generale però sembra non funzionare. Quindi ho provveduto a riportare tutto alla situazione più semplice possibile: arduino collegato tramite USB al PC che ne fornisce anche l'alimentazione e tre fili di collegamento con il modulo trasmettitore VCC e GND collegati rispettivamente al PIN 5 V e GND mentre ho collegato Il PIN di trasmissione al pin #2 in modo tale da poterno utilizzare anche per la ricezione. In ricezione (naturalmente avendo collegando il modulo di ricezione) è necessario utilizzare l'INT0 collocato proprio su suddetto PIN. Caricato lo sketch di esempio che riporto qui di seguito tutto funziona correttamente (il più delle volte): il cancello si apre immediatamente dopo il download del SW. Ma come provo a alterare minimamente il codice ad esempio facendo la chiamata alla funzione su richiesta tramite seriale o tramite pulsante non c'è verso di far aprire il cancello (mai neanche una volta).
Mille prove: antenna su, pin EN a Vcc, e via dicendo ma poi torno sempre al punto di partenza. Se scarico il codice di esempio (con i dati in linea con quanto ricevuto dal mio telecomando) il cancello si apre. Cosa cambia se inserisco 2 righe di codice nel mezzo?.
Bandiera bianca e chiedo aiuto a voi.

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() { Serial.begin(9600);
mySwitch.enableTransmit(4);
mySwitch.setPulseLength(293);
mySwitch.setProtocol(11);
mySwitch.setRepeatTransmit(2);
}
void loop() {
mySwitch.send("010100110001");
delay(10000);
}

P.S.
Utilizzo Arduino NANO. Il modulo di trasmissione e ricezione è quello dell'immagine.

Sapreste indicarmi una strada per trovare risolvere il problema?

Grazie per l'attenzione.

Buonasera e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. ;)

Mi scuso per la disattenzione. Nonostante avessi letto più volte il regolamento non riuscivo ad capire come aggiungere la presentazione nella sezione indicata. E ho pensato di rimediare inserendo tutto nel post precedente. Ho provveduto ad inserire la presentazione, spero correttamente, nella sezione apposita.

Modificando il codice in questo modo:

void loop() {
//mySwitch.send("000100110001");
/**/
if(!digitalRead(6)) mySwitch.send("000100110001");
delay(500);
}

oppure in questo

void loop() {
if(Serial.available()>0){
  mySwitch.send("000100110001");
  Serial.println("Send Radio");
  Serial.read();
}*/
delay(500);
}

Il cancello non dà segno di vita.

Cos'e' pin 6?
Il tuo codice sta 99.99% di tempo in delay e quindi non legge niente.

void loop() {
    if (!digitalRead(6)) {
        mySwitch.send("000100110001");
        delay(500);
    }
}

Mi scuso per l’imprecisione. Il pin 6 è un ingresso digitale qualsiasi per triggerare l’invio dei dati.
Verifico l’effettiva lettura tramite l’output del serial monitor.
Dopo un ulteriore controllo ho verificato che anche lo sketch di esempio in realtà funziona solo immediatamente dopo il download. Durante i successivi richiami della funzione mySwitch.send all’interno del loop il cancello non viene più aperto. Per poterlo riaprire dovo rifare il download dello sketch. Tenderei ad escludere un problema hardware. Durante i successivi download non credo che l’alimentazione e il pin di trasmissione subiscano variazioni tali da alterare il comportamento della scheda di trasmissione.

  • Transmitter(WL102-341) input: 2.0V-3.6V

Ho effettuato altre prove. Come suggerito da Kmin ho provato a collegare l’alimentazione al pin 3.3V ed un partitore all’ingresso del modulo ma il comportamento ne risulta inalterato. Nella documentazione del modulo (NON un vero e proprio datasheet) riportava che il modulo è in grado di sopportare fino a 5V. Ho provato a comandare delle vecchie prese telecomandate senza riscontrare problemi. Quindi mi sono deciso a tirare fuori l’oscilloscopio per vedere se ci fossero delle differenze tra il segnale inviato immediatamente dopo il download e quelli invece inviati su comando. Ma non sono riuscito a notare variazioni degne di nota ne nell’alimentazione (cosa quasi ovvia) che nel segnale. Immediatamente prima del download sul pin dei dati compare una oscillazione di 0.3V per 4-5 cicli 20-30ms di periodo. Non credo che influenzi più di tanto il trasmettitore. Mi sono appena accorto che pizzicando con le dita l'antenna mentre invio il comando il cancello sembra aprirsi praticamente sempre. L'antenna è quella data in dotazione con i moduli (quella più corta).

Non credo che e' corretto, wl102 chiede 3V3. Cmq tua problema sembra di essere diversa, o gnd o antenna.
Verifichi connessione gnd e provi con un'antenna semplice filo 17cm.

Chi la dura la vince, o almeno spero.

Anche so ho già acquistato dei telecomandi programmabili con batteria da 3V (CR2032) che funzionano a meraviglia (dato che no ho già diversi) da smontare e inserire nel circuito collegandoli ai 3.3V, non ho desistito nel fare qualche altra prova. Innanzi tutto mi sono accorto che la centralina della FAAC (modulo ricevitore OMNIDEC) è programmabile. Non è lui a fissare il codice bensì lo acquisisce dal telecomando. Quindi quasi sicuramente mi sarebbe bastato impostare un codice nel software e registrarlo sulla centralina tramite il trasettitore. Ma andiamo avanti. Il codice di esempio di trasmissione:

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
 Serial.begin(9600);
 // Transmitter is connected to Arduino Pin #10  
mySwitch.enableTransmit(10);
 // Optional set pulse length. 
mySwitch.setPulseLength(321);
 // set protocol (default is 1, will work for most outlets) 
 // mySwitch.setProtocol(2);
 // Optional set number of transmission repetitions. 
 // mySwitch.setRepeatTransmit(15);
 pinMode(13,OUTPUT);
}
void loop() { 
mySwitch.send("100000101100100011001000"); 
digitalWrite(13,HIGH); delay(500); 
digitalWrite(13,LOW); delay(10000); 
}  

tratto dal sito: “https://randomnerdtutorials.com/decode-and-send-433-mhz-rf-signals-with-arduino/“

imposta la lunghezza dei frame “setPulseLength(321)” prima di definire il protocollo “setProtocol(2)“.

Con i seguenti codici letti dal mio telecomando:

Decimal: 305 (12Bit) Binary: 000100110001 Tri-State: 0F010F PulseLength: 292 microseconds Protocol: 11
Raw data: 10528,572,92,652,336,652,336,648,660,332,336,648,340,644,668,328,656,332,332,648,340,648,344,640,668,

ottenuti dal codice di esempio della libreria RCSwitch() tramite l’opportuno modulo ricevente, mi sono limitato a sostituire i valori del protocollo e del tempo dei frame. E come ampiamente già discusso non ottenevo il risultato desiderato (aprire il cancello, possibilmente quando volevo io e non casualmente). Dando una occhiata alla libreria ho visto che il set del protocollo sovrascrive la lunghezza del frame. Invertendo la posizione delle 2 righe (con gli opportuni valori) il cancello si apre ad ogni chiamata della procedura. Ho dato una occhiata anche all’esempio dei trasmissione della libreria “SendData“ e le istruzioni sono collocate nell’ordine corretto. Diversi siti comunque riportano l’esempio del link sopra indicato.
Quindi direi (spero) problema risolto.
Grazie a tutti per gli interventi.
P.S.
Probabilmente se avessi postato fin da subito l’intero codice dell’esempio (invece del solo loop()) sarebbe stato meglio.

Buna giornata a tutti.

Risolti tutti i problemi collegate alle singole schede sono riuscito ad assemblare tutto assieme.

Poco elegantemente ho utilizzato una scatola di derivazione 10x10cm.

Al suo interno ho inserito:

  1. Scheda arduino Nano con un minimo di circuiteria (led, ecc.)
  2. Modulo trasmettitore RF WL102-341
  3. Modulo ricevitore RF RX470-4 (versione aggiornata WL101-341).
  4. Modulo Sim900.
  5. Modulo doppio Relè.

Come giustamente indicato da kmin il modulo trasmettitore va alimentato da 2-3.6V. Quindi ho provveduto a collegarne l’alimentazione al pin 3.3V di arduino. Per pigrizia (e mancanza di spazio) ho lasciato il comando su un pin di arduino senza schiftarne il livello. Provvederò sulla prossima scheda. Come alimentazione ho utilizzato un alimentatore per cellulare da 2.8A. So che non è l’ideale ma sembra funzionare. Farò sapere se sorgeranno degli inconvenienti.

Dato che mi rimaneva un buco nella scatola ho pensato bene di inserire anche il modulo di ricezione RF (testato separatamente e funzionante). Ma non sono riuscito a fargli ricevere nulla. Immaginavo che la vicinanza delle antenne, tra loro e la circuiteria, potesse dare dei problemi. Assembla e disassembla tutto (più volte), singolarmente i vari componenti funzionano perfettamente. Alla fine mi sono accorto che l’anomalia dovuta al modulo di trasmissione RF. Nonostante l’accrocchio di cavi e schede se il modulo trasmettitore è NON alimentato il ricevitore funziona. Quindi (nella prossima scheda) provvederò a tagliare l’alimentazione con un transistor e visto che ci sono adattare anche il livello del segnale di ingresso.
Il modulo di trasmissione è dato per una modulazione di tipo ASK/OOK. E disponibile anche una modalità di basso consumo che porterebbe a 1uA la corrente assorbita. Con un solo pin disponibile (DATA) mi sembra difficile implementare tutte le modalità. Credo che il WL102 nella configurazione del modulo che ho acquistato (En è collegato internamente a Vcc quindi non utilizzabile) trasmetta solo come ASK e quindi in continuazione. Il livello di assorbimento di 5mA anche con DAT basso confermerebbe il mio sospetto. Ciò chiaramente saturerebbe l’antenna di ricezione oscurando qualsiasi altro segnale.
Grazie per l’attenzione.

Saldatore lo risolve.

Grazie kmin per per l’informazione sul ponte da dissaldare. Ci ho dato una bella occhiata ma temo che sia al di fuori delle mie capacità. Tutto troppo piccolo. Ho tribulato solo per riuscire a toccare i contatti con i puntali del tester. Poi saldare addirittura un cavo da collegare a En … distruggerei sicuramente quello che ci sta intorno. Ciò non togli che lo potrei far fare a qualcuno dei smanettoni che conosco. Oppure comprare un modulo già con il pin En non a Vcc.
Ora mi preoccupa un’altra cosa. Mi sono accorto che con il trasmettitore alimentato non funziona più nessun telecomando del cancello. Non ho verificato con altri dispositivi RF. Come stacco l’alimentazione tutto riprende a funzionare. Questo rafforza la mia idea che il trasmettitore moduli in continuazione (tipo ASK). Dando una occhiata alla libreria ho notato che al termine della trasmissione la routine porta comunque a LOW il pin DATA del MC per sicurezza. Fermo restando che il taglio dell’alimentazione (del solo modulo trasmettitore) risolverà sia questo problema che quello della ricezione mi piacerebbe avere qualche riscontro in più su questo comportamento.

Se non ricordo male, en pin è collegato, quindi basta rimuovere ponte. Verifichi prima con multimetro però.

Posso confermare quello indicato da kmin. Avevo già provato la resistenza sui pin ma senza fortuna (essendo la serigrafia posta sul lato opposto dei componenti smd testavo i pin sbgliati). Ho rieseguito le misurazioni con pi attenzione ed effettivamente En risulta collegato a Vcc. Non so per se a monte o a valle della resistenza (da 0ohm). Comunque su forum ho trovato questo riscontro:
”Since I am awaiting shipment of another 433 Mhz module, I figured I would try desoldering the jumper resistor. I can confirm that doing so is all that is needed. The En pin on the connector is then isolated from Vdd but still connected to the chip.”.

Pertanto penso che il consiglio sia valido. Rimuovere la resistenza non dovrebbe essere così complicato. Comunque anche così facendo avrei sempre il problema di adattare i livelli delle tensioni sia di En che di DATA. Dato l’esiguo assorbimento di corrente del modulo ho provveduto ad alimentarlo con una uscita di arduino taglia da 2 diodi da 0.7V di soglia. Stessa cosa per il segnale. Ora sembra funzionare tutto correttamente. Appena mi arriva il nuovo modulo (identico al vecchio) proverò la procedura indicata da kmin.
Sarei curioso comunque di capire cosa cambi tagliare l’alimentazione o mandare il modulo in stand-by. Non ho a disposizione apparecchiature per radiofrequenze per poter eseguire dei test. Vi aggiorno appena ho il nuovo materiale e dopo qualche prova.

Se lo alimenti da output arduino, poco cambia.
Ma non è stato disegnato per quello. Maggior parte di mcu moderni non hanno capacità di alimentarlo.