Buongiorno a tutti,
premettiamo di essere digiuni di elettronica, di programmazione sull'Arduino, nonchè della sua corretta configurazione. Abbiamo la necessità di far funzionare da remoto un motore per noi importante.
Chiediamo aiuto a voi, non sappiamo a chi rivolgerci, per poter risolvere il problema che si è venuto a creare nel momento in cui abbiamo provato ad effettuare nuovamente i collegamenti della nostra unità, nel tentativo di attivare un pc e un motore elettrico gestiti da remoto.
Siamo dovuti entrare in contatto con la realtà dell'ArduinoUno per supplire alle generose capacità di una persona che poche settimane addietro, prematuramente purtroppo è scomparsa, lasciandoci alla mercè di un dispositivo del quale non sappiamo poco e nulla, ma che per via di un trasferimento in altro locale, tale unità composta da:
ArduinoUno
Schedina relè
Computer pc
Motore elettrico
Due prese intelligenti wifi
sono stati necessariamente scollegati e disattivati per effettuare il trasloco. E qui che noi siamo andati in panico in quanto ora non sappiamo più come regolarci!
Infatti al momento di riconfigurare nuovamente tutta l'unità, “qualcosa” non andata per il verso giusto, dato che dopo il trasferimento, tale unità non ha più ripreso a funzionare, come invece succedeva in precedenza.
Fatta questa doverosa premessa, proviamo a spiegare le funzionalità (vogliate perdonare la nostra non qualificata sintassi) attribuite all’ArduinoUno anticipando che, sia il codice scritto a suo tempo per far fungere le funzioni, dovrebbe essere stato scritto correttamente e sia i principali collegamenti elettrici tra ArduinoUno, schedina relè e motore elettrico, sono rimasti tali e quali, fatte eccezioni per il cavo USB che collega l'Arduino al pc, le rispettive alimentazioni elettriche dell'Arduino, del pc, del motore elettrico e di 2 prese intelligenti wifi
Va da se che è di vitale importanza per noi far funzionare il pc e il motore elettrico da remoto per mezzo di un secondo pc via internet. Ma non è questo il nostro problema.
Le funzionalità che furono programmate all’ArduinoUno sono quelle di:
a) consentire di accendere/spengere da remoto sia il pc con Win 10 (nel bios del pc purtroppo non è presente nessuna procedura per l'accensione da remoto tipo: "Wake on Lan" et simili) e sia l'ArduinoUno con la schedina relè;
b) dopo l’accensione del sopraddetto pc per mezzo di un semplice programmino d'interfaccia dell'Arduino era possibile accendere il motore elettrico per mezzo di un click (pulsante on), simulando però due specifiche pressioni distanziate tra loro da circa un secondo. Soltanto dopo questa doppia pressione era possibile attivare il motore elettrico.
Tuttavia nella vecchia configurazione curata dal socio scomparso, ricordiamo che a monte della presa di alimentazione del pc e del motore elettrico erano inserite le prese intelligente, gestite via Wifi, le quali permettevano di dare e togliere corrente sia al pc, una volta spento correttamente come da prassi richiesta da Microsoft e sia al motore elettrico.
A computer acceso per mezzo del programmino dell’ArduinoUno (in fondo alla mail alleghiamo lo screenshot dell'interfaccia) con un semplice click (tastino on) era possibile accendere il motore elettrico.
Questo avveniva simulando la doppia pressione - distanziata da circa un secondo - necessaria per accendere il motore elettrico, non prima però di aver dato corrente al motore elettrico tramite impulso di una delle due prese intelligenti.
Sempre tramite il programmino dell’ArduinoUno era inoltre possibile con un click, spengere il motore (tasto off dell'interfaccia ArduinoUno), questa volta simulando però una singola pressione.
d) Tramite la 2a presa intelligente WiFi era possibile infine togliere la corrente per spegnere definitivamente il motore elettrico
Ora quello che domandiamo è sapere intanto:
1) la procedura, eventualmente se ritenete sia necessario, dover caricare nuovamente in memoria dell'Arduino il codice di cui abbiamo conservato copia realizzata dal nostro socio e che alleghiamo in fondo alla mail, al vostro cospetto per una ulteriore analisi-verifica.
2) come devono essere installati e qual'è l'ordine corretto di tutte le unità di cui sopra affichè possano ritornare a funzionare? Purtroppo nessuno di noi ricorda l'ordine preciso di come sono stati configurati i vari componenti.
Vi ringraziamo della pazienza e della premurosa attenzione che vorrete dedicare a questa nostra disfunzione, per noi di fondamentale, supplicandovi di aiutarci a risolvere la questione!
Grazie a nome di tutti i soci del circolo GVN
Il nostro codice ArduinoUno:
// Relay
//10 gennaio 2020
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
digitalWrite(relay4,HIGH);
Serial.begin(9600); // set up Serial library at 9600 bps
}
void loop()
{
if( Serial.available() >= 0 ) // all incoming communications are fixed length at 6 bytes including the \n
{
char* cmd;
char* data;
char temp[10];
int len = 0;
char str[20];
memset(str, 0, 20);
// I don't personally like using the \n as a command character for reading.
// but that's how the command set is.
Serial.readBytesUntil('\n', str, 20);
cmd = str + 1;
data = str + 2;
// useful for debugging to make sure your commands came through and are parsed correctly.
if( false )
{
sprintf( temp, "cmd = >%c%s;", cmd, data);
Serial.println(temp);
}
switch( *cmd )
{
// OUT 1 ON
case 'A':
digitalWrite(relay1, HIGH);
delay(500);
digitalWrite(relay1, LOW);
delay(500);
digitalWrite(relay1, HIGH);
delay(500);
digitalWrite(relay1, LOW);
delay(500);
digitalWrite(relay1, HIGH);
//sprintf( temp, "1 ON", cmd, data);
//Serial.println(temp);
//Serial.println("Relay 1 ON");
break;
// OUT 1 OFF
case 'E':
digitalWrite(relay1, HIGH);
delay (500);
digitalWrite(relay1, LOW);
delay (500);
digitalWrite(relay1, HIGH);
Serial.println("Relay 1 OFF");
break;
// OUT 2 ON
case 'B':
digitalWrite(relay2, HIGH);
Serial.println("Relay 2 ON");
break;
// OUT 2 OFF
case 'F':
digitalWrite(relay2, LOW);
Serial.println("Relay 2 OFF");
break;
// OUT 3 ON
case 'C':
digitalWrite(relay3, HIGH);
Serial.println("Relay 3 ON");
break;
// OUT 3 OFF
case 'G':
digitalWrite(relay3, LOW);
Serial.println("Relay 3 OFF");
break;
// OUT 4 ON
case 'D':
digitalWrite(relay4, HIGH);
Serial.println("Relay 4 ON");
break;
// OUT 4 OFF
case 'H':
digitalWrite(relay4, LOW);
Serial.println("Relay 4 OFF");
break;
}
}
}