ELECT 38: estereografia amb shutter glasses (ulleres 3D)
Contingut
Introducció
- D'una banda tinc fotos d'insectes (o de qualsevol cosa) que són parells estereogràfics
- D'altra banda estic programant una aplicació amb C+SDL per visualitzar aquests parells estereogràfics. Ja hi ha una primera versió i aconsegueixo que no hi hagi blink de la pantalla.
El que s'ha de fer ara és l'electrònica a partir d'unes shutter glasses de Samsung (SSG-3100GB). Aquestes ulleres estan pensades per connectar-se a una TV samsung 3D. la comunicació amb la tele és de bluetooth. A mi el que només m'interessa és els vidres elèctricament polaritzables i la montura.
La idea és connectar un arduino al portàtil, i que la meva aplicació SDL estigui sincronitzada amb l'electrònica. La meva aplicació SDL haurà de tenir una llibreria per comunicar-se amb l'arduino. Com que la meva aplicació SDL està feta amb C, en principi necessitaré la llibreria arduino-serial (http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/), de manera que des de la meva aplicació enviaré els senyals per canviar l'estat de polarització de les ulleres.
Els pins de l'arduino estan connectats directament amb les ulleres, i l'electrònica ha de ser fàcil. El software gravat a l'arduino també ha de ser fàcil: rebre les comandes que vénen de l'ordinador i activar els pins de l'arduino per tal de què canvïi la polarització dels vidres.
SSG-3100GB a eBay
Al eBay es poden trobar ulleres noves, i d'altres ulleres amb els vidres trencats bé de preu. Es tracta de buscar i esperar (no tothom lliure arreu del món):
Llibreria arduino-serial
És la llibreria que em permet comunicar un programa escrit en llenguatge C amb l'arduino. En el següent exemple envio a l'arduino el caràcter 6, i el programa que tinc carregat en l'arduino (serial_read_blink.pde) el que fa és encendre el LED el número de vegades que llegeix el caràcter pel port sèrie. (~/projectes/projeccio_3d/src/arduino-serial/serial_read_blink/serial_read_blink.pde)
$ cd ~/projectes/projeccio_3d/src/arduino-serial $ gcc -o arduino-serial arduino-serial-lib.c arduino-serial.c $ sudo ./arduino-serial -b 9600 -p /dev/ttyUSB0 -s 6 [sudo] password for joan: opened port /dev/ttyUSB0 send string:6
Per tant, aquest és un bon punt de partida per al que vull fer. La versió 1.0.2 (projeccio_3d-1.0.2.c) el que fa és amb SDL intercanviar dos estereoparells a diferents rates. Ara ja estic en disposició en la nova versió d'enviar a l'arduino senyals sincronitzades que activin els pins digitals i que això farà encendre i apagar els vidres polaritzats.
Problemes de sincronització
Què és el vsync? Llegir!
- http://blackhole12.blogspot.com.es/2011/09/problem-of-vsync.html
- http://www.gamedev.net/topic/642504-how-does-vsync-work/
La idea que persegueixo en la versió 1.0.3 és bàsicament correcta, però no funciona per problemes de hardware. Jo utilitzo de moment el portàtil que té una pantall LCD de 60Hz. Està clar que si vull que les meves imatges canvïin a 20Hz o 60Hz no és la millor configuració. Normalment amb 3D es treballa amb displays de 120Hz.
D'altra banda, tinc el problema del vsync. La idea és que hauria de sincronitzar el canvi d'imatges amb el vsync. Si canvio la imatge quan l'escombrat va per la meitat està clar que no és el millor. Això en principi funciona perquè en la configuració del Catalyst tinc posat Waint for vertical refresh Always On i el tear free, que fa que aparentment està ben sincronitzat quan ho miro a ull nu. Ara bé, segur que la millor opció és Off, unless application specifies, i que sigui la meva aplicació la que controla el vsync.
Enllaços
El problema que tinc és que el pin digital de l'arduino (5V) no és prou per fer totalment fosc els vidres LCD de la shutter glass. I per tant he de ensar algun circuit que, controlat pels pins de l'arduino, em proporcioni 8-12V. Però això no deixa de ser curiós perquè la pila original que va dins la shutter glass és de 3V. Això vol dir que es pot aconseguir opacitat amb només 3V??
Aquest és un problema típic que amb una tensió de control de 5V he d'alimentar un circuit de 12V. I això sempre s'ha fet amb transistors. Ara ve, si vull aimentar varies shutter glasses (que seria la idea final), el millor és utilitzar un ULN2803 com es mostra aquí.
Amb el ULN2803 puc alimentar fins a 8 shutter glasses (amb un sol pin de l'arduino). Utilitzant més pins de l'arduino i més ULN2803s puc tenir moltes shutter glasses funcionant al mateix temps (tenint en compte el corrent consumit...)
He fet proves amb el 2803 però no funciona, suposo que el que necessito és el 2981:
After looking at the datasheet though for that IC, it looks like they can sink current, but they cannot source current, which is what I'm needing. ... Hmm, must have missed that. You need a high-side driver, then. Something like the UDN2981, perhaps. It is pretty much the equivalent to the ULN2803, except it is designed for high-side driving instead. It's even pinout compatible with the ULN2803.
Conclusions. Requisits per a 3D
necessitaria un monitor de 120Hz, i una targeta gràfica NVIDIA de les recomanades, i assegurar-me de què és compatible amb Linux. Per tant, la idea d'utilitzar el portàtil amb la configuració actual queda una mica descartada.
El millor serà agafar un ordinador de sobretaula, i comprar una targeta NVidia adequada i un monitor adequat. La llista de targetes gràfiques aptes per a 3D serien:
que es poden trobar per eBay a un preu raonable. Per instal.lar els drivers per Linux/Ubuntu: (es dóna la informació de les targetes compatibles)
De totes maneres, de res serveix un ordinador/videocard potents si el monitor no està a l'altura. S'ha d'anar a buscar un monitor de 120Hz.
Per a un monitor s'ha de tenir en compte el tamany (polzades), resolució que suporta, i velocitat de refresc (buscar 120Hz). Es poden trobar coses com aquesta:
Philips 3D LCD monitor, LED backlight 273G3DHSB G-line 27" / 68.6cm 3D, shutter glasses with SmartImage
- http://www.ebay.es/itm/Monitor-PC-3D-de-27-con-gafas-3D-activas-/251337615729?pt=LH_DefaultDomain_186&hash=item3a84e3a971
- http://download.p4c.philips.com/files/2/273g3dhsb_00/273g3dhsb_00_dfu_eng.pdf
creat per Joan Quintana Compte, juny 2013