Scrivere App per iPhone (iPad) con Windows

La via canonica per sviluppare applicazioni (App) per iPhone o iPad è nota: bisogna possedere un computer Apple, installare il software di sviluppo Xcode, studiare il linguaggio Objective-C e spendere 99 dollari l’anno per “fregiarsi” del titolo di sviluppatore Apple. Una via costosa, inutilmente complessa, un modello che credo sia in fase di estinzione.  L’alternativa è quella di scrivere applicazioni che non sono altro che pagine web, con un massiccio uso di Javascript (cosa possibile su ogni piattaforma, come ho evidenziato in alcuni post del mio blog). Naturalmente, quest’ultima soluzione ha i propri limiti e non sempre permette di raggiungere gli obiettivi prefissati.
Di recente, un amico mi ha chiesto se potevo scrivergli un’applicazione su smartphone per controllare via internet dei dispositivi elettronici situati nella sua azienda. Gli ho risposto che non c’era nessun problema e in pochi giorni ho scritto una bella applicazione Android; ho salvato l’Apk su un mio sito ed ho dato al mio amico il link per scaricarlo con il suo smartphone Samsung, per poi eseguire l’installazione “da fonti sconosciute”. Il mio amico ha seguito le istruzioni e poi mi ha chiamato: “Che bellezza !”, mi ha detto, ringraziandomi moltissimo. Poi, dopo qualche giorno, mi ha richiamato dicendo: “C’è un problema… ho fatto vedere il programma a diversi miei clienti e sono tutti entusiasti, però loro hanno lo smartphone Apple. Non puoi scrivermi lo stesso programma anche per iPhone ?”.
Ho risposto al mio amico che non uso nessun dispositivo Apple dai tempi in cui programmavo (con successo) in assembler sul validissimo processore 6502 del mitico personal computer Apple ][ . "Però", gli ho detto, "mi informo e poi ti faccio sapere".
Ho iniziato, quindi, una ricerca in internet sull'argomento dello sviluppo di applicazioni per iPhone ed ho immediatamente percepito che la cosa non era affatto semplice. Ci sono diversi tool di sviluppo, ma alla fine, per compilare ed eseguire qualcosa su uno smartphone, ci vuole una macchina Apple. Un po' scoraggiato, ho provato ad installare le versioni di prova di alcuni software, ma una volta installati questi mostravano i propri limiti. Dopo aver provato diversi IDE e tool di sviluppo, ho infine trovato un sito dove c'era uno strumento che prometteva di darmi tutto ciò che serviva a sviluppare la mia applicazione sotto Windows, usando l'IDE di Visual C++ (quest'ultimo anche edizione "express", gratuita da Microsoft) e di testare l'applicazione immediatamente su un simulatore di iPhone. Questo strumento si chiama DragonFireSDK. Ho cercato una versione "demo" per fare qualche prova, ma non c'è. Bisogna comprarlo e costa (per la versione iPhone) 99,95$ (circa 80 Euro). Tutto sommato, considerando quanto costerebbe comprare un computer Apple e pagare la licenza di sviluppatore (più il tempo necessario per impratichirsi dell'Objective-C e dell'IDE Xcode) mi è sembrato un prezzo ragionevole, anche se non proprio "cheap". Ho allora chiamato il mio amico e gli ho detto: "Ho trovato uno strumento che mi permetterà di sviluppare rapidamente l'applicazione anche per gli smartphone Apple; devi comprare questo software" e gli ho indicato il link per l'acquisto on-line. Lui ha inviato il pagamento e gli è arrivata una email con il link per il download. A prima vista, pareva una fregatura... poco più di 7.7Mbytes di roba (quasi 13$ a MB !) e nessun eseguibile tipo IDE... Sudori freddi :( poi una seconda lettura di tutte le FAQ e dei suggerimenti proposti nel sito, mi ha tranquillizzato.  Per usare questo tool, si deve avere un Visual C++ installato sul proprio computer; è un prerequisito assolutamente obbligatorio. Ho chiesto al mio amico (che ha un'azienda di antifurto e sicurezza) se aveva un portatile con installato un Visual C++ qualsiasi e lui mi ha risposto di sì, c'era un vecchio portatile con WinXp e VisualStudio 2005. Ottimo, allora installiamo il DFSDK (DragonFire SDK) su quella macchina, così me la posso portare a casa per lavorarci con tranquillità. Nel giro di due settimane ho "convertito" l'applicazione scritta per Android in una "App" per iPhone ed ho potuto installarla su un dispositivo (un iPhone 3GS, NON jailbroken) e testarla con piena soddisfazione.
Vediamo ora quali sono i passi necessari per scrivere / compilare / installare una App su un dispositivo iPhone, usando solo ed esclusivamente un computer con sistema operativo Windows e DragonFireSDK.

Allora, eseguiamo il file SetupDragonFireSDKV2_2.exe che abbiamo scaricato dal link dopo l'acquisto e poi andiamo ad esplorare la cartella nella quale è stata effettuata l'installazione. Troveremo una struttura fatta così:

dfsdk_screen1Ora apriamo la cartella Samples e troveremo una utilissima serie di esempi:

dfsdk_screen2La via migliore per fare pratica, è aprire uno degli esempi, compilarlo ed eseguirlo sul simulatore di iPhone locale. Questo simulatore, secondo me, vale da solo il prezzo del pacchetto software. Avrete la possibilità di testare il programma completamente sul vostro PC, prima di effettuare una compilazione on-line per poi avere finalmente l' App installata sul vostro autentico iPhone (nota bene, un iPhone originale, senza dover effettuare nessuna operazione di jailbreak).

Bene, procediamo e creiamo una directory di lavoro sul disco, per esempio: C:\iProgetti ; all'interno di questa directory copieremo la cartella MyFirstApp che si trova su C:\DragonFireSDK. Facciamo un'operazione di "copia" e non "sposta" per tenerci un originale che sarà utile per iniziare nuovi progetti. A questo punto apriamo la cartella C:\iProgetti\MyFirstApp e ci troveremo davanti questa situazione:

dfsdk_screen3In base ai prerequisiti necessari al funzionamento di DFSDK, dobbiamo avere Visual C++ di Microsoft installato, quindi cliccando sul file MyFirstApp.sln si aprirà il progetto completo. Nell'immagine sottostante trovate uno "screenshot" del programma (cliccare l'immagine per una visione ingrandita).

dfsdk_screen4Ora, se clicchiamo la freccetta verde del "run", vedremo apparire il simulatore di iPhone, a sinistra dello schermo. L'applicazione MyFirstApp è "vuota" e quindi non ci sarà niente di speciale da osservare, ma a questo punto è compito vostro "riempirla" con il vostro primo progetto. Qui sotto trovate lo screenshot dell'IDE di Visual C++ con il simulatore iPhone in funzione (al solito, cliccare l'immagine per ingrandirla).

dfsdk_screen5DFSDK è stato pensato principalmente come strumento di sviluppo per giochi. La ragione di questo orientamento credo sia abbastanza evidente: un gioco divertente ha molte probabilità di diventare una buona fonte di guadagno per uno sviluppatore, molto più di una qualsiasi altra applicazione. Però DFSDK non è solo uno strumento per creare giochi, anzi, la mia prima applicazione non ha nulla a che vedere col settore ludico. E' una tastiera con display che interagisce via internet con dispositivi di home automation. L'impostazione "gioco", però è da tenere ben presente anche mentre si sviluppa qualcosa di diverso. Come ogni sviluppatore di giochi sa, ogni parte della grafica deve essere creata dall'autore, non esistono "cibi precotti", ogni dettaglio deve essere pensato e prodotto in funzione del progetto grafico dell'intera applicazione. Quindi, ogni "form", ogni "bottone", ogni dettaglio saranno unici, personalizzati, non i soliti bottoni pre-stampati di un editor GUI standard. Al momento non esiste uno strumento integrato in DFSDK per realizzare rapidamente una interfaccia GUI. Se però date un'occhiata al forum, c'è qualcuno che ha creato un "tool" esterno per generare queste maschere; c'è una versione demo gratuita oppure una più completa a pagamento. Io non ho un'esperienza diretta di questo tool, ma se volete informazioni più dettagliate, questo è il link. Personalmente, per disegnare pulsanti, form, logo eccetera, mi avvalgo di uno straordinario strumento (free) on-line che ha una notevole potenza e un'eccezionale facilità di utilizzo. Si tratta di Cooltext. Uso questo strumento da lungo tempo e trovo sia pratico, facile, disponibile su ogni PC (essendo on-line). Si possono creare molti elementi grafici e il file di output è sempre un PNG, quindi con le trasparenze necessarie per organizzare forms e pulsanti (suggerimento: iniziate con lo stile "Plain"). Una delle caratteristiche dei pulsanti che si possono creare, è il comportamento che devono avere in caso di "mouse over". In pratica, per ogni pulsante disegnato si possono avere due immagini, una con l'effetto "non premuto" e l'altra con "premuto". Queste due immagini sono essenziali per lo sviluppo di applicazioni tramite DFSDK, perché quando si definiscono i pulsanti ("buttons"), si devono creare due immagini: una, appunto, per il pulsante rilasciato e l'altra per quando l'utente "tocca" il touch screen e deve vedere il cambiamento (effetto pressione) sul tasto interessato.

Supponiamo, ora, di aver scritto e provato sul simulatore la nostra prima applicazione per iPhone (poi torneremo indietro ad una descrizione della programmazione in Visual C++). Ci si pone il problema di trasferire il programma sul nostro iPhone; anzi, io non avevo un iPhone e così ne ho cercato uno (usato) per poter fare delle prove "reali". Cercando in famosi negozi on-line, è facile trovare un 3GS con 16GB di memoria a prezzi variabili dai 70 ai 120 euro, a seconda dello "stato di conservazione" del telefono. Per collegare un qualsiasi dispositivo con "la mela" a Windows bisogna per forza usare il software iTunes, fornito come freeware da Apple. Dopo aver installato questo software siamo praticamente a posto; abbiamo scritto un'applicazione, abbiamo un iPhone e abbiamo il software per trasferire il programma dal PC al dispositivo. Però non basta... La politica di installazione delle applicazioni di Apple è molto rigida, lontanissima dalla semplicità di Android e secondo me profondamente sbagliata, perché è stata creata per mantenere una certa "protezione" dell'utente, ma in effetti crea più svantaggi che vantaggi. La sicurezza è un mito e vari "hackers" hanno sfruttato i "bachi" presenti nel sistema (in qualsiasi sistema) per creare procedure di "jailbreak" e quindi superare in un solo balzo tutti i vincoli e le protezioni del sistema. Quindi, ribadisco, tutta la complicazione introdotta da Apple per l'installazione di programmi, anche di propri programmi, è assurda, informaticamente diseducativa e castratoria, lontanissima dai tempi d'oro di Apple ][, quando ogni cosa era documentata, dagli schemi elettrici fino al codice assembler 6502 per far funzionare le schede di espansione. Quella era la Apple che diffondeva la cultura informatica; ora invece è in mano a tiranni commerciali che manderanno, prima o poi, tutto in malora. I concorrenti di Apple (Android in testa) sono agguerriti e conquistano ogni giorno nuove fette di mercato. Se Apple non cambierà questa assurda politica di limitazione nella creazione di nuovo software, si estinguerà. Chiusa la questione "opinioni personali", vediamo cosa è necessario fare per trasferire il programma sul telefono. Il primo passo è collegare il telefono al PC e lanciare iTunes. Nelle informazioni del telefono collegato dovremo cercare l'UDID (il codice identificativo unico del dispositivo) e prenderne nota. Quando ci registriamo a DragonFireSDK, diventiamo a tutti gli effetti parte del loro team di sviluppatori ed abbiamo diritto a ricevere un codice detto "mobile provision" che ci permetterà di installare l'applicazione su di un telefono di prova, anche quando siamo in fase di debug e il programma non è stato pubblicato su "Apple Store". Quindi, prendiamo il nostro UDID e mandiamolo via email al supporto di DFSDK, chiedendo di aggiungere il nostro dispositivo a quelli autorizzati. Nel giro di 24 ore riceveremo una email di conferma e a questo punto potremo cominciare a preparare il necessario per eseguire la compilazione del nostro programma scritto in Visual C++. Come ho annunciato nell'introduzione, un programma per iPhone deve essere compilato su una macchina Apple, ma allora, come si fa ? Si usa uno strumento on-line... DragonFire SDK ha uno strumento on-line che permette di eseguire la compilazione su una macchina Apple e restituisce un file zip che contiene la App vera e propria e il file mp.mobileprovision, che è l’autorizzazione necessaria all’installazione e che contiene le chiavi di cifratura di varie parti della App.

… continua …

SeaMonkey: cambiare ricerca da google.com a google.it

Ho di recente installato il browser SeaMonkey perché a mio parere è più veloce e meno pesante di Firefox, sebbene sia basato sullo stesso “motore” Mozilla. Eseguendo le ricerche dalla barra di esplorazione, ricevevo sempre risultati da google.com e mi interessava, invece, riceverli da google.it. Esplorando la cartella di installazione del programma C:\Program Files (x86)\SeaMonkey\ ho trovato una sottocartella chiamata searchplugins e all’interno di questa il file google.xml . A questo punto ho trascinato tale file sul desktop (richiede il permesso da amministratore) e con un editor di testo (io uso Geany) ho modificato le tre occorrenze di google.com esistenti nel testo in google.it ; ho quindi salvato il file modificato e dal desktop l’ho nuovamente trascinato sulla cartella searchplugins (anche qui viene richiesto il permesso da amministratore). Al successivo lancio di SeaMonkey, digitando una richiesta, il browser l’ha correttamente inviata a google.it anziché a google.com.

Activate relays with your smartphone (no BT or WiFi, just sounds)

Old smartphones (Pocket PC, Windows Mobile 5 and 6) can be purchased at very low price, and even if old, are really powerful. In addition, you can write and distribute your own applications / games for free, being not in the slavery of “App Markets” of any sort.

In 2009 summer (August and September), I was in France for a “sabbatic” time. I was in city of Albi, relatively far from the sea and the “usual” way to spend summer time (swimming or walking or looking for funny alternatives). France is fantastic for restaurants, aperitives and wine, so that period was very creative for me. The best “fuel” for brain are good food and wines ; if you add that I was are completely alone and without any job duty, you can understand that such condition was very near to the perfection.
Obviously, a minimal “worklab” was part of my baggage: just few things… a solder iron, soldering wire, some indispensable electronic components, a small netbook PC and my smartphone (Samsung SGH-i600). Note that the smartphones like Android and iPhone wasn’t available in that period and the Windows Mobile (5 or 6) was the “modern” OS (surely less intrusive in your privacy than the ones you’re running today). Some time before this journey, I purchased a software tool called PPL (as alternative to Embedded Visual C) and downloaded a free IDE called FBA Creator (you can find a reference to this software gem under my favourite links). I started to realize applications for WM5 / WM6 in the quiet afternoons time, a little step every day. One of the interesting things produced in this learning time, was a program to turn ON/OFF relays using simply DTMF tones played by the phone (under keyboard control). The main idea was to put the phone on a simple “rover” and then write a small webserver to receive commands by any browser, and produce DTMF tones (related to HTTP GET commands) to activate relays, so left and right motors could move the rover and photos taken after every move could be sent via the Internet to my netbook PC. I realized a video that was posted, initially, on youtube. After monster G (Google) acquired youtube, I decided to remove all my videos, ’cause I was negatively impressed by the growing power of that company, with all the new terms of use of their services ; shorting it, I removed my pages on google space and the videos from youtube. Recently I reloaded some videos on DailyMotion (hoping that this will not be eaten by monster G). If you want take a look at this video, click the player below here and sorry for my horrible english pronuntiation and also for my tragic english writing (NO google translator help, here).


dtmf_remote di robotop

Now, here is the electric diagram of this device. There are 3 relays, the microcontroller (ATMEL ATtiny2313) , one serial interface for  PC connection and analog circuitry to get sounds (thru microphone) and convert them to digital data, by means of specialized decoder IC.

click to enlarge ; PDF copy is included in the downloadable zip

click to enlarge ; PDF copy is included in the downloadable zip

Using this circuit, you can activate / deactivate 3 relays with the DTMF tones emitted by your smartphone / PocketPC. In the downloadable file ef161.zip you can find:
- schematic.pdf , the electric diagram
- dtmf.hex , the Intel-Hex formatted file to burn the micro
- fuses.txt , the fuses configuration used for microcontroller in this application

If you want to take a look at the C source file, click this link
Someone asked me how to indepently control two motors (running CW and CCW) with 3 relays, so here is a state table:

ABC | motor status (0=relay off,as shown in figure; 1=relay ON)
--- | ---------------------------------------------------------
000 | M1 & M2 stop
001 | M1 stop, M2 run clockwise
010 | M1 run clockwise, M2 stop
011 | M1 & M2 run clockwise
100 | M1 & M2 run counterclockwise
101 | M1 run counterclockwise, M2 stop
110 | M1 stop, M2 run counterclockwise
111 | M1 & M2 stop

and a MAD (manually assisted design) schematic…

twomotorsYou can generate DTMF tones directly with your phone keyboard (setting DTMF as default sound for keys) or can use my own program dtmfremote_cab.zip. This one is supplied as CAB compressed in ZIP with a password. Such strange arrangment comes from limitations of the hoster to uploading of executable files. When you download the file, you have to unzip it (the password is: eficara) and then you have the dtmfremote.cab that can be directly installed on your WM5 or WM6 device. Note that my Samsung WM6 phone has a full qwerty keyboard, but not a touch screen, so all the commands are activated using the cursor keys and the OK button. You can also activate a sequence of pre-recorded commands ; such sequence has to be stored in a file called sequence.txt , that must reside on the same working directory of the executable. You can create / edit such file with the default Notepad. On every text row there are two numbers, comma separated (no spaces, please). First number is the bitmap of the 3 relays, so can be a number from 0 to 7 ; a number greater than 7 indicates the end of the sequence (it will loop again from the first row). The second number is the time to wait after setting the relays, prior to jump to next sequence step. This number is expressed in mS (milliSeconds) and can range from 100 to 9999. Lower numbers can’t work, ’cause the DTMF tone needs for a minimal time to be correctly decoded by hardware.
I also wrote another program to play DTMF, using the free tool FBA Creator ; this application is called fba_dtmf_cab.zip (as usual, is a zipped CAB with password ; you must unzip it using password eficara and have your fba_dtmf.cab ready to be installed on WM5 or WM6 device). The only difference with the previous program (written in PPL) is that the sequence player isn’t included, but the whole working directory, with sources (LUA language) can be downloaded and modified with the FBA tool. IMPORTANT NOTE: if you download and install “FBA the Creator” on Win7 or newer, please create a shortcut to the executable and set this shortcut to be executed by default as administrator. If you don’t do that and launch the executable without administrator rights, you can experience a recursive pop-up error window, that’s very hard to stop. This is just a little problem in a big, genial software, written by an italian author some years ago (in the times of WinXP). Note that all the IDE sources for FBA are also downloadable from the main site. If you look in the forum, you can find some old post by user robotop ; it’s me…

Here is a short presentation video for the FBA IDE I made some time ago for my friends. It’s in Italian, but may be useful just to take a look at the working environment and how it’s easy and powerful (and free…)


FBA-Video_2011-11-23 di robotop

Finally, here is the full working folder (sources and resources) of the DTMF program written under the FBA environment. After downloading the file FBA_folder_dtmf-remote.zip, you must expand it in a directory ; I suggest a new folder under documents, named FBA with subfolders for this and (may be) your future apps. At this point, if you have the FBA environment installed on your PC, just click the file dtmfrem.fbp to start the IDE and… happy mobile phone programming :)

View a short video of this application running in the IDE default emulator…


dtmfrem di robotop

Suoneria per un telefono che non suona più

Mia cognata ha un bel telefono, ormai un oggetto “vintage”, disegnato sul modello delle famose labbra di Mae West nell’allestimento di Salvador Dalì. Purtroppo, il telefono non suona più e siccome io sono considerato “uno che ci capisce”, mi è stato dato il prezioso oggetto, con la preghiera di farlo suonare ancora. Dopo una rapida occhiata mi sono reso conto della totale assenza di sistemi “umani” per smontare l’involucro. Viti nascoste, punti difficili da raggiungere, probabilità altissima di rigare o comunque rovinare la preziosa e lucidissima plastica rossa. Ho deciso quindi di affrontare il problema sotto un altro punto di vista, cioè smontare solo la spina telefonica ed installare una suoneria alternativa lì dentro. La cosa ha funzionato. Propongo qui sotto lo schema, nel caso in cui qualcuno dovesse trovarsi con lo stesso problema (ci sono milioni di cognate al mondo).

ATTENZIONE ! Quando il telefono squilla, sui fili c'è alta tensione !

ATTENZIONE ! Quando il telefono squilla, sui fili c’è alta tensione ! Isolate il circuito in modo adeguato !!!

Il buzzer utilizzato emette un suono con frequenza pari a circa 1KHz quando viene alimentato. L’alimentazione, proveniente dal ponte di diodi, è costituita da una doppia semionda raddrizzata, ma non livellata, e così la frequenza di 1KHz del buzzer è modulata dalla frequenza dello squillo sulla linea telefonica. Il segnale risultante è un trillo semplice, ma efficace. Se occorre un volume acustico particolarmente alto, sarà opportuno utilizzare un buzzer con buona resa acustica. Io ho usato un PKM44EP perché l’avevo a disposizione e il volume del suono è “decente”, comunque si deve scegliere un modello “attivo”, cioè un modello provvisto di oscillatore interno.

Lcd controller; connect 20×4 character LCD to parallel port

I use the Alix-1D motherboard for embedded applications, with Puppy Linux OS and Gambas2 visual Basic IDE. It’s very easy to connect an LCD character display to the parallel port of the motherboard. There is a PIN STRIP connector, named J14, that provides all the signals for the parallel port. In my application I used the Hitachi LM044L display connected to the board in this way:

schematic diagram of display connections

schematic diagram of display connections

  • DB7..DB0 – Data bus, connected to ‘D7..D0′ of LCD
  • /STB – Strobe, connected to ‘E’ of LCD
  • /SCI – Slct-in, connected to ‘WE’ of LCD
  • /AFD – Auto-LF, connected to ‘RS’ of LCD
  • GND – Signal ground, connected to ‘VSS’ of LCD
  • The +5V supply can be taken from pin 4 of connector J15

lcd20x4picThe downloadable file puppy_gambas_lcd.tar.gz contains the whole project folder with sources for Gambas2. This is a minimal working implementation; you have two buttons on the form: the first is for display initialization / clear, the second writes an incrementing character each time you click it, every time moving to next available LCD cursor position.

Clock with binary display / Orologio con display in binario

Binary Clock, built with Microchip PIC16F676 (or PIC16F630).
The hours are displayed with 4 LEDs which are (from left to right) 8,4,2,1; so hours are shown from 1 to 12 (no am and pm).
The minutes are displayed with 5 LEDs that are (from left to right) 40,20,10,5,0; in practice, they show in 5 to 5 way and the exact hour (minute 00) turns ON led 0, because I don’t like to have the minutes row completely OFF.
For viewing the time, press shortly the button. Hours and minutes are shown for 3 seconds, then the LEDs are off.
To adjust the time, press and hold down the button until the top row only turns ON and leds begin a binary counting from 1 to 12.
When you reach the desired time, release the button. After a time of 5 seconds, the display automatically shows the minutes and pressing the button, they advance with the binary counting (5 min steps). When you reach the desired minutes, release the button.
Again, after a time of 5 seconds both the led rows turns ON to show hours and minutes (the seconds are cleared automatically), and everything is shut down. The time has been set. The file binwatch.zip contains the wiring diagram in PDF format and the object file (Hex) to program the micro.

The C source was compiled with CC5X Version 3.2I, Copyright (c) B Knudsen Data,Norway 1992-2005 (free edition). If you want to take a look at C source code, click this link.

The prototype: back and front views

This is the PCB diagram (just small image, but a link to PDF 1:1 scale is provided)

For a full size 1:1 PDF, click this link

Note that the circuit uses conductive vias.

Orologio con display binario, realizzato con Microchip PIC16F676 (oppure PIC16F630).
Le ore vengono visualizzate con 4 led che valgono (da sinistra a destra) 8,4,2,1; vengono mostrate quindi le ore da 1 a 12 (niente am e pm). I minuti sono visualizzati con 5 led che valgono (da sinistra a destra) 40,20,10,5,0 . In pratica i minuti vengono mostrati di 5 in 5 e lo scoccare dell’ora (minuti 00) fa accendere il solo led 0, questo perché mi sembra brutto lasciare del tutto spenta la riga dei minuti. Per ottenere la visualizzazione dell’orario, si preme brevemente il pulsantino. Le cifre vengono mostrate per 3 secondi, quindi i led vengono spenti. Per regolare l’ora si tiene premuto a lungo il pulsante fino a quando si accende solo la riga superiore (ore) e i led cominciano un conteggio binario da 1 a 12. Quando si raggiunge l’ora desiderata, si lascia il pulsante.
Trascorso un tempo di 5 secondi, il display mostra automaticamente i minuti e premendo nuovamente il pulsante, questi avanzano con il conteggio binario (si regola, quindi di 5 min in 5 min). Quando si raggiunge il minuto desiderato, lasciare il pulsante. Dopo un tempo di 5 secondi i led si accendono a mostrare ore e minuti (i secondi vengono azzerati automaticamente) e infine tutto si spegne. L’orario è stato regolato.
Il file binwatch.zip contiene lo schema elettrico ed il file oggetto .hex per programmare il micro.

Il codice sorgente in C è stato compilato con CC5X Version 3.2I, Copyright (c) B Knudsen Data,Norway 1992-2005 (free edition). Se desiderate dare un’occhiata al codice sorgente in C dell’applicazione, cliccate questo link.

binwatch_sch

schematic diagram ; click the image to enlarge. A PDF version is included in the downloadable ZIP file

 

“Fast Reading” teacher’s tool

This program has been developed as a teacher’s tool for “Fast Reading” technique. The purpose is to show on video some random numbers at a specific time. The user can modify the number of digits (tipically 3 to 6), the persistence of the digits on the screen (in 100 mS steps) and the interval from a number to the next (in 100 mS steps).  There is also the possibility to activate (with a checkbox) the sound, that is a metronome tick that is played every time a new number appears on the screen. Here is a screenshot :

fastread_ssI wrote this program with VB6 and tested on WinXP, but I think it will also run on newer Windows versions. The request for such tool comes from my son that is involved in PNL and similar (strange) things :)

Disclaimer : this is a demo program and has no warranties, nor support. I’m not responsible for any damage it can create to you and your computer if you try to install it, so use at your own risk…

I agreed with disclaimer terms and want to download the installation file clicking this link.

Update: I tried to install the application under Win7_64 and it worked. When executing the setup.exe you can see a warning like this :

awarningIt’s normal ; close all running applications and click OK.

Roman numerals clock : orologio LCD con numeri romani

Questo circuito che vi propongo, basato su micro ATtiny2313, realizza un orologio LCD con numeri romani.

Il prototipo del circuito, realizzato su una scheda millefori.

Il prototipo del circuito, realizzato su una scheda millefori (segna le 17:20)

Alla prima accensione mostra una schermata lampeggiante con la scritta “Tempera tempus” per ricordare che si deve effettuare la regolazione.

Le fasi della regolazione dell'ora

Il display in fase di richiesta regolazione (prima riga) e nelle fasi di visualizzazione (ultime due righe). La scritta “et” lampeggia con cadenza 1 secondo.

La regolazione si effettua mediante questa procedura :

1) Premere e tenere premuto il pulsante per circa 3 secondi ; sullo schermo appaiono le ore ; rilasciare il pulsante.
2) Premere nuovamente il pulsante e tenerlo premuto ; le ore avanzano da “I” a “XXIV” ; rilasciare il pulsante sull’ora giusta.
3) Attendere circa 3 secondi ; sullo schermo appaiono i minuti.
4) Premere nuovamente il pulsante e tenerlo premuto ; i minuti avanzeranno da “nulla” a “LIX” ; rilasciare il pulsante sui minuti giusti.

Non essendoci una batteria, l’orologio non mantiene l’ora se va via la corrente. Ogni volta che si stacca l’alimentazione, alla riaccensione verrà visualizzato il messaggio che ricorda di effettuare la regolazione. Nella figura sottostante potete vedere lo schema elettrico. Per una visione più dettagliata, scaricate il PDF dal link indicato nella didascalia.

il file PDF può essere scaricato da questo link

Cliccare l’immagine per ingrandirla ; il file PDF può essere scaricato da questo link

Il display LCD che ho utilizzato, purtroppo, necessita di una tensione negativa su Vo per ottenere il massimo contrasto. Ho usato un pin del micro per generare un’onda quadra e il circuito in basso a sinistra nello schema (transistor, condensatori e diodi) per ottenere tale tensione. In caso di display LCD “normali”, cioè in grado di funzionare bene anche con sole tensioni positive, tale circuito diventa inutile e può essere eliminato.

Nel file ef162.zip scaricabile a questo link sono contenuti :
- schematic.pdf , lo schema elettrico del circuito
- roman.hex , il file HEX per la programmazione del micro
- fuses.txt , il file di testo con la configurazione dei fusibili del micro per questa applicazione.

Se desiderate dare un’occhiata al codice sorgente in C dell’applicazione, cliccate questo link.

RxMet1 – ricevitore per sensore esterno Hygro-Thermo a 433 MHz

Questo circuito permette di ricevere i dati trasmessi da un sensore Oregon Scientific modello THGR228NF (visibile nella figura sottostante) in radiofrequenza a 433 MHz.

sensor-THGR228NFIl circuito è stato pubblicato (a mio nome) sulla rivista CQ Elettronica nel numero di Settembre 2007 (consultare la rivista per maggiori dettagli).

Il microcontrollore utilizzato è un Atmel ATtiny2313 ; lo schema è visibile qui sotto:

Per una visione nitida, scaricare il PDF da questo link

Cliccare l’immagine per ingrandirla ; il file PDF può essere scaricato da questo link

Nella prossima immagine si può vedere il prototipo del circuito con i componenti montati :

rxmeteoIl circuito stampato è visibile nell’immagine qui sotto ; ovviamente, per realizzare un circuito mediante fotoincisione, bisogna stampare l’immagine in scala 1:1 e pertanto è opportuno scaricare il file PDF raggiungibile tramite il link nella didascalia dell’immagine.

stampato

Il file PDF in scala 1:1 può essere scaricato da questo link

Infine, nella prossima immagine si può vedere la disposizione dei componenti sul circuito.

montaggio

Il file contenente l’elenco dei materiali, il codice HEX da scrivere sul micro ed i batch files per settare il clock esterno e per effettuare la programmazione dell’ATtiny2313 (tramite il programma freeware SP12), può essere scaricato da questo link. Se desiderate dare un’occhiata al codice sorgente in C dell’applicazione, cliccate questo link.

I dati in uscita dal circuito sono “grezzi”, cioè rappresentano in Ascii l’insieme di bits ricevuti dal sensore, raggruppati in notazione esadecimale. Nella figura sottostante, i dati ricevuti dal sensore sono mostrati nel riquadro a sfondo verde (quello in alto, per i daltonici..) mentre la “traduzione” in temperatura e umidità sono nel riquadro a sfondo blu (quello in basso).

Screenshot del programma su PC per la visualizzazione dei dati

Screenshot del programma su PC per la visualizzazione dei dati

Ho realizzato il programma in VB6 ; chi fosse interessato può scaricare il file d’installazione da questo link. Ricordo che il programma è offerto gratuitamente a scopo di test e non ha alcuna clausola di garanzia e nessuna assunzione di responsabilità da parte mia per eventuali danni o malfunzionamenti.

Il “cuore” di questo programma è una DLL (libreria) scritta da me per decodificare il protocollo di trasmissione del sensore. Chi volesse scrivere un proprio programma per visualizzare i dati forniti dal sensore, potrà usare liberamente tale DLL scaricandola da questo link e inserendola nel proprio programma. Di seguito, un esempio di come utilizzare la DLL in un programma VB6 per decodificare la stringa di dati “grezzi” ricevuti dal sensore in valori leggibili di temperatura e umidità:

// declare the convert function
Private Declare Function RawConvert Lib "meteo.dll" (ByVal text As String) As String

// use the function
//  rxraw contains the full ascii string received from RxMet1
//  rxd contains the decoded Temperature and Hygro
dim rxd as string
dim rxraw as string

    rxd = RawConvert(rxraw)

Nota: questo materiale fu già pubblicato su un mio vecchio sito (ora cancellato) e venne citato da “Hack-a-day” nel settembre del 2007.

One button, two leds using single GPIO on RPi

Once again, a “superused” GPIO… This time, the RPi I/O is used for driving two leds (one blue, one red) and a pushbutton. The schematic is simple, look at the pic below:

tri-schAnd here is the prototype realized on perfboard:

tri-picNote: pictures are taken with leds off, red led on, blue led on.

There is also a new Python script named service2.py :

import RPi.GPIO as GPIO
import time
from subprocess import call

cnt = 0  # reset counter for pushbutton pressed
toggle = 0  # reset toggle flag
GPIO.setmode(GPIO.BCM)  # set GPIO mode
while True:  # main loop
    GPIO.setup(4, GPIO.OUT)  # GPIO.4 set as output
    GPIO.output(4, False)  # GPIO.4 output set at low level (red led ON)
    time.sleep(0.2)  # 200mS pause with red led ON
    if toggle != 0:  # if toggle flag set
        GPIO.output(4, True)  # GPIO.4 output set at high level (blue led ON)
        time.sleep(0.2)  # 200mS pause with blue led ON
    GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_OFF)  # GPIO.4 set as input, no pull-ups (both leds OFF)
    for n in range(0,2):  # exec twice
        time.sleep(0.1)  # wait for 100 mS prior to read pushbutton status
        if GPIO.input(4):  # if GPIO.4 is high (button NOT pressed)
            if cnt >= 4 and cnt <= 6:  # if was pressed for 2-3 sec
                 toggle ^= 1  # invert toggle flag
                 if toggle == 0:  # if changed to 0
                     call("sudo killall x11vnc", shell=True)  # terminate x11vnc server
                 else:  # if changed to 1
                     call("sudo x11vnc", shell=True)  # start x11vnc server
             cnt = 0  # reset counter for pushbutton pressed
         else:  # if GPIO.4 is low (button pressed)
             cnt += 1  # increment counter for pushbutton pressed
     if cnt >= 10:  # if continuously pressed for 5 seconds (cnt increments 2 times in a second)
        GPIO.setup(4, GPIO.OUT)  # GPIO.4 set as output
        GPIO.output(4, False)  # GPIO.4 output set at low level (fix red led ON as signal for user)
        call("sudo poweroff", shell=True)  # terminate and shutdown
        break  
    if toggle != 0:  # if toggle flag set
        time.sleep(0.4)  # (blue blinked for 0.2 Sec) wait the remaining time for 1 Sec main cycle
    else:  
        time.sleep(0.6)  # (blue off) wait the remaining time for 1 Sec main cycle

How it works:

Normally, the red led is lighted for 200 mS, then the button is sampled for pressed state. If the button is pressed for a time between 2 and 3 seconds, then the variable toggle is inverted. When toggle is “1″, after the red led turns off, the blue one turns on for 200 mS. If the button is pressed again for 2-3 Sec, the variable toggle is inverted again and at next cycle the blue led will no more turn on. When the toggle variable changes, there are two actions performed by the script : if toggle is 0 (off) then a call to “killall x11vnc” is performed, while if is 1 (on) a call to “x11vnc” is done. This means that I can control the start or stop of x11vnc server with my pushbutton. If I press the button for a time over 5 seconds, there is a call to the “poweroff” and the board will turn off. Please, note that when the pushbutton is pressed the blue led can’t turn on, while the red one will be forced on (at low current, 1mA).

Here is a video of circuit and program running:

tri-film di robotop

Hope this will be useful for someone… :)