sabato 11 gennaio 2014

How to hack a desk lamp ..

Una sera mi sono trovoto a fissare la mia lampada da scrivania ormai vecchia di molti anni e come dire sono stato illuminato ...l'hacker che c'è in me si e' risvegliato .... perche non portarla nel nuovo millenio e convertirla a LED , risparmiando energia ma soprattutto eliminando quel fastidioso  "flicherio" che fanno le vecchie lampade al neon quando vengono accese ..




Ecco come si presentava la lampada prima dell'intervento..









Per prima cosa è stato necessario eliminare tutta l'elettronica..  sempre se lo starter e il reattore si possono definire  elettronica :-)





Eliminati tutti i vecchi collegamenti elettrici, il cablaggio è satto  molto semplice, è basta portare  il 220V fino all'interrittore posto sopra la lambada 

          


Completato il semplice cablaggio e' stato necessario trovare il giusto power supply che avesse le caratteristiche di potenza e il fattore di forma corretto per poter essere alloggiato nella lampada.

Dove se non su  Ebay, si proprio su Ebay  si possono trovare tanti modelli con varie potenze per led da 1-3-5-10W

                

Per il progetto della lampada ho impiegato LED da 1W incollati su un disco di alluminio tagliato della dinsione corretta per poter entrare nell'alloggiamento del vecchio neon.
I collegamenti tra led e led sono stati eseguiti con cavi di rame con diametro 1,5 mm .

Ecco le foto della sequenza di assemblaggio e saldatura LED :



Consiglio di incollare i led alla base di alluminio con una colla bicomponente termoconduttiva per migliorare la dissipazione termica dei led le migliori sono quelle con componente di argento


    

Una volta completati tutti i collegamenti dei led e prima di installare tutto nell'alloggiamento della lampada ho collaudato il tutto collegando il relativo pawer supply.

   

Visto il buon risultato tutto e' stato integrato nella lampada andando a sostituire il neon originale ..


                    




Ed ecco la lampada finita e' stata trasformata a led con un risparmio energetico di 25W passando da un consumo di 33W  a 8W  un quarto della potenza originale con una luminostà comparabile .

Questo e' la prima lampata che ho convertito ma ormai il neon nel box e molte luci in casa sono state trasformate a led ..




Cheers ..
       Francesco 


mercoledì 8 gennaio 2014

Access control with Arduino Mega & Wiegand RFID Card Reader

The needed was replace the old key access connected to my automatic access gate , during the investigation on internet the decision was to upgrade  all the access of  my house with RFID access control .
I'm a maker so I don't like by a system and install, I wand do it as i like.
First of all need to do some shopping ... ebay is my preferred market place and for electronic ICs_Processors_Store is the best, so put all the necessary  in your basket : 

N. 3 Waterproof Security Door Black ID Wiegand 26 RFID Card Reader 125KHz EM4100




N .1 Mega 2560 ATmega2560-16AU Board Arduino-compatible ( Arduino team sorry this is not the original one .. :-( ....) 






N.5pcs RFID Tokens 125Khz EM4100



This is the minimum required  for start .. sure you need a laboratory with a minimum set of  component and knowledge of Arduino programming a Electronics.

I have start my project using Arduino library developed from Monkey Board
http://www.monkeyboard.org )

You can download the original library from : https://github.com/monkeyboard/Wiegand-Protocol-Library-for-Arduino.git

Unfortunately this library is able to manage only one reader and so only one access can be managed, the library is built on the hardware capability of the Arduino UNO , only two interrupt available on pin,  both used for the two line communication used from Wiegand protocol.

Thanks  Arduino Mega more interrupt available  on external pin if you use due the limit is the number of pin ..
From Arduino web site http://arduino.cc/en/Reference/attachInterrupt is possible compare the interrupt capability for each boards :

Boardint.0int.1int.2int.3int.4int.5
Uno, Ethernet23
Mega25602321201918
Leonardo32017
Due(see below)
The Arduino Due board has powerful interrupt capabilities that allows you to attach an interrupt function on all available pins. You can directly specify the pin number in attachInterrupt().

With six external interrupt on pin change  Arduino Mega can manage three RFID readers and consequently three doors/gate, but the library need some modification for manage all the interrupt and for recognize from which readers come the request.

In the modified library the command WIENGAND.getGateActive(); was added in the WIENGND class for recognize the gate from where the request come .

Library can be download from : https://github.com/ugge75/Wiegand-Protocol-Library-for-Arduino-MEGA-2560

I will update the blog  with the first release of software in the coming weeks.

Cheers..

Francesco







domenica 20 gennaio 2013

Controllo GSM con PIC

Ho deciso di pubblicare un vecchio progetto in quanto ho dovuto riprenderlo in mano e modificarlo per installarlo come controllo in un BOX auto.

Ho usato un modem GSM modello MC35i della Siemens ( adesso vengono venduti dalla cinterion ) il modello che ho usato e' un po vecchio ma facile da reperire in interner a basso costo.

Si tratta di un modem con interfaccia seriale RS232 quindi anche relativamente semplice da collegare ad un qualsiasi micro o per provarlo alla porta seriale del computer .

La comunicazione tra Modem e uP avviene attraverso set di comendi detti "AT command" , tutto il set di comandi e il terminal user guide può essere scaricato dalla pagina del progetto  di google-code .

Inizio con mettervi la foto della scheda ( realizzata su una mille fori ) con un inizio di descrizione dei blocchi che vedremo poi in dettaglio.


Vediamo i vari blocchi Funzionali della scheda :

  • Regolatore lineare 7805 per gnerare l'alimentazione del PIC di 5V.
  • Convertitore TTL-RS232  MAX232 mette in comunicazione il modem che lavora con livelli a +-12v con il PIC che lavora a livelli TTL di 0V-5V.
  • 7 led di stato che indicano lo stato della scheda e le operazioni che stà eseguendo , connessi alla Porta-A del PIC.
  • Due output relay tipo NAIS DS2E-F 12V  di Panasonic
  • Tre digital input con pull-up su scheda , attivi Bassi.
  • Bottone per il reset della scheda.
  • Due switch di configurazione scheda.
  • Connettore per alimentazione ( nel mio caso 12V in quanto i relay sono da 12V ma e' possibile alimentare fio a 20V cambiando i relay) 
  • Connettore per In circuit programmer utile durante il debug del firmware.
  • PIC18F2620 from Microchip

Per quanto riguarda il modem :

  • Connettore porta seriale DB9 
  • Connettore per alimentazione, io ho comprato cavo sul sito : warburtech.com
  • Connettore antenna esterna, comprata sempre su : warburtech.com
Potete scaricare il progetto scritto con MPLAB X da google-code , il firmware non e' definitivo anche se funzionante, alcune parti sono ancra in debug.
Verranno periodicamente caricati gli aggiornamenti e bug fix.


venerdì 30 novembre 2012

Controlling Arduino from web page

This week I have worked on a web project due to my friends needed.
the request was: " how i can control some GPIO from web interface " ...... after some discussion and trial about the the best hardware platform to be used  the last two choose  was :


Arduino UNO  + Ethernet shield     Vs      Raspberry-Py 


At the end we have decide to proceed with  Arduino , our decision was driven from the simplicity in code writing and in speed to control the GPIO, Arduino is real-time controller instead of Rasberry were the gpio control is running under linux with some other process.

So , now I would propose to you a simple example code with different idea of gpio control so you can chose and customize as you like.



Firs section the title of your page, it can customized in code.


First type of control is a graphical control, in this case a web server needed fore store the led and button image, Arduino can not store graphical image in it's memory , only 32k bytes

Second type of control is textual so no external web server needed, color and characters can easily managed from Arduino


Last One is the analog read from one analog pin of Arduino,  ADC is 10bit so result is in the range of 0 to 1024 and the analog input from 0V to 5V.



For this project basic knowledge of HTML and Arduino programming  is required.

Fist the code and the icon image can be downloaded from Goggle code web site :
http://code.google.com/p/web-gpio-control-arduino-uno-ethernet-shield/

one time downloaded, remember to fill the right data for your home network (code  line 31 to 34)

    byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //physical mac address
    byte ip[] = { 192, 168, 1, 100 }; // ip in lan
    byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
    byte subnet[] = { 255, 255, 255, 0 }; //subnet mask


After this change, code can be load in , plug in network cable and your web server is running,   open  your browser digit the IP address assigned to Arduino in address bar and that all ..

OK easy copy and paste the code but now is needed to understand how work for customize it ..

Circuit :
during the trial I have supply the Arduni from The USB but all the option available can be used, pleas refer to official Arduino web site for detailed spec.
  • Arduino + Ethernet shield 

  • Digital OUT : PIN   6 - 7- 8 - 9 
  • Analog IN : PIN    A1

What about the code ...

I'll skip the part of standard setup , starting from the handling of the info from browser and Arduino.

First request from browser looks like the address of Arduino  -  http://192.168.1.xxx/
Arduino reply with HML code true client.println(" ") command .

How Arduino understand if Dig out should be ON or OFF based on click on browser ?
simple looking the info just after the address sent from browser as a new link request .

client.print(F("<a href=\"/?L1=1\">"));

In HTML href tag  is a link so the browse will send to Arduino the following  request :

http://192.168.1.xxx/?L1=1\

Request is stored in a string from this code :

char c = client.read();
     readString.concat(c);  //store characters to string
                            //if HTTP request has ended
     if (c == '\n' && currentLineIsBlank) {
        Serial.print(readString);
        .....
        .....


at the end in  readString The following information is stored : http://192.168.1.xxx/?L1=1\

The next action done from Arduino is check if  particular string is contained in readString whit the following if statement :

    if(readString.indexOf("L1=1") > 0) {   //lets check if LED1 OUT6 should be on
              digitalWrite(outPin6, HIGH);    // set the OUT6 on
              OUT6ON = true;
              }
    if(readString.indexOf("L1=0") > 0) {
              digitalWrite(outPin6, LOW);     // set the OUT6 OFF
              OUT6ON = false;
              }



variable OUT6ON,  OUT7ON....  can be used not only for manage the output state but also for decide which HTML code send back to browser, in the example there are button and led so icon need to be change based on output status:

if (OUT6ON) {
       client.print(F("<a href=\"/?L1=0\">"));
       client.print(F("<img alt=\"\" height=\"50\" width=\"50\"   src=\"http://www.yourserver.com/led1On.PNG\"/>"));
       }
       else
       {
       client.print(F("<a href=\"/?L1=1\">"));
       client.print(F("<img alt=\"\" height=\"50\" width=\"50\" src=\"http://www.yourserver.com/led1Off.PNG\"/>"));
       }


In this Example if OUT6ON = TRUE  image of  led1On.PNG Will be sent to , if  OUT6ON = FALSE  led1Off.PNG.




Same procedure can be used for text interface  (no need to have repository server for the icon/image ) the change is text and color.

client.print(F("<h2><a href=\"/?L1=1\"> OUT1 ON </a> | <a href=\"/?L1=0\"> OUT1 OFF </a> |"));
            //printing OUT1 status
   client.print(F("  <span> OUT1 status: </b></span>"));
   if (OUT6ON) {
      client.println(F("<span style=\"color:green\">ON</span></h2>"));
      }
      else {
      client.println(F("<span style=\"color:grey\">OFF</span></h2>"));
      }


Last part is the Analog reading , in this exaple just read from pin and print on HTML page :

client.println(F("<h1>Analog Input control</h1>"));      
    // output the value of analog input pin
    client.print(F("<h2>Analog input 1 = <b>"));
    client.print(analogRead(1));



That's all for the moment ,   I'm studying a possibility to protect the access with password or code ..

Thank to :
Arduino
SimpleCode
and my wife for the web repository space www.ercreazioni.com


lunedì 19 novembre 2012

19-11-2012 My blogging start today


So this is my first post ... why  I have chose the way to start a blog ... probably I will never get a right answer .. an why in English ... yes I know my English is no so good but it could be a great exercise for improve it.

Lets me to start to reorganize my idea, project and trials done in the past years  .. and sure reorganize my working desk ...



I'm talking mainly about electronics project ... but not only ..

Starting from this introduction post all the project, the new and old one will be published fist of all for my future memory but also for sharing my experience ( many & many design bugs and mistake)  and for helping someone in founding solution or inspiration .


In the next post i will describe how to interface an  Arduino UNO board to Serial GSM modem in particular the model MC35i from Siemens, but the hardware & software can be reused for different modem compliant with the AT command set.

Ingredient for the next project :