Interfaccia seriale per PC monitor.

Salve a tutti, mi sono iscritto a questo forum per chiedervi consigli su come improntare un progetto.
Sono uno sviluppatore di librerie C e C++ e non ho grande dimestichezza con l'elettronica.
Posseggo un monitor ASUS IPS che dovrei integrare in un sistema domotico, il processore di controllo mi dà la possibilità di controllare il dispositivo tramite interfaccia seriale RS232 oppure tramite IR output.
Per le poche conoscenze che posseggo in materia elettronica ho pensato di muovermi in questa direzione:
utilizzare i contatti dei tasti frontali del monitor (chiudendo un contatto per tasto credo) ed associare la chiusura di quel contatto ad un comando seriale (funzioni digitalRead e AnalogWrite ?).
In modo che inviato il comando 0x02 "MENU" 0x03 venga richiamato sul monitor il menù contestuale, idem per volume up, volume down e per tutte le altre funzioni richiamabili.
E' un approccio corretto secondo voi?
Che hardware arduino mi consigliate di acquistare?
I tasti frontali sono 7, quindi qualcosa che mi consenta di simulare la pressione di 7 tasti funzione e qualcosa che mi consenta di ricevere dati seriali (la trasmissione non mi interessa, quindi una comunicazione monodirezionale).
Per quanto riguarda la programmazione non dovrebbero esserci problemi, leggendo un po' di documentazione dovrei risolvermela in tempi umani.

Grazie a tutti per il sicuro valido aiuto!
Marco.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Visto che il monitor ha le interfaccie IR e RS232 userei la IR. con la IRremote puoi emulare telecomandi con Arduino e un solo LED. Non vedo sensato dover modificare la pulsantiera del monitor visto che c'é un modo non invasivo per fare quello che vuoi.

Ciao Uwe

ma quando scrivi che il processore ti permette di usare la seriale cosa intendi di preciso ? cioe' se questo monitor ha un set di comandi seriali ai quali accedere, si ci puo' interfacciare direttamente via seriale ad esso, senza andare a toccare i tasti frontali.

C'e' un connettore seriale ed un elenco di comandi ?
Hai un link a questo modello di monitor ?

Avete ragione, mi scuso per essermi spiegato male, contestualizzo meglio la situazione:
il monitor non ha nessuna interfaccia seriale o IR, è comandabile solo ed esclusivamente da pulsantiera frontale.
Il modello del monitor è ASUS PB238Q.
Per processore intendo il processore di controllo domotico a cui sono connessi tutti i componenti dell'impianto multimediale (mediante seriale e IR) di cui fa parte anche il monitor incriminato, questo processore può comunicare (come fosse un computer) mediante porta seriale oppure mediante IR output (jack TS monofonico da 3.5'').
La mia idea era appunto quella di operare la modifica per poterlo gestire come monitor per una zona audio video, oltre che come monitor stand alone per la mia workstation!
Nel frattempo mi presento nel thread apposito!

Ad una prima occhiata ai link proposti posso pensare ad una soluzione costituita da:
http://pighixxx.com/PNG/127.png
a cui collegare i contatti dei tasti (in questo caso 4) e collegare i 4 OUT a 4 dei 6 ANALOG IN di una scheda come:
http://pighixxx.com/2009pdf.pdf .
Che ne dite, potrebbe essere uno spunto valido come inizio?!

Ritratto quanto detto :wink:
Arduino uno, utilizzare DIGITAL 0 e 1 come RX e TX per la comunicazione RS232.
Utilizzare 7 DIGITAL PWM per attivare o disattivare (HIGH, LOW) dei transistori (2N2222 NPN) utilizzati come interruttori.
Ad ognuno di questi collegare 1 polo prelevato dal tasto del monitor (utilizza degli interruttori a 4 pin, misurandoli con il multimetro in controllo di continuità ho visto che chiude il circuito quando uno della fila superiore va in corto con uno della fila inferiore).
Ho delle difficoltà a comprendere la differenza delle porte DIGITAL.
Potrebbe essere un inizio di progetto buono?
Scusatemi per la nomenclatura non tecnica ma sono davvero agli inizi :slight_smile:

Riassumo quanto hai detto per verificare di aver compreso il tuo problema.

Vorresti che il tuo processore domotico via seriale trasmetta ad Arduino una serie di comandi (es. 0x02 "MENU" 0x03) per pilotare i tasti presenti su un monitor ACER.

Per la trasmissione seriale puoi usare la libreria SoftwareSerial per creare una nuova porta seriale virtuale ad esempio sui pin 2 e 3: meglio lasciare libera la porta seriale sui pin 0 ed 1 per la comunicazione PC-Arduino.

Poi dovrai preparare un routine parser per interpretare il comando ricevuto ed azionare i relè i cui contatti saranno collegati in parallelo ai tasti del monitor.

Corretto?

Quello che hai detto è tutto corretto.
Per la programmazione/comunicazione seriale PC-arduino userei la porta usb che, da come ho letto, è una USB UART (quindi una usb-serial), per cui la 0 e 1 rimarrebbero libere comunque, a meno che non siano sharate con la usb serial.
Per quanto riguarda la parte software, no problem, sono nel mio, l'idea è quella di fare ricezione sulla seriale e, quando ricevuti dati, passare in gestione ad un parser che , in base al comando, vada ad azionare il relè corrispondente al tasto funzione.
I problemi che sto incontrando sono di natura prettamente elettronica:
nel monitor ho identificato i punti di saldatura extra per ogni tasto ed un punto che fa da GND, infatti collegando un ponticello tra il GND ed il + di ogni tasto ho avuto riscontro vedendo la pressione del tasto corrispondente.
Adesso non saprei se usare dei transistors, dei relè e come prelevare la +5v per alimentare arduino.
Il monitor ha delle USB upstream e downstream, se compatibile all'amperaggio richiesto dalla board arduino potrei prelevare i 5V da lì.
Che ne dite?
Intanto grazie 1000 per l'interessamento :slight_smile:

Piccola integrazione: ovviamente il GND funziona anche se ponticello il + del testo con lo schermo delle USB ed il telaio, il problema è trovare un +5V interno al circuito di elimentazione del monitor, non c'è nessuna serigrafia che aiuti tipo +5 e GND :frowning:

OK, trovato tutto, nella scheda di alimentazione del monitor ci sono dei punti di saldatura di un connettore che riportano i +5V ed i GND.
Quindi dal monitor saldo +5V, GND, 7 cavi (1 per tasto) al + di ogni tasto funzione.
Misurando con il multimetro tra GND e + di un tasto qualsiasi a tasto non premuto passa una tensione di 3.23 V, durante la pressione del tasto si azzera, per poi al rilascio del tasto tornare a 3.23 V.
Aggiungo questa informazione per la scelta del componente usato come interruttore per pilotare il tasto.

Se è così, puoi evitare i relè, ma devi fare attenzione: sembra che la sezione pulsanti non lavori a +5V ma a 3.3V.

Con un multimetro puoi trovare i +3.3V sulla scheda del monitor che ti servono per alimentare un piccolo MOSFET N (2N7000) in configurazione ad Emettitore (Source) comune.

OK, cercherò quella tensione anche se non ho visto serigrafie sui PCB che la riportassero!
Quindi oltre le saldature elencate prima devo aggiungere i 3.3V.
I 5V + GND alimenteranno arduino uno mentre i 3.3V + GND alimenteranno i mosfet.
Ho capito correttamente?

Quindi vuoi inserire Arduino nel monitor e prelevare i +5V da quest'ultimo: metti però in parallelo un condensatore elettrolitico da 220uF.

Potresti anche provare a sfruttare la tensione di 3.3V presente sui tasti, inserendo il Drain sul pin del tasto a 3.3V ed il Source sul ground: è probabile che ci sia un resistore da almeno 3.3k e puoi sfruttarlo.

Certo se avessi uno schema sarebbe meglio.

Ho cercato il service manual del monitor ma senza successo.
Ho pensato di scattare una fotografia al PCB della tastiera (visibile qui: http://i62.tinypic.com/dgif7n.jpg), inserendo in rosso i seguenti numeri:
1 GND;
2 + tasto Power;
3 + tasto Input;
4 + tasto Down;
5 + tasto Menu;
6 + tasto Up;
7 + tasto S/A;
8 + tasto Quick fit.

Chiudendo il circuito con un cavetto tra il punto 1 ed un punto qualsiasi da 2 a 8 viene richiamata correttamente la funzione del tasto corrispondente (chiusura circuito).
Misurando con il Voltmetro, ponendo il terminale nero sul punto 1 ed il terminale rosso su qualsiasi punto da 2 a 8, viene rilevata sempre una corrente continua di 3.23 V a tasto non premuto (circuito aperto), mentre una corrente di 0 V a tasto premuto (circuito chiuso).
Ho misurato le resistenze SMD visibili sopra ogni tasto (eccetto Power, non capisco perchè) e riporto i valori:
R001 1.0 KOhm;
R002 1.991 KOhm;
R003 1.0 Ohm;
R004 1.0 KOhm;
R005 1.992 KOhm;
R006 1.0 Ohm.

All'interno della scheda di alimentazione del monitor, ho un punto da cui prelevare la +5V ed un altro punto da cui prelevare il GND.
Arduino verrebbe installato all'interno del monitor.
Con questi dati spero riusciate a consigliarmi in maniera più sicura la soluzione per realizzare questo controllo.

Ancora grazie per il tempo dedicatomi,
Marco.

A circuito non alimentato ho misurato la resistenza (Ohm) tra il punto 1 ed il + di qualsiasi tasto: risultati del test:
1-2 4.63 KOhm;
1-3 4.64 KOhm;
1-4 6.63 KOhm;
1-5 5.64 KOhm;
1-6 4.63 KOhm;
1-7 6.61 KOhm;
1-8 5.62 KOhm.

Da come sembra è ben superiore ai 3.3 KOhm di cui parlava @cyberhs, per cui il pilotaggio diretto con il mosfet dovrebbe essere corretto.
Cosa ne dite?!

...è probabile che ci sia un resistore da almeno 3.3k e puoi sfruttarlo.

cyberhs:

...è probabile che ci sia un resistore da almeno 3.3k e puoi sfruttarlo.

Scusa non volevo intendere che avessi detto una castroneria, tutt'altro, ti stavo dando ragione :slight_smile:
Considera che fino a 3 giorni fa non avevo mai studiato un circuito, quindi per me è tutto nuovo e la voglia di imparare è davvero tanta, per quello chiedo molto e ho acquistato un arduino starter kit :slight_smile:
Tornando ai consigli che mi hai dato:
pensavo di utilizzare una breadboard dove alloggiare i mosfet.
Per ogni mosfet collegare il drain sul pin del tasto (numeri nell'immagine da 2 a 8 compresi), collegare il source sul GND ed il gate ad un pin dell'interfaccia DIGITAL di arduino (uno per mosfet, quindi 7, dal numero 4 al numero 10 compresi).
Questi pin settarli con pinMode(N, OUTPUT); dove N sarà il numero del pin in questione e, per attivare il mosfet, digitalWrite(N, HIGH); impostare un delay e riaprire il contatto con digitalWrite(N, LOW); .
L'unico dubbio è che l'uscita digitale impostata su HIGH, avendo due stati logici farà uscire 5V sul gate del mosfet, essendo che il Vds è di 3.3V posso pilotarlo con un Vgs di 5V oppure è una tensione sovradimensionata od addirittura sottodimensionata?
E' corretto lo schema di collegamento che ho esposto in questo post?
Grazie per l'aiuto :slight_smile:

hai diversi modi per collegarti alla pulsantiera.
ad esempio con 7 Transistors, o 7 Mosfet , o per semplificare il circuito con un ULN2003

ULN2003.png

Stupendo l'uso di un Transistors Array ULN2003, semplifica moltissimo il posizionamento dei componenti sulla board, opterò sicuramente per quello!
Grazie del consiglio!!!
Dalle uscite dell'interfaccia DIGITAL di Arduino ai 7 ingressi del componente devo mettere dei resistori?