Oct 25, 2010

Oct 21, 2010

HDR, High Dynamic Range

En una fotografia amb gran contrasto de llum, la imatge final (si no la tractem) ha d'esser un compromís entre les zones clares i les fosques.
Afortunadament moltes càmeres actuals ens permeten fer fotografies amb contrast intel·ligent, però si volem un control més acurat del resultat podem usar la següent tècnica:

Programem la càmera de tal manera que automàticament ens faci 3 fotografies, la primera seria la 'correcta' la següent
 -2EV i la tercera +2EV (mireu-vos el manual de la vostra càmera, si és porfesional o prouser, segur que  trobeu com fer-ho i si no ho podeu fer a mà).

Així doncs, tenim 3 fotografies una 'correcta' un altre 'clara' i un altre 'fosca'. La fotografia ideal seria una composició de les 3. De la 'correcta' agafem les mitges llums, de la 'clara' les penombres i de la 'fosca' les zones d'alta lluminositat.

Finalment, per obtenir la foto ideal, usem internet on, gràcies a la feina de genis altruistes, trobem eines com el següent programa: EnfuseGUI.

Properament publicaré exemples. De moment podeu veure aquest de HDR a Wikipedia


A la Canon EOS 400D/Rebel XT podem canviar aquest ajust al menú AEB (Exp. Sec. en castellà) i si a més posem la càmera en modus ràfega (Continuous shooting), quan premem el disparador tindrem una ràfega de 3 (i només 3) fotografies cada una exposada tal com hem definit al menú AEB.

Informació Exif de les fotografies

Usant el programa ExifTool podem consultar i modifica la informació Exif de les fotografies.
Per usar-lo, només cal reneombrar el fitxer '.exe' amb els paràmetres que volguem. Per exemple:
  si renombrem el fitxer ExifTool.exe a:

      ExifTool(-k).exe                       Presenta les instruccions de funcionament
      ExifTool(-a -u -g1 -k).exe       Presenta totes les etiquetes Exif del fitxer
      ExifTool(-all= -k).exe              Esborrem totes les etiquetes Exif del fitxer

Un cop renombrat el ExifTool, arrosseguem amb el mouse les fotografies sobre l'executable (en Windows, en altres sistemes operatius ho desconec), i ens presentarà una finestra DOS amb el resultat (amb altres paràmetres podem fer que escrigui el resultat sobre un fitxer de text).

Una aplicació especialment útil (sobre tot si en l'arxiu hi tenim fotografies de diferents càmeres), és renombrar les fotografies amb la data de creació:

     exiftool "-FileName<createdate" %y%m%d_%h%m%s%%-c.%%e="" -d="" dir
         Rename all images in "dir" according to the CreateDate date and
         time, adding a copy number with leading '-' if the file already
         exists ("%-c"), and preserving the original file extension (%e).
         Note the extra '%' necessary to escape the filename codes (%c and
         %e) in the date format string.

Cal notar que el format aaaa-mm-dd hh:mm:ss és a més ideal per endreçar alfabèticament els fitxers
(Si el format fos dd-mm-aaaa, les primeres fotografies serien les del dia 1 de qualsevol mes i any).

Oct 20, 2010

Fotografia del Guggenheim de Bilbo

A vegades hi ha fotografies vulgars que et donen sorpreses. La original és del 2008, i 2 any i escaig després, revisant l'arxiu fotogràfic de Picassa va sortir això (i ja posats en vaig revisar altres).



Prova de Adobe Lightroom 3.2

Detall del fons original del blog al 200%:



Després de tractar-lo amb una demo de Adobe Lightroom 3.2
Ajustant l'enfocament i la reducció de soroll


Realment és una passada

Modificació de la plantilla del blog al Blogger de Google

Aquesta es la meva modificació de la plantilla del blog:

Primer cal fer una còpia de seguretat del blog:
      Disseny - Modifica l'HTML - Baixar la plantilla completa

A Disseny de la plantilla - Avançat - CSS, he afegit:

.tabs-inner .widget ul            {                                                  background: rgba(   0,   0,  0,    0);         }
.tabs-inner .widget li a          { border: rgba(   0,   0,   0, 0.3)  solid 1px;    background: rgba( 255, 150,  50, 0.2);         }
.tabs-inner .widget li.selected a { border: rgba(   0,   0,   0, 0.5)  solid 1px;    background: rgba( 255, 150,  50, 0.4);         }
.tabs-inner .widget li a:hover    { border: rgba(   0,   0,   0, 0.6)  solid 1px;    background: rgba( 255, 150,  50, 0.6);         }
.post           {                                                font-size: 80%;                                                       }
.post-header    {                                                font-size: 90%;                                                       }
.post-outer     { border: rgba(   0,    0,    0, 0.5) solid 1px; border-radius: 7px; background: rgba(   0,   0,   0, 0.5);         }
.sidebar        { border: rgba(   0,    0,    0,   0) solid 5px; border-radius: 7px; background: rgba(   0,   0,   0, 0.6);         }
.widget ul      {                                                                    background: rgba(   0,   0,   0, 0.1);         }
.widget-content   {                                              font-size: 90%;                                                    }
.content-outer  {                                                                    background: rgba(   0,   0,   0, 0.7);         }
'.fauxcolumn-inner {                                                                  background: rgba(   0,   0,   0, 0.3);         }
'.body-fauxcolumns {                                                                  background: rgba(   0,   0,   0, 0.3);         }
'.date-header {font-size: 120%; background: rgba(100, 1000, 1000, 0.4); text-align: center; max-width: 15%;  border:solid 20px rgba(100, 1000, 1000, 0.3); border-radius: 20px; 'height: 50px;}

Les 3 darreres línies estan comentades i per tant no s'apliquen.
i el resultat és:
Abans


Després


Oct 3, 2010

MS-Acces

Runtime:

Convert Twips to Píxeles
'''''''''''' Per convertir twips a pixels
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Public Const WU_LOGPIXELSX = 88
Public Const WU_LOGPIXELSY = 90
Public Const X_HOR    As Long = &H0
Public Const X_VERT   As Long = &H1
'''''''''''' Per convertir twips a pixels


Public Function TwipsToPixels(lngTwips As Long, lngDirection As Long) As Long
   'Handle to device
   Dim lngDC As Long
   Dim lngPixelsPerInch As Long
   Const nTwipsPerInch = 1440
   lngDC = GetDC(0)


   Select Case lngDirection
    Case X_HOR                  ' els pixels no son quadrats
      lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSX)
    Case X_VERT
      lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSY)
   End Select
   lngDC = ReleaseDC(0, lngDC)
   TwipsToPixels = (lngTwips / nTwipsPerInch) * lngPixelsPerInch
End Function


Public Function PixelsToTwips(lngTwips As Long, lngDirection As Long) As Long
   'Handle to device
   Dim lngDC As Long
   Dim lngPixelsPerInch As Long
   Const nTwipsPerInch = 1440
   lngDC = GetDC(0)


   Select Case lngDirection
    Case X_HOR                  ' els pixels no son quadrats
      lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSX)
    Case X_VERT
      lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSY)
   End Select
   lngDC = ReleaseDC(0, lngDC)
   PixelsToTwips = (lngTwips / lngPixelsPerInch) * nTwipsPerInch
End Function

Imprimir texto a la impresora predeterminada con Access Basic (1.x/2.0)
    'Obre el canal de la impressora
    Open "\\estacio4\zebra" For Output As #1
  
    'Configuració de la impressora
    Print #1, "^XA~TA-008~JSN^LT0^MMT^MNW^MTT^PON^PMN^LH0,0^JMA^PR4,4^MD0^JUS^LRN^CI27^XZ"
  
    'Nou format d'etiqueta i Llargada Etiqueta
    Print #1, "^XA^LL0200"
  
    'Amplada
    Print #1, "^PW639"
  
    'Codi de Barres de la 1ª Etiqueta
    Print #1, "^BY2,3,32^FT133,118^BCN,,N,N"
    Print #1, "^FD>;" & Ref_Imprimir & "^FS"
  
    'Codi de Barres de la 2ª Etiqueta
    Print #1, "^BY2,3,32^FT357,118^BCN,,N,N"
    Print #1, "^FD>;" & Ref_Imprimir & "^FS"
  
    'Referència 1ª etiqueta
    Print #1, "^FT162,139^A0N,23,24^FD" & Ref_Maca & "^FS"
  
    'Referència 2ª etiqueta
    Print #1, "^FT386,139^A0N,23,24^FD" & Ref_Maca & "^FS"
  
    'Imprimeix el nobre necessari d'etiquetes (Sortida de 2)
    Print #1, "^PQ" & CStr(Q2) & "," & CStr(Q2) & ",1,N^XZ"
  
    'Tanca el canal de la Impressora
    Close #1

.NET Framework Solutions—In Search of the Lost Win32 API
Per moure una finestra clicant el botó 'BotoDesp' (p.65)

'Constantes para SendMessage
Public Const WM_LBUTTONUP = &H202
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF010
Public Const MOUSE_MOVE = &HF012
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Function ReleaseCapture Lib "user32" () As Boolean


Private Sub BotoDesp_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    BotoDesp.Picture = DirectoriRecursos & "P" & Right(BotoDesp.Picture, 9)
    Clicat = True
    Call SendMessage(Me.hwnd, WM_SYSCOMMAND, MOUSE_MOVE, 0)
End Sub

Private Sub BotoDesp_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Clicat And Button = 1 Then
        Call SetWindowPos(Application.hWndAccessApp, HWND_TOP, -200, -200, 10, 10, 0)
        Call ReleaseCapture
        Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End If
End Sub


Private Sub BotoDesp_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    BotoDesp.Picture = DirectoriRecursos & Right(BotoDesp.Picture, 9)
    Clicat = False
End Sub

Espais de color HSL and HSV

Arduino Exemples

Arduino + Processing – Make a Radar Screen to Visualise Sensor Data

Arduino Sleep

Reduir la freqüència
Arduino Interrupts
Sleep at Arduino Playground
avr/power.h
AVR® Fuse Calculator
Arduino Sleep_Watchdog_Battery
Save power in SquidBee - sleep mode
How to save energy in the WSN sleeping the motes
Trackuino
Sleep.cpp
Really powering down this time
Power Save Mode at Arduino Forum

Reg Automàtic, Arduino

Water Level
12V Lead-Acid Monitor
12V Battery Tester
LM3914 12V Battery monitor
12V Battery
IRFZ44N: El MOS-FET de batalla para PWM
Opto-Isolated Transistor Drivers for Micro-Controllers
Controlador per panel solar
Regulador de càrrega per panel solar
Bombes

Arduino Bootloader

Installing Optiboot
Using an Arduino as an AVR ISP

Oct 2, 2010

Electrònica Tutorial

Practical Electronics and Electricity for Learning and Fun

PS2, Arduino

Practical Arduino

Software Electrònica

Pad2Pad - Online PCB Manufacturer

OpenFrameworks

Open FrameWorks
OpenFrameworks WiKi
OpenFrameworks Wikipedia

Wii, Arduino Links

Motion Plus y Nunchuck juntos en el Arduino
Wii MotionPlus + Arduino
Wii Remote WiKi
Wiimote from Willi
WiiMote
Wii Motion Plus + Arduino = Love from Random Hacks
Motion Plus and Nunchuck together on the Arduino from Random Hacks
Wiimote/Extension Controllers. Data format and connection
A Guide To using IMU (Accelerometer and Gyroscope Devices) in Embedded Applications
Arduino code for simplified Kalman filter. Using a 5DOF IMU (accelerometer and gyroscope combo)
Arduino Wire Library (I2C)
Kalman Filtered Nunchuck & Wii Motion Plus on Arduino Forum

Mètode dels mínims quadrats
float[ ] x = {x,x,x,...}, y = {y,y,y,...};
int n = x.length;              // = y.length;
float sumx=0, sumy=0, sumxy=0, sumx2=0;
for (int i = 0; i  <  n; i++){
    sumx += x[i];
    sumy += y[i];
    sumx2 += x[i] * x[i];
    sumxy += x[i] * y[i];
}
float denominador = sumx*sumy - n*sumx2;
float m = (sumx*sumy-n*sumxy) / denominador;
float b = (sumx*sumxy-sumx2*sumy) / denominador;
println(m +" "+ b);                              // y = m·x + b (si substituim x per t (temps)


WiiMote WiKi Bluetooth Conection
Filtering Sensor Data with a Kalman Filter
How to: Arduino and Nintendo Nunchuck for pan and tilt camera interface on DIY Drones

Tracking Your Fingers with the Wiimote by Johnny Chung Lee
Friday, December 21, 2007
Wiimote Finger Tracking -FAQ and Adv Discussion

Read wii nunchuck data into arduino
Wii Nunchuck Mouse
Wii Nunchuck Mouse Code Breakdown
Wiimote light follower with servo
Winscape (virtual Window) - The Making Of

Open Source Software

InkScape Vector Graphics
Virtual BreadBoard (Arduino Virtual)
Fritzing
                                       

Osciloscopis
Blender 3D
MeshLab 3D
Epoch

Software

Osciloscopis

Arduino Programació

Firmata w/ Visual Basic
Making the most of Arduino memory
8x8 RGB Matrix
Arduino Cheat Sheet
Hacking VGA lines with Arduino
Firmata
Using an Arduino as an AVR ISP (In-System Programmer)
GEM
ModKit: Entorno de programación gráfica para arduino!

Electrònica Shoping

Electan

CNC

Contraptor
ReplicatorG. A simple, open source 3D printing program

WiFi, Arduino

Configuració WiFi
“WiiChuck” Wii Nunchuck Adapter Available

CNC Sohping

eMachineShop

Tech

Optical Mouse Cam
Stepper Control
Drawdio
Johnny Chung Lee (i like it)
Winscape (Finestra virtual)

Arduino Tutorials

Tutorial Arduino
Adafruit Tutorials

RFID, Arduino

Arduino RFID ID-12
Arduino RFID ID-12
RFID Reader Detector and Tilt-Sensitive RFID Tag
Visible and Controllable RFID Tags
RFID WebBlog
Mifare
Rethinking RFID
Rethinking RFID at Microsoft Research
Rethinking RFID at Vimeo

CNC, Arduino

Motor Shield

Arduino

Arduino Home
Tinker it! Blog
The World Famous Index of Arduino & Freeduino Knowledge
Arduino listens to electret microphone
Blogs: Open-source Arduino Clock
           t r o n i x s t u f f
           Paul's Electronics
           Physical Computing
           Random Hacks Of Boredom/Genius
           Robot Room
           TodBot Blog (Bionic Arduino – Introduction to Microcontrollers with Arduino)
           VR Urban

Domòtica

Domòtica

Arduino Recursos

Amarino
Interrupcions
74XX151 Multiplexer