- 215
- 51
- CPU
- i5-2400 @3.1 GHz
- Scheda Madre
- ASRock Z77 Pro3
- HDD
- OCZ Vertex 4 128 GB + WD 500 GB
- RAM
- Corsair Vengeance 8 GB
- GPU
- Sapphire HD 7850 2GB OC Edition
- Audio
- Integrata
- Monitor
- Benq GL2240
- PSU
- Corsair TX 650M
- Case
- Thermaltake V3 Black Edition
- OS
- Windows 7 Ultimate 64 Bit
Ciao a tutti, vi presento il mio progetto, che in poche parole consiste nell’utilizzare un microcontrollore (nel mio caso Arduino UNO R3), un tastierino numerico 4x4, e un display LCD 16x2, per andare a pilotare due relè che andranno a simulare l'accensione/spegnimento forzato/riavvio del PC.
PREMESSA:
Il circuito e il programma sono perfettamente funzionanti, nessuno vi vieta di modificarli e stravolgerli. In ogni caso non mi prendo nessuna responsabilità sul mancato/errato funzionamento del circuito/, programma, o del vostro PC. Realizzatelo a vostro rischio e pericolo!
Funzionamento:
Una volta completato il tutto, il programma funzionerà in questo modo.
Avremo a disposizione 4 codici da inserire: Il primo ecciterà il primo relè e dopo un tempo molto breve (max 1 secondo), lo disecciterà (accensione PC); il secondo ecciterà il secondo relè e dopo un tempo molto breve (max 1 secondo), lo disecciterà (riavvio PC); il terzo che andrà ad eccitare il primo relè, che potrà essere diseccitato solo col quarto codice, o il primo(spegnimento forzato del PC). Il display a cosa serve? A farvi fighi con gli amici principalmente, ma anche per visualizzare lo stato dei relè, vedere se avete digitato qualcosa, e se avete digitato il codice corretto.
Componenti:
-Arduino UNO R3 o simili (tenete conto che andremo ad utilizzare quasi tutti i piedini a disposizione, ne rimarrà uno solo libero), con relativo programma scaricabile gratuitamente qui; -Display LCD 16x2 con retroilluminazione (la scelta del display cambierà la disposizione di alcuni collegamenti); -Tastierino numerico 4 righe, 4 colonne; -Due relè, Tensione di eccitamento 5v, compatibili con Arduino; -Due transistor 2N222; -Due diodi IN4007; -due resistenze da 1,5 K da ¼ watt; -Un trimmer da 10K (per il contrasto del display LCD); -Molti connettori strip, sia maschi che femmine. -Cavetti di collegamento; -Mammut elettrici; -Ovviamente saldatore, stagno, millefori, breadboard, e il necessario per la saldatura/prova su breadboard; -porta batterie con jack compatibile con Arduino; -Cavi di collegamento con la MOBO, quelli che collegano i pulsanti di accensione/riavvio alla scheda madre per intenderci; vi consiglio vivamente di procurarveli da un vecchio case in disuso; -pile compatibili col vostro porta batterie.
Programma per Arduino, con relativa spiegazione:
SALTANDO LA PARTE DI INTRODUZIONE, E CIOè FINO A "creato da Giuseppe Gianola".
[FONT=&]DA RIGO 1 A 45: Definizione delle variabili, del tastierino numerico e del display LCD.[/FONT] [FONT=&]DA RIGO 48 A 58: Settaggio delle uscite, e stampaggio di “Write the secret code!”[/FONT] [FONT=&]DA RIGO 60 A 77: Pulizia del display LCD, accensione della retroilluminazione, stampaggio del codice, che verrà nascosto sotto un “*” dopo 200 milli secondi.[/FONT] [FONT=&]DA RIGO 77 A 118: Controlla cio che viene scritto sul tastierino numerico, con ogni singolo codice, se ciò che viene scritto non corrisponde a nessun codice, la prima riga viene pulita.[/FONT] [FONT=&]DA RIGO 119 A 162: Esecuzione del primo programma se viene inserito il codice numero uno; esecuzione del secondo programma se viene inserito il codice numero due; esecuzione del terzo programma se viene inserito il codice numero tre; esecuzione del quarto programma se viene inserito il codice numero quattro.[/FONT] [FONT=&]DA 162 A 205: Stampaggio dello stato dei rele, in base al programma in esecuzione.[/FONT]
Cablaggio circuito, e spiegazione dei componenti usati:
Utilizzando le impostazioni di default dei diversi componenti c’è da passare ore a saldare e a smanettare dietro la breadboard (con impostazioni intendo i collegamenti del display LCD all’Arduino). Una prima modifica l’ho apportata ai piedini dell’LCD, che per chi non avesse mai usato questo componente, deve sapere che solitamente hanno 14 pin più 2 che servono per la retroilluminazione. In base al modello che andremo a compare gli ultimi piedini possono trovarsi a destra o a sinistra rispetto agli altri 14, e sempre in base al modello possono essere indicati con due numeri (Es. 15-16) oppure semplicemente con un “+” e un “-”. Seguendo l’immagine del mio display il cablaggio con Arduino/alimentazione sarà: Visualizza allegato 61073
I piedini 7/8/9/10 non vengo utilizzati. Il pin numero 3 del LCD va a variare il contrasto del display, può essere collegato al trimmer oppure a massa (avendo però il massimo del contrasto). Per quanto riguarda il tastierino numerico i collegamenti con il microcontrollore saranno (sempre seguendo l’immagine):
Visualizza allegato 61074
Teoricamente i tastierini numerici dovrebbero essere tutti uguali, tranne per quanto riguarda il numero di colonne e righe. In ultimo il circuito per i relè, che è sicuramente il più complesso, quindi massima attenzione quando lo provate, i contatti normalmente aperti del relè andranno collegati ai mammut elettrici, che a sua volta saranno collegati ai cavi di collegamento con la MOBO, in modo tale da poter scollegare il circuito in qualsiasi momento. I pin per eccitare i due relè sono: Relè1(accensione)=A1, relè2(riavvio)=A0. Vi lascio lo schema, e naturalmente per delucidazioni basta scrivere qui sotto! Vi lascio lo schema, e naturalmente per delucidazioni basta scrivere qui sotto!
Suggerimenti
Usate la millefori in maniera corretta, non come me :D. Provate assolutamente il circuito prima su breadboard. Per chi avesse elevate disponibilità economiche potrebbe utilizzare un Arduino Due oppure un Mega, così da poter istallare sonde di temperatura, comandare ventole e luci all’interno del proprio case, le possibilità sono prossime all’infinito. Per chi ci avesse fatto caso è avanzato un piedino (A3), e spazio sulla millefori, si può usare ancora per pilotare un altro relè, oppure per un sensore di temperatura, o magari un buzzer o altro ancora, scegliete voi!
Conclusioni
Infine vi lascio alcune foto del circuito, il tutto non è ancora perfettamente completato, devo ritagliare la mascherina del case, dove fisserò il display LCD e l’interruttore per l’accensione/spegnimento del microprocessore. Per chi avesse suggerimenti, critiche (che siano costruttive), domande dubbi o perplessità, scriva pure qua sotto che è tutto ben accetto!
Possibili modifiche:
Il circuito presentatovi fino ad ora è perfettamente funzionante,ma, ringrazio Blume per avermi fatto conoscere i fotoaccoppiatori. Questi dispositivi sostituisco perfettamente i relè, aumentando notevolmete lo spazio sulla millefori. In poche parole, dovremo andare a sostituire i due relè, i due transistor, e le due resistenze con:
-L'integrato CNY74 (che comprende due fotoaccoppiatori, vedi immagine);
-Due resistenze da 300 Ohm da 1/4 watt.
-due zoccoli per integrati a 8 pin
Prendendo in esempio lo schema qui sotto, colleghiamo il pin 1 ad una delle due resistenze e poi al piedino A1 dell'arduino, stessa cosa con il pin 4 che però andra collegato al piedino A0 dell'arduino, i pin 2 e 3 andranno a massa, e i piedini 8 e 7 andranno prima ai mammut elettrici e tramite i cavi di collegamento ai pin di start della vostra MOBO, idem con i piedini 5 e 6, che vanno però collegati ai pin di restart della vostra MOBO. Vi assicuro che è più facile a farsi che a dirsi!
I vantaggi di utilizzare questi integrati sono tantissimi tra cui:
-molto semplici da sostituire in caso di rottura dell'integrato;
-risparmio di spazio sulla millefori;
-risparmio di denaro;
-il circuito si semplifica notevolmente.
Lo consiglio per chi vuole fare modding estremo comandano anche led e ventole (attenzione all'integrato, quello consigliato da me è perfetto per le funzioni descritte all'inizio della guida). Il programma rimane invariato.
IL CIRCUITO CON QUESTA MODIFICA NON è STATO TESTATO!!!!!
PREMESSA:
Il circuito e il programma sono perfettamente funzionanti, nessuno vi vieta di modificarli e stravolgerli. In ogni caso non mi prendo nessuna responsabilità sul mancato/errato funzionamento del circuito/, programma, o del vostro PC. Realizzatelo a vostro rischio e pericolo!
Funzionamento:
Una volta completato il tutto, il programma funzionerà in questo modo.
Avremo a disposizione 4 codici da inserire: Il primo ecciterà il primo relè e dopo un tempo molto breve (max 1 secondo), lo disecciterà (accensione PC); il secondo ecciterà il secondo relè e dopo un tempo molto breve (max 1 secondo), lo disecciterà (riavvio PC); il terzo che andrà ad eccitare il primo relè, che potrà essere diseccitato solo col quarto codice, o il primo(spegnimento forzato del PC). Il display a cosa serve? A farvi fighi con gli amici principalmente, ma anche per visualizzare lo stato dei relè, vedere se avete digitato qualcosa, e se avete digitato il codice corretto.
Componenti:
-Arduino UNO R3 o simili (tenete conto che andremo ad utilizzare quasi tutti i piedini a disposizione, ne rimarrà uno solo libero), con relativo programma scaricabile gratuitamente qui; -Display LCD 16x2 con retroilluminazione (la scelta del display cambierà la disposizione di alcuni collegamenti); -Tastierino numerico 4 righe, 4 colonne; -Due relè, Tensione di eccitamento 5v, compatibili con Arduino; -Due transistor 2N222; -Due diodi IN4007; -due resistenze da 1,5 K da ¼ watt; -Un trimmer da 10K (per il contrasto del display LCD); -Molti connettori strip, sia maschi che femmine. -Cavetti di collegamento; -Mammut elettrici; -Ovviamente saldatore, stagno, millefori, breadboard, e il necessario per la saldatura/prova su breadboard; -porta batterie con jack compatibile con Arduino; -Cavi di collegamento con la MOBO, quelli che collegano i pulsanti di accensione/riavvio alla scheda madre per intenderci; vi consiglio vivamente di procurarveli da un vecchio case in disuso; -pile compatibili col vostro porta batterie.
Programma per Arduino, con relativa spiegazione:
Codice:
/* il programma permette di comandare due relè attraverso codici inseriti
mediante un tastierino numerico 4x4, e di visualizzare lo stato degli stessi
su un display LCD 16x2. Per eccitare i relè ci sono diverse funzioni:
_Inserendo il codice1/codice2, il relè1/2 si ecciteranno per un tempo determinato e successivamente si disecciteranno.
_inserendo il codice3 si andrà ad eccitare solo il rele1, e lo si potrà diseccitare solo inserendo il codice4.
I codici possono essere cambiati nelle righe:
_codice1 riga 24
_codice2 riga 26
_codice3 riga 28
_codice4 riga 30
I tempi di eccitazione dei relè possono essere cambiati nelle righe:
_rele1 riga 139
_rele2 riga 147
Creato da Gianola Giuseppe */
boolean primo=true;
int i=0;
int verifica=0,verifica2=0,verifica3=0,verifica4=0;
int rele1 = A0; //relè 1
int rele2 = A1; //relè 2
int retro = A2; //retroilluminazione LCD
char codice1 []={
'2','8','C','7'}; //codice per eccitare il primo relè, tempo poi si diseccita
char codice2 []={
'4','D','5','A'}; //codice per eccitare il secondo relè, tempo poi si diseccita
char codice3 []={
'B','6','C','9'}; //codice per eccitare il primo relè
char codice4 []={
'0','B','6','D'}; //codice per diseccitare il primo relè
char codice []={
'0','0','0','0'};
#include <LiquidCrystal.h> //include libreria LCD
#include <Keypad.h>//include libreria
const byte ROWS = 4; // 4 righe
const byte COLS = 4; // 4 colonne
char keys[ROWS][COLS] = { // Definizione mappa della tastiera
{
'1','2','3','A' }
,
{
'4','5','6','B' }
,
{
'7','8','9','C' }
,
{
'*','0','#','D' }
,
};
byte rowPins[ROWS] =
{
2, 3, 4, 5 }; // Connessione delle righe: Riga0, Riga1, Riga2 ai pins di Arduino.
byte colPins[COLS] =
{
6, 7, 8, 9 }; // Connessione delle colonne: Colonna0, Colonna1 , Colonna2 ai pins di Arduino.
Keypad kpd = Keypad( mak****map(keys), rowPins, colPins, ROWS, COLS ); // Creazione della tastiera
LiquidCrystal lcd(A4, A5, 13, 12, 11, 10); //piedini LCD
void setup()
{
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(retro, OUTPUT);
lcd.begin(16, 2); //colonne,righe LCD
lcd.setCursor(4,0); //imposta il cursure nella riga 0 colonna 0
lcd.print("Write the "); //stampa "Inserisci il codice"
lcd.setCursor(2,1); //imposta il cursure nella riga 0 colonna 0
lcd.print("secret code!"); //stampa "per accendere il PC"
}
void loop()
{
char key = kpd.getKey();
if(key)
{
if(primo)
{
lcd.clear(); //pulisce lo schermo, solo all'avvio del programma
primo=false;
}
codice[i]=key;
digitalWrite(retro,HIGH);//Accende la retroilluminazione del display LCD
lcd.setCursor(i,0);
lcd.print(codice[i]); //stampa il codice
delay(200);
lcd.setCursor(i,0);
lcd.print("*");//nasconde il codice con un "*"
if(i==3)
{
for(int x=0;x<4;x++)
{
if(codice[x]==codice1[x])//controlla quello scritto con il codice1
{
verifica++;
}
if(codice[x]==codice2[x])//controlla quello scritto con il codice2
{
verifica2++;
}
if(codice[x]==codice3[x])//controlla quello scritto con il codice3
{
verifica3++;
}
if(codice[x]==codice4[x])//controlla quello scritto con il codice4
{
verifica4++;
}
}
if(verifica==4)
{
digitalWrite(rele1,HIGH);//eccita relè1
visualizzaT(true); //stampa "R1: ON "
delay(1000);//timer in milli secondi
digitalWrite(rele1,LOW);//diseccita relè1
visualizzaF(true); // stampa "R1: OFF"
}
if(verifica2==4)
{
digitalWrite(rele2,HIGH);//eccita relè2
visualizzaT(false); //stampa "R2: ON "
delay(1000);//timer in milli secondi
digitalWrite(rele2,LOW);//diseccita relè2
visualizzaF(false);//stampa "R2: OFF"
}
if(verifica3==4)
{
digitalWrite(rele1,HIGH);//eccita relè1
lcd.setCursor(5,0);
lcd.print("BSoD?Again?"); //stampa "BSoD?Again?"
lcd.setCursor(0,1);
lcd.print("R1: ON "); //stampa "R1: ON "
}
if(verifica4==4)
{
digitalWrite(rele1,LOW);//diseccita relè1
visualizzaF(true); // stampa "R1: OFF"
}
if(verifica!=4 && verifica2!=4 && verifica3!=4 && verifica4!=4)
{
Errore ();
}
verifica=0;
verifica2=0;
verifica3=0;
verifica4=0;
i=-1;
}
i++;
}
}
void visualizzaT(boolean)//TRUE: relè1 on; FALSE: relè2 on
{
lcd.setCursor(0,0);
lcd.print(" ");//pulisce prima riga
{
if(verifica)
{
lcd.setCursor(3,0);
lcd.print("Accensione ");//stampa "Accensione "
lcd.setCursor(0,1);
lcd.print("R1: ON ");//stampa "R1: ON "
}
else
{
lcd.setCursor(4,0);
lcd.print("Restart "); //stampa "Restart "
lcd.setCursor(8,1);
lcd.print("R2: ON "); //stampa "R2: ON "
}
}
}
void visualizzaF(boolean)//TRUE: relè1 OFF; FALSE: relè2 OFF
{
if(verifica)
{
lcd.setCursor(0,1);
lcd.print("R1: OFF"); //stampa "R1: OFF"
delay(1000);
lcd.setCursor(0,0);
lcd.print(" ");
digitalWrite(retro,LOW);//Spegne la retroilluminazione del display LCD
}
else
{
lcd.setCursor(8,1);
lcd.print("R2: OFF"); //stampa "R2: OFF"
delay(1000);
lcd.setCursor(0,0);
lcd.print(" ");
digitalWrite(retro,LOW);//Spegne la retroilluminazione del display LCD
}
}
void Errore ()
{
lcd.setCursor(0,0);
lcd.print(" ");//pulisce la prima riga se codice non corretto
lcd.setCursor(5,0);
lcd.print("Error!");
delay(1500);
lcd.setCursor(0,0);
lcd.print("Incorrect code!");
delay(1500);
lcd.setCursor(0,0);
lcd.print(" ");
digitalWrite(retro,LOW);//Spegne la retroilluminazione del display LCD
}
[FONT=&]DA RIGO 1 A 45: Definizione delle variabili, del tastierino numerico e del display LCD.[/FONT] [FONT=&]DA RIGO 48 A 58: Settaggio delle uscite, e stampaggio di “Write the secret code!”[/FONT] [FONT=&]DA RIGO 60 A 77: Pulizia del display LCD, accensione della retroilluminazione, stampaggio del codice, che verrà nascosto sotto un “*” dopo 200 milli secondi.[/FONT] [FONT=&]DA RIGO 77 A 118: Controlla cio che viene scritto sul tastierino numerico, con ogni singolo codice, se ciò che viene scritto non corrisponde a nessun codice, la prima riga viene pulita.[/FONT] [FONT=&]DA RIGO 119 A 162: Esecuzione del primo programma se viene inserito il codice numero uno; esecuzione del secondo programma se viene inserito il codice numero due; esecuzione del terzo programma se viene inserito il codice numero tre; esecuzione del quarto programma se viene inserito il codice numero quattro.[/FONT] [FONT=&]DA 162 A 205: Stampaggio dello stato dei rele, in base al programma in esecuzione.[/FONT]
Cablaggio circuito, e spiegazione dei componenti usati:
Utilizzando le impostazioni di default dei diversi componenti c’è da passare ore a saldare e a smanettare dietro la breadboard (con impostazioni intendo i collegamenti del display LCD all’Arduino). Una prima modifica l’ho apportata ai piedini dell’LCD, che per chi non avesse mai usato questo componente, deve sapere che solitamente hanno 14 pin più 2 che servono per la retroilluminazione. In base al modello che andremo a compare gli ultimi piedini possono trovarsi a destra o a sinistra rispetto agli altri 14, e sempre in base al modello possono essere indicati con due numeri (Es. 15-16) oppure semplicemente con un “+” e un “-”. Seguendo l’immagine del mio display il cablaggio con Arduino/alimentazione sarà: Visualizza allegato 61073
LCD | + | - | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
Ardu. | A2 | massa | massa | Vcc | Trimmer | A4 | massa | A5 | NC | NC | NC | NC | 13 | 12 | 11 | 10 |
BL+ | BL- | VSS | VDD | Contr | RS | R/W | E | D4 | D5 | D6 | D7 |
6 | 7 | 8 | 9 | 2 | 3 | 4 | 5 |
Suggerimenti
Usate la millefori in maniera corretta, non come me :D. Provate assolutamente il circuito prima su breadboard. Per chi avesse elevate disponibilità economiche potrebbe utilizzare un Arduino Due oppure un Mega, così da poter istallare sonde di temperatura, comandare ventole e luci all’interno del proprio case, le possibilità sono prossime all’infinito. Per chi ci avesse fatto caso è avanzato un piedino (A3), e spazio sulla millefori, si può usare ancora per pilotare un altro relè, oppure per un sensore di temperatura, o magari un buzzer o altro ancora, scegliete voi!
Conclusioni
Infine vi lascio alcune foto del circuito, il tutto non è ancora perfettamente completato, devo ritagliare la mascherina del case, dove fisserò il display LCD e l’interruttore per l’accensione/spegnimento del microprocessore. Per chi avesse suggerimenti, critiche (che siano costruttive), domande dubbi o perplessità, scriva pure qua sotto che è tutto ben accetto!
Il circuito presentatovi fino ad ora è perfettamente funzionante,ma, ringrazio Blume per avermi fatto conoscere i fotoaccoppiatori. Questi dispositivi sostituisco perfettamente i relè, aumentando notevolmete lo spazio sulla millefori. In poche parole, dovremo andare a sostituire i due relè, i due transistor, e le due resistenze con:
-L'integrato CNY74 (che comprende due fotoaccoppiatori, vedi immagine);
-Due resistenze da 300 Ohm da 1/4 watt.
-due zoccoli per integrati a 8 pin
Prendendo in esempio lo schema qui sotto, colleghiamo il pin 1 ad una delle due resistenze e poi al piedino A1 dell'arduino, stessa cosa con il pin 4 che però andra collegato al piedino A0 dell'arduino, i pin 2 e 3 andranno a massa, e i piedini 8 e 7 andranno prima ai mammut elettrici e tramite i cavi di collegamento ai pin di start della vostra MOBO, idem con i piedini 5 e 6, che vanno però collegati ai pin di restart della vostra MOBO. Vi assicuro che è più facile a farsi che a dirsi!
-molto semplici da sostituire in caso di rottura dell'integrato;
-risparmio di spazio sulla millefori;
-risparmio di denaro;
-il circuito si semplifica notevolmente.
Lo consiglio per chi vuole fare modding estremo comandano anche led e ventole (attenzione all'integrato, quello consigliato da me è perfetto per le funzioni descritte all'inizio della guida). Il programma rimane invariato.
IL CIRCUITO CON QUESTA MODIFICA NON è STATO TESTATO!!!!!
Allegati
Ultima modifica: