Play with colors (not for painters)

First of all, happy new year ! Another boring weekend in this B&B and another game realized for Android smartphones. It’s a well known game. The machine creates a combination of four colors (on a six colors palette) and you have to find the right combination in max 12 attempts. Every attempt has an answer that is a white dot if there is the right color in the right position or a black dot if there is a right color in a wrong position. Obviously, if the selected color isn’t part of the combination, no black or white dot appears.

The game icon as it appears on Google Play

The application is free and without any advertisement. It’s a present, so -please- don’t leave evil comments if you don’t like it !

Google Play link: https://play.google.com/store/apps/details?id=robotop.mastertab

Screenshot of the game running

The buttons on the right are used to select the color you want to add to your try. The [ C ] button clears an entered combination in case of errors. The [ Ok ] button accepts a combination, so the machine can answer with the results. The button [ nuovo codice ] generates a new random colors combination. The small orange arrow at left is a pointer to the list of attempts. If you don’t find the solution in 12 attempts, the machine will show you the result with a short animation. The program exits after 10 minutes of continuous play time. This is ‘cause you must rest after such time ! Obviously you can restart immediatly, but I suggest to not spend too much time playing with your smartphone, with your eyes focalized always at the same distance. So, after 10 minutes, take a rest ! Look out of the window !

I did the first version of this game some years ago, for the iOS environment, using a software tool called DragonFire SDK. You can read an article I wrote about this tool at this link: http://ficara.altervista.org/?p=2254. Following the link, you can also find a downloadable executable (runs like an iPhone emulator) to play the game on any Windows PC. The source file written in Visual C++ is included in the packet. Note that the libraries sold with the DragonFire SDK are NOT included ! The source file may be useful to see how the program works. The software tool was able to translate the Visual C++ source in iOS Objective-C source and compile it on remote Mac machine, giving as result the App ready for the market.

In case of errors or suggestions contact me by email and in my free time I will try to update the App. Have fun ! Bye.

Micro PLC – 2 In 2 Out

Questo progetto ha un’origine molto “antica”. Realizzai la prima versione nel 2001 per due prodotti commerciali su microcontrollori Mitsubishi M16C (oggi Renesas). Poi, nel 2007 ne feci una versione molto ridotta con il micro Zilog Z8 ; venne anche pubblicata sulla rivista CQ Elettronica (vedi pubblicazioni e http://ficara.altervista.org/zilog_z8.php#linsem). Successivamente (nel 2013) modificai, semplificandoli ancora, il circuito e il firmware per un amico che aveva la necessità di fare dei “programmi” per saldare delle gabbiette di fil di ferro. In sostanza, a lui serviva qualcosa che fosse azionato da uno o due pulsanti e che potesse azionare uno o due relè con tempi programmabili per attivare la saldatrice. Per realizzare l’oggetto, utilizzai un display LCD a caratteri 1×16 recuperato da una vecchia centrale d’allarme e un microcontrollore ATmega88 “di recupero”.

Oggi mi ritrovo, dopo qualche anno, ad avere l’esigenza di un dispositivo del genere per me stesso. Ho quindi deciso di “trasportare” il firmware su un nuovo circuito che ha come base una piccola scheda “Nano3” comprata on-line a circa 2 Euro. Il microcontrollore è l’ATmega328P, che ha molta più memoria del precedente ; tuttavia, ho modificato il programma solo per lo stretto indispensabile, senza sfruttare le più ampie possibilità offerte dal nuovo hardware. Anche se la board Nano3 è venduta come “compatibile Arduino”, il firmware è scritto esclusivamente in C e viene trasferito nel microcontrollore attraverso il connettore ICSP senza l’uso di bootloader. Nella figura sottostante potete vedere come si presenta l’oggetto:

Appena acceso, il display mostra due opzioni: ESEGUI o SCRIVI. La prima manda in esecuzione il programma che è stato precedentemente registrato nella memoria EEPROM del microcontrollore ; la seconda ci permette di inserire (scrivere) il nostro programma tramite i pulsantini che vediamo nella foto in alto a sinistra. I pulsanti hanno le classiche funzioni di Up, Down, Left, Right, Ok, Esc con cui si può fare praticamente di tutto…

Se ci spostiamo sul campo SCRIVI con il pulsante Right e quindi premiamo Ok, ci troveremo nel menù di programmazione e potremo quindi scegliere quale programma scrivere. Ce ne sono a disposizione 8, ognuno con un massimo di 32 istruzioni.

Con i pulsanti Up e Down potremo scegliere il numero di programma ; con Ok entreremo nella fase di scrittura delle istruzioni. Vediamo come si compone una linea di programma:

Il programma va da 1 a 8 ed indica una delle 8 sequenze di istruzioni programmabili. Ogni programma può avere un massimo di 32 passi, che vanno da 0 a 31. Ogni istruzione occupa 1 byte delle memoria EEPROM del microcontrollore e così risulta che l’occupazione massima di tale memoria è di 8 * 32 bytes, cioè 256 bytes. Nella EEPROM del micro c’è quindi parecchio spazio ancora libero per aumentare sia il numero dei passi, sia quello dei programmi. Veniamo ora ai codici operativi, le istruzioni vere e proprie. Sono davvero pochi ! Questo sì che è un RISC (Reduced Instruction Set Computer) !

Organizzazione dei codici operativi nel file sorgente in C

Vediamo tutti i codici in dettaglio:

- ACCESO   (operando R1 o R2)
- SPENTO   (operando R1 o R2)
- ATTESA-A (operando S1 o S2)
- ATTESA-C (operando S1 o S2)
- RITARDO  (operando da 01 a 99)
- RIPETI   (senza operando)
- FINE     (senza operando)

[ACCESO  ] - è il codice operativo per accendere un relè.
           L'operando può essere R1 (relè 1) o R2 (relè 2).
[SPENTO  ] - è il codice operativo per spegnere un relè.
           L'operando può essere R1 (relè 1) o R2 (relè 2).
[ATTESA_A] - è il codice operativo per attendere che uno
           switch (input) sia aperto.
           L'operando può essere S1 (switch 1) o S2 (switch 2).
[ATTESA_C] - è il codice operativo per attendere che uno
           switch (input) sia chiuso.
           L'operando può essere S1 (switch 1) o S2 (switch 2).
[RITARDO ] - è il codice operativo per attendere un certo tempo.
           L'operando può andare da 01 a 99 ed indica il tempo
           d'attesa in passi da 0.1 Sec.
[RIPETI  ] - è il codice operativo per ripetere il programma a
           partire dalla prima istruzione.
[FINE    ] - è il codice operativo per terminare il programma.

I pulsanti Right e Left servono per muoversi tra i campi Passo, Codice Operativo e Operando, mentre Up e Down per modificare i valori relativi al campo interessato. Il pulsante Ok accetta a salva l’istruzione corrente, mentre Esc termina la programmazione.

Vediamo un paio di esempi:

Programma 2, passo 0: Attesa switch #1 chiuso

Programma 2, passo 2: Ritardo di 40 unità di tempo (40 x 0.1 Sec = 4 Secondi)

Chiaramente, dopo aver scritto un programma, ci verrà voglia di mandarlo in esecuzione ! Per fare questo, ci sposteremo nella posizione Esegui del menù principale e premeremo Ok. A questo punto con i tasti Up e Down selezioneremo il programma da avviare (da 1 a 8) e quando sul display comparirà il numero desiderato, premeremo ancora Ok per avviarne l’esecuzione.

Vediamo ora lo schema elettrico. Per le prove, ho alimentato il prototipo attraverso la presa mini-usb presente sulla Nano3, collegata ad un caricabatterie per telefono. Conviene, però, usare un alimentatore esterno da 6 a 9V collegato al connettore JP1, più che altro per l’affidabilità dei contatti. Sulla Nano3 c’è un regolatore lineare low-drop a 5V con una corrente di uscita sufficiente per questo circuito.

Se stiamo alimentando il circuito attraverso la presa USB e se abbiamo installato il driver per il convertitore USB-Serial presente sulla Nano3 (nel mio caso un CH340G) potremo anche attivare un terminale seriale a 9600,N,8,1 (se non lo avete, qui ce n’è uno scritto da me). Con il terminale collegato, vedremo che resettando la Nano3 tramite il pulsantino presente on-board, apparirà la scritta V171217 che è la release del software (yymmdd – 17 Dic 2017). Per testare anche la trasmissione seriale potremo dare da terminale un ctrl-G (ASCII 0x07) e il buzzer sul circuito emetterà un beep di conferma.

Per una migliore visione dello schema, è possibile scaricare il file in formato PDF.

Veniamo ora al firmware. Il file da programmare nel modulo Nano3 è fornito in formato .hex e sarà inviato al microcontrollore tramite connettore ICSP (6 pin), mediante un tool idoneo. Io uso un mySmartUSB light, ma ce ne sono a decine con prestazioni simili. Come software di “burning” qui ho usato myAvr ProgTool, abbinato al tool hardware.

Per la configurazione dei “fuses”, guardate la riga 11 in questo screenshot del file in C:

Infine, il file .hex può essere scaricato da questo link. Il file è zippato con password. Per decomprimerlo usate il programma 7Z e la password: eficara. Buona sperimentazione !

Your HotSpot is a presence detector

note: USB connector used only to power the circuit

I never connect my devices to “free wifi” hotspots. I’ve seen what a (bad) hacker can do, using one laptop, a battery powered Raspberry PI board and a collection of software tools. He can spy (almost) any smartphone that is connected to the same “free wifi” hotspot.

For this reason, I always use my own LTE 4G connection and my smartphone is always enabled to share such internet connection with my other devices (one laptop, another smartphone and some other) using an access filter based on MAC address of every device. This is more secure than use “free wifi” hotspots and I suggest to everyone the same approach. However, this isn’t the subject of my post.

Having my own hotspot, with the SSID choosen by myself, I can use the smartphone for a lot of nice services. In this article I will describe one of them.

The presence blinker

I’m currently living in a B&B, ‘cause I’m far from home, due to a contract job. When I am in my room, I don’t make too much noise. I just read or write documents; the TV is turned off and also the music is off. So, it happens that other hosts of the B&B, when going out, lock the main door with the key! This makes me a bit claustrophobic! To avoid this unfair situation, I decided to build a flashing light that will be visible from the low side of my room’s door, just to warn the other hosts that I am in my room

I thought about a passive IR sensor, but such devices work only if there is a movement in the room, and I don’t move so often. Also microwave sensors based on Doppler effect work in the same way; they activate the output when there is a movement. Finally, I decided to use my smartphone as a presence detector… I built a small device based on the well known ESP-01 module. This device has an ATtiny2313 microcontroller and a blue led (high luminosity) that blinks when I am in the room (with my smartphone). When my smartphone goes out (with me) the led stops blinking…

The working principle is very simple. The microcontroller sends AT commands to the ESP-01 to get the list of active hotspots in the area. One of such hotspots is my smartphone, so the SSID string is taken and compared with the one programmed in the internal flash memory. If the two strings match, the led blinks; otherwise the led remains off. So simple…

Note that no connection is active between the module and the smartphone; there is only a periodic check of the visible hotspots. This timed check happens every six seconds and the led lights for 250 mS each time (if your SSID is found).

Note that the SSID of your smartphone must be programmed in the flash memory of the microcontroller (the default is “myHotspot_15car”) so I added an application for PC that modifies the original .hex file to change the default SSID to the one that you like. The max number of characters allowed for your SSID is 15. This limit comes from the low amount of ram memory available on the ATtiny2313 microcontroller (just 128 bytes). Remember that you can choose your SSID in the smartphone using the appropriate menu, so write down one that has max 15 characters and the job is done. Another limit imposed by low ram resources (lack of buffers for serial communication), is that you must program the ESP-01 module to use a 9600 BPS communication speed. There is an AT version created with such default speed on this website:

http://wiki.aprbrother.com/wiki/Firmware_For_ESP8266

go there and look for ai-thinker-0.9.5.2-9600.bin. You can also modify (in a permanent way) the current communication speed of your ESP-01 module using AT commands. There are two, that works depending upon the version of firmware installed. Try both of them; the first that gives answer “OK” is the right one 🙂

For additional information and tools, take a look at my previous articles here:
http://ficara.altervista.org/?p=3041
http://ficara.altervista.org/?p=3158

You could also look at another my article, that was the “starting point” for this project. There you can find a downloadable executable and the relative source program in FreeBasic. It can be useful to better understand how it works. The link is:
http://ficara.altervista.org/?p=3711

Someone can say: “Hey, I can program the same SSID on my smartphone and fool your device so it thinks that you’re in the room, while you aren’t” ! Then I can answer: “so, I will add to my firmware a check of the WPA2 password of my hotspot, that’s invisible to you” ! Such password check option opens the road to many applications where your smartphone will be the key to unlock your car, your door, to turn on lights at home and every thing you want, simply having it near to you. No buttons to click, no Apps to run, just the “native” HotSpot feature active. It’s easy !

In the downloadable file you can find the .hex file that must be programmed in the microcontroller and the .exe that allows you to insert your SSID in the flash memory, prior to program the micro ! The firmware is very small (less than 1 Kb) and has been written in pure C without any special library.

The schematic of the device is simple. Here below there is a picture of it. You can also download it in PDF format for a better view (click this link).

Disclaimer of Liability.
The program or software described, freely downloadable from the site, has to be considered a free “demo” and therefore the author Emilio P.G. Ficara will not provide any support nor will be responsible for any problem, damage, or consequence that may occur during download or execution of the application.

By clicking this link to download the file, you implicitly declare that you have read and understood the non-assumption clause and to accept it.

Always check the MD5 checksum for the files you download! In this case, it must be FC211B2DCBF05C7874489AC32C7D9641 . If it is different, the file is corrupted or is not the original one, so do not unpack it and throw it away! If it is all right, you can unzip it (use the 7Z program with the password: eficara).

You can also run the executable on a USB memory stick as it does not need installation, being a pure executable.

Have fun !!!

Problemi (risolti) su FW AT con GPIO per moduli ESP8266

Nell’articolo precedente ho descritto un utilizzo inusuale per i soliti modulini ESP8266. Per poter utilizzare il comando AT+CWLAPOPT (quello che consente di utilizzare delle opzioni quando si chiede la lista degli Access Points) ho dovuto aggiornare il firmware del modulino ESP-01 che ho utilizzato. Tutto ok. Poi, però, ho tentato di aggiornare il modulino con la versione firmware contenuta nel file ESP8266_NONOS_SDK-2.1.0.zip (il FW AT che consente di utilizzare il GPIO del modulo) ed ho trovato delle difficoltà. Una volta programmato con tale versione, il modulino si resettava di continuo. Dopo un po’ di indagini e prove con vari file di boot presi da versioni precedenti (boot 1.2 ; boot 1.6; boot 1.7 e altri), mi sono un po’ stufato ed ho preso con un editor esadecimale la zona di memoria dedicata al boot (a partire dall’indirizzo 0x00000) da un firmware sicuramente funzionante (una versione vecchia, distribuita con un file .bin unico) e da quella ho ricavato un nuovo file boot.bin “tutto mio” o quasi 🙂 Usando questo “frankenstein” ho finalmente programmato con successo l’ultima release del firmware. Ora i comandi relativi al GPIO vengono accettati ed eseguiti.

Ho deciso di pubblicare qui il piccolo file myboot.zip per coloro i quali si trovassero ad affrontare lo stesso problema.

Tengo a precisare che si tratta di una soluzione “per hobbisti” ! Non mi assumo responsabilità per malfunzionamenti o difetti ! Si tratta di un esperimento e come tale va trattato !

Nota: il file myboot.bin è zippato con password. Usate il programma 7Z con la password eficara per estrarlo.

ESP-01 : usi alternativi di RSSI

Normalmente, usiamo il modulino wifi ESP-01 per fare dispositivi che si connettono a Internet ; trasmettiamo o riceviamo informazioni, fondamentalmente per realizzare dei sensori o degli attuatori. C’è un’infinità di applicazioni in giro, alcune ben documentate e originali, altre copie di copie di copie (ricursivo). Da un lato ci sono dei principianti con una preparazione “vergognosa” che si spacciano per “specialisti”, ben consci del fatto che ci sarà sempre in giro su Internet qualcuno che ne capisce meno di loro 🙂 , altri invece sono decisamente “bravi e preparati” e leggere quello che propongono è davvero interessante, anche per un “addetto ai lavori”.

Negli ultimi anni, prodotti come Arduino, ESP8266 e Raspberry PI hanno “rivitalizzato” un settore hobbystico che era praticamente morto, con conseguenze assolutamente positive per tutto il settore dell’elettronica e dell’informatica. Come già detto, però, c’è anche il fattore negativo di tanta gente senza talento che “imbratta i muri”, ma è una contropartita accettabile, pur di vedere di nuovo l’entusiasmo per l’autocostruzione, com’era ai (bei) tempi delle “riviste cartacee”.

Per fare alcune prove che riguardano un’idea che mi è venuta in mente, ho sviluppato un programmino che utilizza una delle “features” del modulino ESP-01 nella versione di firmware con protocollo AT. Lo scopo di questo programma è di fare dei “beep” quando la misura di RSSI (Received Signal Strength Indicator) di un determinato Access Point scende al di sotto di una soglia impostata. Ho deciso di pubblicare l’intera cartella di progetto, contenente sia l’eseguibile sul path /release/Radar.exe, sia il file sorgente in FreeBASIC (con FireFly Visual Designer) sul path /forms/Form1.frm, così chi vorrà potrà modificare / migliorare il software a proprio piacimento. Vediamo la schermata del programma appena lanciato:

Andiamo per punti : (1) è il pulsante per aprire la porta di comunicazione seriale verso il modulino ESP-01 (ho usato lo stesso circuitino presentato qualche tempo fa sul mio sito a questo link). Per prima cosa, premeremo Open e se tutto andrà a buon fine, la porta seriale verrà aperta e la scritta sul pulsante cambierà in Close. Subito dopo premeremo in fila i pulsanti riferiti con (2), (3), (4) e (5). Questi servono per inviare una serie di comandi AT al modulino wifi ESP-01. Per pima cosa si setta la potenza di trasmissione a circa un terzo del massimo possibile (27 su un range da 0 a 82); poi si sceglie di operare come STA (station); poi si chiede di usare, nel comando CWLAP (List Access Points) solo i parametri relativi ad SSID e RSSI (il valore 6 setta i bits 1 e 2, che sono appunto relativi ai due campi indicati). Infine si richiede la lista completa degli Access Points “visibili” dal modulo. Di sotto segue un esempio di tutto quello che compare nella finestra (10) eseguendo le operazioni elencate nell’ordine:

>Open
TX: AT+RFPOWER=27<0x0D><0x0A>
AT+RFPOWER=27

OK
TX: AT+CWMODE=1<0x0D><0x0A>
AT+CWMODE=1

OK
TX: AT+CWLAPOPT=0,6<0x0D><0x0A>
AT+CWLAPOPT=0,6

OK
TX: AT+CWLAP<0x0D><0x0A>
AT+CWLAP

+CWLAP:("MW40Wind_xxxx",-58)
+CWLAP:("DIRECT-Bh-BRAVIA",-86)
+CWLAP:("NETGEAR26",-93)
+CWLAP:("CEM_host",-36)

OK

Una volta visualizzata la lista di AP, potremo fare un “copia” di quello che vogliamo utilizzare e poi incollarlo nel campo riferito dal numero (6). Prenderemo quindi nota anche del valore di RSSI relativo al medesimo AP e lo scriveremo nel campo riferito dal numero (7). A questo punto potremo finalmente premere il bottone Start (8) e il programma comincerà ad inviare una serie di comandi AT+CWLAP=”APcopiato”, che potremo vedere nel campo (9) e quindi verificherà le risposte formite dal modulino. Se il valore di RSSI ricevuto è inferiore (sono numeri negativi !) a quello che abbiamo programmato nel campo (7), allora si sentirà un “beep”. Vediamo una schermata del programma in funzione:

Naturalmente, il valore di RSSI è influenzato da vari fattori e non è costante, ma si mantiene in un certo range. Notate che più il numero si avvicina allo zero, più il segnale è forte ! Se scende a livello di -100 è assente. Con una certa approssimazione e con una sensibilità un po’ scarsina 🙂 potremo usare il modulino Esp-01 come sensore di presenza. Infatti, se qualcuno si piazza nelle vicinanze del modulino, o meglio, sulla linea ideale che unisce il modulino all’Access Point, il segnale diminuirà (sarà assorbito/riflesso dall’individuo) e il computer farà beep ! Lo stesso succederà se prendiamo il computer (supponendo che sia un portatile !) e ci allontaniamo dall’Access Point. E’ da notare che non facciamo una connessione all’AP, ma ci limitiamo a leggere la potenza del segnale ricevuto. Quindi, abbiamo due usi immediati per questo “giocattolo” : un sensore di presenza e un allarme di allontanamento. Naturalmente, il tutto può essere trasportato su un piccolissimo microcontrollore per rendere il lavoro più interessante. Purtroppo, l’utilizzo dei comandi AT rende la cosa un po’ lentina : tipicamente un “beep” ogni due secondi, ma lavorando direttamente nel chip ESP8266 (con gli strumenti giusti) si può fare ben di più ! Sotto la clausola di non assunzione di responsabilità, troverete la cartella di lavoro FBgui_Radar zippata con password. Se non avete Freebasic e Firefly, potete scaricarli gratuitamente ; cercate nel mio sito “links utili” e troverete i collegamenti per il download.

Clausola di non assunzione di responsabilità.
Il programma o software descritto, liberamente prelevabile dal sito, è da considerarsi una “demo” gratuita e pertanto l’autore Emilio P.G. Ficara non fornirà alcun supporto, né si assumerà alcuna responsabilità per ogni eventuale problema, danno o conseguenza che dovesse presentarsi nel download o nell’esecuzione dell’applicazione.

Cliccando questo link per effettuare il download del file implicitamente dichiarate di aver letto e capito la clausola di non assunzione di responsabilità e di accettarla.

Verificate sempre il checksum MD5 dei files che scaricate ! In questo caso deve essere: F6E1617D0E8E7CABC7FD6D1A7BB0B392 ; se è diverso, il file è corrotto o non è quello originale, quindi non scompattatelo e buttatelo via ! Se invece è tutto ok, potete scompattarlo (usate il programma 7Z con la password: eficara).

Potete usare l’eseguibile anche su una chiavetta di memoria USB, in quanto non ha bisogno di installazione.

Be Happy !

Qualche tempo fa, precisamente il 29 Novembre (non ricordo di quale anno !) alle 19:00, vidi in TV una trasmissione della BBC (un documentario) con un argomento piuttosto interessante. Si trattava di un metodo, sviluppato da un gruppo di studiosi, che avrebbe permesso ai soggetti coinvolti nell’esperimento di aumentare il proprio ottimismo. La cosa mi piacque, perché ho sempre avuto tanta voglia di incrementare il mio ottimismo ! Ora, dato che ho il weekend libero da impegni, ho deciso di programmare un’App per esercitarmi e vedere se finalmente riesco a diventare ottimista (ne dubito…hehe).

L’esperimento mostrato in TV consisteva in uno schermo di computer che veniva mostrato al soggetto impegnato nella prova. Su tale schermo apparivano sedici facce di persone di varie razze, con caratteristiche somatiche differenti. Queste facce erano disposte in una matrice di 4 x 4, quindi un totale di 16 immagini. Tra queste, solo una mostrava una faccia sorridente ; tutte le altre avevano espressioni tristi, arrabbiate, annoiate o depresse. Il soggetto in prova doveva cliccare il più velocemente possibile sull’unica faccia sorridente e così facendo incrementava il proprio punteggio, quindi lo schermo cambiava, mostrando una nuova matrice di volti. La voce narrante diceva che la durata ottimale dell’esperimento era di 8 fasi di 15 minuti ognuna (in giorni diversi). Alla fine di questo periodo, i soggetti si sarebbero sentiti più ottimisti.

Non conosco la validità scientifica di questo esperimento e non sono riuscito a trovare notizie sulla cosa perché purtroppo non ho seguito la trasmissione dall’inizio, ma ho visto tanti di quei metodi per agire sul cervello e sulle emozioni (alcuni sembrano autentiche fesserie), da essere disposto a fare un tentativo… Se volete provare anche voi, troverete l’App per Android in fondo a questo articolo. Questa è l’icona dell’App:

Bene, non avendo a disposizione 16 persone disposte a farsi fotografare con espressioni sorridenti (e nemmeno arrabbiate o depresse o tristi) ho deciso di usare delle “emoticons” che si trovano ovunque. Per simulare le differenze razziali ed estetiche, ho modificato il colore di background delle varie “faccine” e così le varie griglie presentate all’utente sono sempre diverse. Quello che rimane invariato rispetto alla versione originale è che ci sono sedici volti in una griglia di 4 x 4 e solo uno è sorridente. Ecco come si presenta il “gioco” appena installato e avviato:

Qui vediamo le sedici “emoticons” (per una volta, tutte sorridenti) e una finestra di messaggi che ci dice di premere sulla scritta per iniziare. In basso vediamo un messaggio che ci dice il tempo totale di “gioco”, dal momento dell’installazione. Quando questo tempo arriva a 2 ore e mezza (9000 secondi), il programma si ferma, perché dovreste già essere diventati ottimisti ! Spero che allora, pieni di gioia di vivere, partiate per un magnifico viaggio intorno al mondo (senza smartphone)…

Vediamo che succede appena avviamo il “gioco”:

Eccole qui, le nostre 16 faccine, tutte tristi, arrabbiate, depresse tranne una. Dobbiamo trovarla e toccarla nel più breve tempo possibile. In basso a destra vediamo un contatore che segna i secondi passati da quando abbiamo iniziato a giocare. Questo tempo sarà sommato al totale quando chiudiamo l’App. E’ da notare che l’App si chiude con il solito triangolino in basso per l’uscita dai programmi, ma anche con eventi che interrompono l’App in esecuzione, come chiamate, messaggi, eccetera. Questa App non va mai “in sospensione”… quando si chiude, si chiude.

Se tocchiamo la faccina sorridente, la finestra dei messaggi ci mostra OK e il numero di volte in cui abbiamo fatto la scelta giusta :

Se invece premiamo sulla faccina sbagliata (triste, depressa o arrabbiata), la finestra dei messaggi lampeggia brevemente in rosso e compare la scritta NO !

Quando ci stufiamo di giocare, possiamo chiudere l’App e i dati saranno salvati: durata della sessione di gioco, numero di volte che si è fatta la scelta giusta in tale sessione, tempo totale dall’installazione. Quando riavvieremo l’App, potremo leggere le “statistiche di gioco”, premento a lungo sulla scritta Play time = xx sec. Ci verrà mostrata una linea di testo per ogni sessione di gioco, in modo da poter valutare i nostri progressi.

Ecco un esempio :

Se avrete usato l’App per più di due ore e mezza di gioco, nel momento in cui toccherete la finestra dei messaggi per iniziare una nuova sessione, vi troverete davanti questo messaggio :

In questo caso, non disperate: se ancora non vi siete stufati di provare a diventare ottimisti 🙂 potrete riprovarci reinstallando l’App o cancellandone i dati con il gestore di App del sistema. Questo è tutto. Spero che questo giochino gratuito e senza pubblicità vi porti un po’ di ottimismo o almeno vi faccia fare due risate ! Non troverete questa App sulla mia pagina di Google Play, ma solo qui sul mio sito. L’App BeHappy.apk messa a disposizione per il download è compressa in un file zip con password. Dovrete quindi scaricarla, decomprimerla ed infine potrete installarla sul vostro smartphone / tablet Android, selezionando la checkbox “Installa da origini sconosciute” nel menù della sicurezza del dispositivo.

Clausola di non assunzione di responsabilità.
Il programma o software descritto, liberamente prelevabile dal sito, è da considerarsi una “demo” gratuita e pertanto l’autore Emilio P.G. Ficara non fornirà alcun supporto, né si assumerà alcuna responsabilità per ogni eventuale problema, danno o conseguenza che dovesse presentarsi nel download o nell’esecuzione dell’applicazione.

Cliccando questo link per effettuare il download del file implicitamente dichiarate di aver letto e capito la clausola di non assunzione di responsabilità e di accettarla.

Verificate sempre il checksum MD5 dei files che scaricate ! In questo caso deve essere: 0E94043AB497723E796F9520676BF453 ; se è diverso, il file è corrotto o non è quello originale, quindi non scompattatelo e buttatelo via ! Se invece è tutto ok, potete scompattarlo (usate il programma 7Z e la password: eficara).

Versioning:
2017 Set,24 Rel 0.2
 - modificato tempo massimo da 1 ora a 2 ore e mezza
 - aggiunto avviso di 15 minuti di gioco continuativo
   (con chiusura automatica)
2017 Set,23 Rel 0.1
 - versione di partenza 

EF9by9 gioco di logica (aka “sudoku”)

Quali effetti può provocare un weekend trascorso da solo in un B&B, con pioggia, tuoni e lampi ? Qualcuno si mette a fare le parole crociate, qualcuno preferisce i giochi di logica, io mi metto a scrivere App. Naturalmente, ho scritto un’App per fare un gioco di logica… Non ho chiamato questo gioco “sudoku”, bensì “EF9by9”, ma le regole sono le stesse. Questa App serve soprattutto per creare dei propri schemi da 9×9, verificando l’esattezza dei numeri via via inseriti ; in alternativa, è possibile generare automaticamente una griglia di gioco (casuale, ma corretta) da completare. In quest’ultimo caso, al giocatore spetta il compito di inserire i numeri mancanti, rispettando le regole di gioco. Facciamo un giro per vedere come si usa:

Ecco come si presenta lo schermo appena lanciata l’applicazione. Abbiamo la griglia di gioco (9 x 9), i pulsantini numerati da 1 a 9, una checkbox per la selezione Normale / Easy, il bottone “NEW” ed una finestra per i messaggi del programma (e altro). Premiamo “NEW” per generare una griglia di gioco casuale ; se la checkbox “Easy” è settata, verranno mostrati 35 numeri, altrimenti solo 20. Ecco un esempio:

Il compito del giocatore è di inserire in ogni spazio vuoto il numero giusto, fino a completare la griglia. Per inserire i numeri, il giocatore deve prima cliccare la casella su cui vuole operare ; questa diventerà col bordo rosso, quando selezionata. Adesso si può premere il pulsantino del numero da 1 a 9 e questo sarà inserito in quella specifica casella. Un momento ! Prima di accettare il numero impostato dal giocatore, il programma effettua 3 controlli : il primo per vedere se il numero è già presente nella riga selezionata ; il secondo per vedere se il numero è già presente nella colonna selezionata e infine il terzo per vedere se il numero è già compreso nel quadrato di 3 x 3 che contiene la selezione. Queste sono le regole del gioco ! Se il numero scelto dal giocatore soddisfa le regole, allora viene inserito nella casella, altrimenti l’operazione non viene eseguita e la casella dei messaggi lampeggia brevemente in rosso. All’interno verrà scritto il motivo per cui il dato non è stato accettato. Facciamo un esempio di errore: abbiamo cliccato 1 e la casella lampeggia in rosso e quindi possiamo leggere al suo interno: 1 is at: row=7 col=0 che significa che il numero 1 è già presente alla riga 7, colonna 0 (il punto 0,0 è in alto a sinistra).

Se vogliamo cancellare un numero selezionato, basta premere brevemente la finestra dei messaggi. Possiamo anche inserire un altro numero, senza prima cancellare il precedente. Ad ogni nuova immissione verrà comunque eseguito il test di validità. Se riusciamo ad inserire tutti i numeri, il gioco è risolto e la finestra dei messaggi in basso lampeggerà brevemente in verde, mostrando il messaggio: “Solved!”.

Ecco un esempio di gioco risolto:

Ho scritto un algoritmo per la generazione delle griglie che è veramente semplificato e chiunque sia pratico del gioco lo scoprirà subito ! Comunque, si tratta di una App gratuita e senza pubblicità, quindi consideratela come una “forever-beta version” 🙂 Non la troverete sulla mia pagina di Google Play, ma solo qui sul mio sito. L’App EF9by9.apk messa a disposizione per il download è compressa in un file zip con password. Dovrete quindi scaricarla, decomprimerla ed infine potrete installarla sul vostro smartphone / tablet Android, selezionando la checkbox “Installa da origini sconosciute” nel menù della sicurezza del dispositivo.

Clausola di non assunzione di responsabilità.
Il programma o software descritto, liberamente prelevabile dal sito, è da considerarsi una “demo” gratuita e pertanto l’autore Emilio P.G. Ficara non fornirà alcun supporto, né si assumerà alcuna responsabilità per ogni eventuale problema, danno o conseguenza che dovesse presentarsi nel download o nell’esecuzione dell’applicazione.

Cliccando questo link per effettuare il download del file implicitamente dichiarate di aver letto e capito la clausola di non assunzione di responsabilità e di accettarla.

Verificate sempre il checksum MD5 dei files che scaricate ! In questo caso deve essere: 582FB5275D1A004B489434E0F88DC732 ; se è diverso, il file è corrotto o non è quello originale, quindi non scompattatelo e buttatelo via ! Se invece è tutto ok, potete scompattarlo (usate il programma 7Z e la password: eficara).

Versioning:

2017/09/12 21.30:00 Aggiunta funzione “mostra soluzione” premendo una sequenza di 6 tasti (a voi il compito di scoprirla !)
2017/09/10 20:25:56 aggiunta funzione pulizia griglia premendo a lungo il pulsante NEW
2017/09/10 15:44:06 corretto errore su verifica gioco risolto

Usare la VGA-Cam C328 con Freebasic

Ho in mente di fare alcuni esperimenti per la “visione” elettronica e, come prima cosa, ho deciso di utilizzare un piccolo modulo con telecamera per acquisire le immagini. Tempo fa (MOLTO tempo fa) comprai un modulo VGA CAM-100 che poteva essere controllato da seriale, era molto piccolo ed era alimentato a 3.3V. Il mio modello era prodotto da Comedia, ma credo che ora sia andato fuori produzione. Ho però visto che altri modulini chiamati C328 e simili, vengono ancora prodotti da altre case. Tra le altre belle cose, questo dispositivo è in grado di produrre un file immagine in formato JPG, oltre che in “raw data” e non è cosa da poco…

Ho così realizzato un piccolo hardware di interfacciamento con il PC, che potete vedere nella foto sottostante:

L’hardware ‘filato’ per connettere il modulo alla USB del PC

Non è una gran bellezza, diciamocelo… però tenete presente che attualmente vivo in un B&B, lontano da casa e senza risorse (elettroniche). Mi sono quindi arrangiato ! Vediamo nella foto il modulo VGA (a destra), il regolatore 3.3V (in basso al centro) e l’interfaccia USB-Seriale (a sinistra). Nota bene: si DEVE usare una interfaccia USB che abbia lo switch per poter funzionare a 3.3V o 5V. In questo caso dovrà essere usata la modalità a 3.3V. In alto vediamo un altro piccolo circuitino, ma questo serve solo a tenere fermi i pin strip per i vari cavetti di collegamento. Lo schema del regolatore da USB +5V ai 3.3V necessari per il modulo VGA è il seguente:

Anche se sullo schema c’è scritto LM317, voi userete un modello equivalente con  low-drop, in grado di stabilizzare con 5V in ingresso. Io qui avevo solo quello “sbagliato”, ma in questo caso di emergenza ho dovuto adattarmi (per fortuna il consumo del modulo VGA è basso).

Veniamo adesso al software. Questo è lo screenshot del programma in funzione:

Vediamo i comandi : per prima cosa apriremo la porta di comunicazione (Com 6 nello screenshot). Il pulsante da premere sarà [Open] che poi cambierà in [Close], come si vede nell’immagine. Una volta aperta la porta seriale (l’interfaccia USB-Seriale) si cliccherà il pulsante [Sync * 60] che invia per 60 volte il pacchetto SYNC al modulo VGA. Questo comando serve a sincronizzare il modulo VGA con il programma. Di solito dopo 25 tentativi la VGA-Cam risponde e allora si può dare il comando successivo, cliccando il pulsante [Initial] che invia le impostazioni per il formato dell’immagine. Si riceverà un ACK dal modulo. Dopo clicchiamo [Pack Size] che provvede a settare il modulo perché usi pacchetti dati da 32+6 bytes (ho tenuto bassa la quantità in previsione di un utilizzo di microcontrollore con poche risorse). Anche qui riceveremo un Ack, come si vede nello screenshot. Ora possiamo dare il comando [Snapshot] con cui il modulino “scatterà una foto” in formato 640×480. Dopo aver ricevuto l’Ack, clicchiamo finalmente il pulsante [Get Pic] e così inizierà la trasmissione dei dati relativi allo Snapshot memorizzato. A fine trasferimento, se tutto è andato bene, sulla directory di lavoro del programma troveremo il file jpegout.jpg, con la foto scattata. Qui sotto potete vedere un esempio di tale file. Sono io che sto provando il software !

Ho deciso di pubblicare l’intera cartella di progetto, contenente sia l’eseguibile sul path /release/Vga_Camera.exe, sia il file sorgente in FreeBASIC (con FireFly Visual Designer) sul path /forms/Form1.frm, così chi vorrà potrà modificare / migliorare il software a suo piacimento. Consiglio caldamente di leggere il manuale del modulo, disponibile in PDF sul sito SparkFun al link: C328_UM.pdf .

Si noti che, dopo qualche secondo senza inviare comandi, il modulo VGA si scollega ed è quindi necessario ripetere la procedura di Sync e successive. Se invece si continuano a dare comandi [Snapshot] e [Get Pic] il modulo rimane collegato e continua a fare il suo lavoro. Il tempo di trasmissione di una immagine JPG 640*480 a 115200 BPS è di circa 10 secondi.

Per quanto riguarda l’hardware, i collegamenti sono estremamente semplici. Di sotto nell’immagine potete vedere i 4 fili in uscita dal modulo:

Il filo rosso [3.3V] andrà collegato all’uscita del regolatore 3.3V ; il filo giallo TXD verrà collegato al pin RXD del modulo USB-Serial ; il filo verde RXD andrà al pin TXD del modulo USB-Serial e infine il filo nero GND andrà collegato sia al pin GND del modulo USB-Serial che al GND del regolatore a 3.3V. Tutto qui. Notate che ho usato un connettore USB “nudo” per prelevare direttamente i 5V per il regolatore. Lo vedete di fianco all’interfaccia USB-Serial.

Clausola di non assunzione di responsabilità.
Il programma o software descritto, liberamente prelevabile dal sito, è da considerarsi una “demo” gratuita e pertanto l’autore Emilio P.G. Ficara non fornirà alcun supporto, né si assumerà alcuna responsabilità per ogni eventuale problema, danno o conseguenza che dovesse presentarsi nel download o nell’esecuzione dell’applicazione.
Cliccando questo link per effettuare il download del file implicitamente dichiarate di aver letto e capito la clausola di non assunzione di responsabilità e di accettarla.

Verificate sempre il checksum MD5 dei files che scaricate ! In questo caso deve essere: 6933806A278014FC2E2E379F86922D88 ; se è diverso, il file è corrotto o non è quello originale, quindi non scompattatelo e buttatelo via ! Se invece è tutto ok, potete scompattarlo (usate il programma 7Z e la password: eficara).

Potete usare l’eseguibile anche su una chiavetta di memoria USB, in quanto non ha bisogno di installazione.

Localizzatore GPS con SMS

Aggiornato il 25 Apr 2017 – Finito!
Ho deciso di progettare e costruire un semplice localizzatore GPS dopo un viaggio in macchina. Quando, dopo centinaia di Km di strada, sono arrivato a destinazione, ho parcheggiato l’auto ed ho citofonato alle persone che ero andato a trovare. Ho detto: “Posso lasciare qui la macchina ?” e mi è stato risposto: “Sì, c’è la telecamera”. Bene, avevamo punti di vista diversi sul lasciare lì la macchina! Io intendevo: “dà fastidio se la lascio qui ?” e loro: “lasciala pure lì, che se tentano di fregartela lo vediamo dalla telecamera”… Così ho deciso di realizzare questo localizzatore, da nascondere nell’auto quando vado fuori. La mia automobile non è “preziosa”, ma andare in auto e tornare in treno è… scocciante!

Inizialmente avevo pensato di realizzare la cosa usando un vecchio smartphone, creando una App in grado di fare ciò che mi serviva; poi, invece, ho deciso di usare un paio di modulini comprati su Internet. Ho sempre scritto volentieri le mie App, che poi ho pubblicato in forma gratuita su Google Play, ma recentemente ne ho dovute cancellare un paio perché mi è arrivato l’avviso di pubblicare una pagina di “privacy policy” a causa dell’uso della telecamera interna del telefono. Ora, l’uso della telecamera era assolutamente “pulito”, non carpivo dati sensibili dell’utente (non me ne può fregare di meno), ma la “dura lex” impone di scrivere una pagina in linguaggio “da legali” per avvisare l’utente che scarica l’App dal Market. Allora, dato il mio odio profondo per la burocrazia e per le cose inutili, ho deciso di rimuovere le App coinvolte e di non scriverne altre che richiedano di seguire la vigente normativa europea. In un tempo in cui tutti pubblicano ogni cosa della loro vita, VOLONTARIAMENTE, sui “Social”, le leggi europee sulla privacy mi sembrano delle autentiche fesserie. Purtroppo, però, le multe per inadempienza sono molto, molto salate e quindi io smetto di pubblicare App gratuite e stop.

La struttura hardware

Il localizzatore è molto semplice; usa un modulo GPS con uscita seriale che si compra su Internet a meno di 8 Euro e un modulo GSM M-590 in kit che ho pagato addirittura meno di 3 Euro!  I moduli sono collegati ad un microcontrollore Atmel ATmega48V che gestisce tutte le operazioni necessarie con un apposito firmware che ho scritto in C. Per quanto riguarda il modulo GSM, consiglio di leggere questo mio articolo che lo descrive in modo approfondito. Attenzione: il modulo GSM dovrà essere inizializzato preventivamente (vedi articolo citato, comando: AT+IPR=2400^M^J) per forzare la velocità della porta seriale. Questo è necessario in quanto il micro ATmega48V ha una sola UART e questa è usata per il modulo GPS con protocollo 9600,N,8,1. Ho dovuto quindi implementare una seconda seriale da software e prudentemente ho usato una velocità bassa (2400 BPS) per il GSM.

Se volete ulteriori notizie sul modulo GPS GY-NEO6 MV2, questo è il link da cui si può scaricare il datasheet. Nella figura sottostante potete vedere un esempio dell’output seriale, catturato con il programma di terminale seriale RealTerm impostato a 9600,N,8,1. Le righe evidenziate in giallo sono quelle che vengono usate dal firmware per determinare la posizione (latitude-longitude) attuale.

Il modulo GPS può essere utilizzato senza alcuna modifica hardware. La cosa veramente importante è di non superare mai il limite di 3.6V per l’alimentazione.

Il modulo GSM M-590, invece, arriva in kit (scatola di montaggio) e deve essere costruito. Il montaggio non è complicato, anche se si tratta di componenti smd. La parte difficile è saldare i led, che… tendono a rompersi! Quelli forniti con il kit sono molto, molto delicati. Consiglio di comprarne altri in package 0805 e usare molta pazienza e accuratezza nella saldatura. E’ imperativo l’uso di un buon saldatore. Lo schema del modulino è riportato nella figura sottostante.

Le zone evidenziate indicano le modifiche da fare. Il diodo D2 non sarà montato. Al suo posto si metterà un ponticello. La resistenza R4 da 4.7 KOhm sarà montata sui pin del connettore (vedi figura sotto), così come i condensatori C2 da 100nF e C3 da 22 pF. Il condensatore C1 non sarà montato. In pratica, il modulo sarà collegato al circuito a microcontrollore con 4 fili: Vgsm, GND, GSM_RX e GSM_TX.

Vediamo infine lo schema del circuito a microcontrollore. Come anticipato, si basa sul micro Atmel ATmega48V che ha 4KB di Flash, 256 Bytes di EEprom e 512 Bytes di Ram.

Se volete leggere lo schema con maggior chiarezza, scaricate il PDF da questo link. Nello schema è prevista l’alimentazione tramite una batteria ricaricabile Li-ion da 3.7V. L’assorbimento del circuito può andare da 50 a 250mA, con brevi picchi di 2A in funzione delle varie fasi operative dei moduli GPS e GSM. La durata della batteria, quindi, dipende dalla sua capacità. Una cella Li-ion a piena carica ha una tensione di 4.2V e scende a 3.7V quando la carica residua è circa del 10%. La tensione ideale per l’alimentazione del circuito è di 3.9V ; funziona anche con qualcosa di meno, ma il rischio è che il modulo GSM non riesca più ad inviare gli SMS. Notate che alcune batterie Li-ion di formato AA mostrano in etichetta una capacità molto elevata, ma spesso questa indica che la cella stessa può dare quella corrente, superiore alla nominale, per un periodo limitato di tempo. In pratica, in alcune applicazioni (in genere dove c’è un motorino elettrico) è necessario avere un corrente alta per un periodo di tempo breve e allora, queste batterie sono idonee allo scopo. Per un consumo “leggero” e continuativo, invece, bisogna guardare alla capacità reale della batteria. Un metodo infallibile per misurare questa capacità è quello di mettere in carica la batteria con una sorgente di cui si conosca l’erogazione di corrente. Facciamo un esempio: se io ho un caricabatterie settato per dare una corrente max di 300mA e la batteria si ricarica completamente in 4 ore, potrò dire con una certa sicurezza che è una cella da 1200mA (anche se c’è scritto sopra “4800mA”). Attenzione ! Se alimentate il circuito a batteria, dovete assicurarvi di disconnetterla quando si scarica oltre una certa soglia. Le celle Li-ion, se scendono al di sotto di 2.75V, perdono la capacità di ricaricarsi ! Alcuni modelli di celle sono protetti da un circuito interno contro l’over-charge e l’under-voltage, ma questa caratteristica NON è comune. Gran parte delle batterie low-cost non sono protette, quindi è compito vostro averne cura…

Se invece vogliamo alimentare il circuito a 12V, possiamo usare un regolatore lineare o uno switching. Nella figura sotto potete osservare lo schema di un regolatore lineare (super collaudato) in grado di fornire 3.9V stabilizzati. Sul regolatore andrà montato un piccolo dissipatore.

La struttura del software

Il software è scritto in linguaggio C ed è strutturato in due tasks indipendenti: 1) il gestore del modulo GPS e 2) il gestore del modulo GSM. I due tasks sono non-bloccanti e un watchdog si occupa di resettare il micro qualora uno di essi dovesse restare bloccato per più di 2 secondi.

Il task GPS si occupa di rilevare la posizione Lat – Lon quando il modulo la invia da seriale. Viene utilizzato il record NMEA di tipo $GPGGA, che viene generato quando il ricevitore ha “agganciato” un numero sufficiente di satelliti. I dati vengono salvati in un array di bytes in Ram che sarà poi utilizzato come testo dello SMS inviato a seguito di una richiesta. Il buffer è organizzato in modo da contenere la posizione corrente e 5 posizioni precedenti, prese a distanza di 60 campionamenti validi ognuna. In questo modo, se il ricevitore non vede più il cielo, in memoria restano almeno le ultime 5 posizioni valide prima della perdita della visuale. Questa memoria non viene azzerata al reset del micro (l’array è definito con la clausola __no_init), ma viene solo formattata in modo adeguato. Al primo reset (al power-on) la Ram ha dati casuali e quindi la routine di inizializzazione sostituisce con degli “spazi” ogni carattere fuori range. Se il reset è a caldo, quindi con il circuito già alimentato, i dati contenuti nel buffer saranno probabilmente validi e quindi l’inizializzazione non apporterà correzioni.

Il task GSM si occupa di verificare se ci sono chiamate dai numeri abilitati e in caso ci siano, si occupa di inviare un SMS con il testo elaborato dal task GPS, con le coordinate del dispositivo. La prima operazione dopo il reset è quella di aspettare la stringa “+PBREADY” dal modulo. Questa stringa ci conferma che il modulo è attivo e registrato sulla rete dell’operatore. La SIM deve essere preparata in modo da non richiedere un PIN per l’attivazione. E’ inoltre opportuno disabilitare ogni servizio non necessario (segreteria, messaggi automatici, ecc). Una volta ricevuta la conferma di registrazione, il software invia al modulo il comando “AT+CLIP=1” che avvia il servizio di identificazione del chiamante. In pratica, quando si riceve una chiamata, oltre alla classica stringa “RING” si riceve un altro messaggio “AT+CLIP:” seguito dal numero di telefono del chiamante. Il numero ricevuto è comparato con i due numeri abilitati (memorizzati in EEPROM, vedremo poi come) e se il confronto è positivo il messaggio SMS viene inviato al chiamante quando questo chiude la chiamata (nota: il dispositivo non “risponde” alla chiamata, non ci sono costi addebitati sul telefono che chiama). La chiusura della chiamata viene recepita con il messaggio “NO CARRIER”. Il task quindi invia l’SMS e attende la conferma dell’avvenuto invio e poi riprende il suo ciclo con la fase di attesa di nuove chiamate. Se invece qualcosa va storto, il task esegue un reset del modulo GSM togliendo brutalmente alimentazione al modulo stesso, pilotando un pin di uscita del microcontrollore che è collegato ad uno switch elettronico realizzato con due mosfet P-N (vedi schema). Questa soluzione può sembrare eccessiva e costosa, ma il datasheet del costruttore del modulo M-590 consiglia, in casi in cui non si riesca a ripristinare il modulo con il comando software, di togliere alimentazione… e così ho deciso di tagliar corto e di usare questa soluzione comunque, senza perdere tempo con il comando software. Ovviamente, dopo questa operazione di riavvio del modulo, il task GSM riparte dallo stato iniziale, attendendo il messaggio “+PBREADY” prima di ogni altra operazione.

Costruzione ed utilizzo

Come si vede dalla foto del dispositivo in testa all’articolo, non c’è un circuito stampato per il microcontrollore, ma il tutto è assemblato su di una scheda “millefori” per prototipi. Data la semplicità del circuito e data la natura “sperimentale” del progetto, ho deciso per questa soluzione. I componenti sono pochi e chiunque abbia una certa pratica di costruzioni elettroniche può riuscire a realizzare il localizzatore, con un po’ di pazienza. Naturalmente, non è il progetto ideale per chi è alle prime armi e non ha la padronanza del saldatore e un po’ di pratica con i prototipi elettronici.

Una volta costruito il circuito, si dovrà programmare il microcontrollore. Per la programmazione del microcontrollore io utilizzo il programma AvrDude, disponibile a questo link. Troverete, nel file zip di questo progetto, tre files batch che servono a programmare, rispettivamente, la memoria Flash, la EEPROM e i FUSES (fusibili) con la configurazione necessaria per questa applicazione. I files batch prevedono che il programma AvrDude sia installato e raggiungibile con il percorso impostato. Modificate i files batch secondo le vostre esigenze, adattandoli per il percorso dell’applicazione e per il modello di programmatore usato.

1_wrFlash.bat per la programmazione della memoria Flash:

avrdude -P com14 -p m48 -c stk500 -e -U flash:w:localizer.hex
pause

2_wrEeprom.bat per la programmazione della memoria EEPROM:
avrdude -P com14 -p m48 -c stk500 -U eeprom:w:earom-wr.bin
pause

3_wrFuses.bat per la programmazione dei FUSES:
avrdude -P com14 -p m48 -c stk500 -U hfuse:w:0xC5:m -U lfuse:w:0xFC:m
pause

Come si vede dal contenuto dei files batch, il programmatore che uso è di modello stk500 ed è collegato sulla porta com14. Le operazioni di programmazione saranno eseguite nell’ordine: 1) scrittura della memoria Flash, 2) scrittura della memoria Eeprom, 3) scrittura dei Fuses.

Per rendere il dispositivo in grado di funzionare, dobbiamo modificare il file earom-wr.bin per inserire i due numeri di telefono che saranno autorizzati a comandare l’invio del messaggio SMS da parte del dispositivo. Vediamo un esempio di tale file aperto con l’applicazione FrHed, scaricabile a questo link.

Evidenziati in giallo ci sono i due numeri. Quelli nell’immagine non sono numeri “veri”, servono solo per far capire dove e come scrivere quelli “reali”. Con FrHed è possibile modificare i valori sia in ASCII, spostando il cursore di editing sulla finestra a destra, sia in Hexadecimal, spostandolo a sinistra. Il numero programmato dovrà essere preceduto dal prefisso internazionale, perché così viene ricevuto dal modulo GSM (vedi esempio sotto).

In pratica, se usiamo un telefono con SIM italiana, il numero inizierà con 39. E’ fondamentale chiudere il numero con il valore Hex 00, che viene usato come terminatore di stringa dal linguaggio C. Nell’immagine di esempio i due numeri programmati sono: 39 333 1234567 e 39 339 7654321; modificateli secondo le vostre esigenze e quindi salvate il file aggiornato. Ora sarà possibile trasferire i numeri nella EEPROM del microcontroller eseguendo il file batch WrEarom.bat.

Il file che contiene il firmware del micro è localizer.hex, che contiene il codice compilato dall’indirizzo 0x0000 a 0x096F. Rimane quindi molto spazio per eventuali aggiornamenti e migliorie.

Una volta programmato il micro, si potrà accendere il dispositivo. Nello schema potete vedere un connettore di uscita denominato USB SERIAL. A che serve ? E’ uno strumento di debug. Dato che il modulo GPS occupa solo il pin di ingresso della UART del micro, ho pensato di usare quello di uscita come pin di debug. Su questo pin, infatti, viene inviata tutta una serie di messaggi di testo, con protocollo 9600,N,8,1. Quando il modulo GPS determina una nuova posizione valida, i dati “filtrati” vengono inviati sull’uscita di debug e così sono visibili su un terminale seriale connesso alla porta. Oltre a questo, anche le comunicazioni con il modulo GPS vengono replicate su questa porta, permettendo così di analizzare tutta la comunicazione tra il micro e i due moduli. E’ una “feature” molto importante e molto utile per capire cosa c’è che non va (se c’è qualcosa che non va).

Ora portiamo il circuito funzionante all’aperto e facciamo un giro per almeno 5 minuti, cercando di spostarci in modo da avere diverse localizzazioni in memoria. Se siamo pigri, mettiamo il circuito sul terrazzo e lasciamolo lì fermo… Dopo 5 o sei minuti, con uno dei telefoni il cui numero è abilitato in Eeprom, facciamo una chiamata al numero della SIM contenuta nel localizzatore. Facciamo fare uno o due squilli e poi chiudiamo. Il localizzatore invierà immediatamente uno SMS di risposta con i dati memorizzati (ci può essere un ritardo nella ricezione del messaggio se l’operatore è “intasato”). Riceveremo quindi un messaggio di questo tipo (ho pixellato alcune cifre per la privacy -la mia-) :

Vediamo in prima posizione la locazione attuale, l’ultima rilevata dal GPS al momento della chiamata. Nelle successive righe ci sono le ultime 5 posizioni memorizzate, in base ad un temporizzatore che agisce ogni 60 localizzazioni valide (record $GPGGA del protocollo NMEA).

Le coordinate ricevute dal modulo sono in formato ggxx.xxxxxN(S) per la latitudine e gggxx.xxxxxE(W) per la longitudine. Purtroppo, se proviamo ad inserire i dati esattamente così come li riceviamo su un programma tipo Maps, non otterremo risultati. Dobbiamo quindi fare un paio di semplici operazioni.

Supponiamo di avere ricevuto questo messaggio: 3804.373568N01538.944818E; le prime cifre (fino a N) sono la latitudine e le ultime (fino a E) sono la longitudine. Per convertire questo formato in uno accettabile per Maps, dobbiamo agire così: latitudine 3804.373568N dove 38 sono i gradi; ora dividiamo 04.373568 per 60 e otteniamo 0,0728928; in totale, la latitudine risultante sarà: 38.0728928. Ripetiamo la stessa operazione per la longitudine: 01538.944818E dove 015 sono i gradi; ora dividiamo 38.944818 per 60 e otteniamo  0,6490803; in totale, la longitudine è 15.6490803. Ora possiamo andare su Maps ed inserire nella barra di ricerca questi numeri: 38.0728928, 15.6490803 ed otterremo la mappa della località indicata. Notare, nel formato, che come separatore per i decimali viene usato il “punto”, mentre per dividere i due campi lat – lon viene usata la “virgola”. Per convenzione, la latitudine è indicata per prima e la longitudine per seconda. Nel nostro esempio abbiamo usato latitudine Nord (N) e longitudine Est (E). Se usiamo il programma in altre parti del mondo, potremmo ricevere dal GPS coordinate S (Sud) e W (West). In questi casi, dovremo inserire un segno “meno” prima della latitudine o della longitudine. In breve, N è “più” (si può omettere) ed S è “meno”, così come E è “più” e W è “meno”.

Infine, qui sotto, dopo la clausola di non assunzione di responsabilità, trovate il link al file Localizer-v1.zip liberamente scaricabile, che contiene la prima release del firmware. L’applicazione è stata provata in condizioni “normali” e funziona perfettamente, ma se scoprirò errori nascosti, farò le opportune correzioni e pubblicherò l’aggiornamento.

Clausola di non assunzione di responsabilità.
Il programma o software descritto, liberamente prelevabile dal sito, è da considerarsi una “demo” gratuita e pertanto l’autore Emilio P.G. Ficara non fornirà alcun supporto, né si assumerà alcuna responsabilità per ogni eventuale problema, danno o conseguenza che dovesse presentarsi nel download o nell’esecuzione dell’applicazione.

Cliccando questo link per effettuare il download del file implicitamente dichiarate di aver letto e capito la clausola di non assunzione di responsabilità e di accettarla.

Verificate sempre il checksum MD5 dei files che scaricate ! In questo caso deve essere: F0E6090B3CB2A96E4FEF0C5D5A0BB131 ; se è diverso, il file è corrotto o non è quello originale, quindi non scompattatelo e buttatelo via ! Se invece è tutto ok, potete scompattarlo (usate il programma 7Z e la password: eficara).

Telepatometro

Mi sono un po’ stufato delle compagnie telefoniche e delle loro “variazioni di contratto unilaterali”, che significa che se vuoi continuare a usare il telefono devi tacere e accettare le nuove condizioni. Perché mai dobbiamo continuare a usare questi collegamenti “primitivi” per contattare una persona (o un dispositivo) a distanza ? Perché non usare la TELEPATIA ? Ah, forse voi pensate di non essere telepati. Beh, non tutti lo sono. Non fatevene un cruccio. Però, forse lo siete e non lo sapete ! Allora vi serve un dispositivo per misurare le vostre capacità di telepate, come “trasmettitore” o come “ricevitore” o in entrambi i ruoli.

E’ da tanto che penso a come sarebbe bello un mondo pieno di telepati, dove ci si possono scambiare idee senza parlare, senza ipocrisie, senza menzogne. Lo so, sarebbe la fine per una certa classe politica e soprattutto per le compagnie telefoniche. E allora che aspettiamo ? Per dimostrarvi che è da un po’ che ci penso, vi invito a visitare questo link, dove potrete scaricare una copia in PDF della rivista “Electronics Projects” del Gennaio 1990. Sfogliate la rivista fino a pag. 25 e lì troverete un mio articolo che ha come titolo “Il telepatometro” !

Quella volta, come strumento per misurare le capacità telepatiche, avevo fatto un circuito con un micro 6804 (Motorola). Ho ancora il prototipo :

Oggi vi presento una versione più moderna 🙂 ma il concetto rimane lo stesso. Qui sotto vedete una schermata della App per Android :

Ho messo qui l’immagine in orizzontale, per fare un raffronto con il “vecchio modello”, ma in effetti l’App supporta solo l’orientamento verticale (portrait).

Come funziona ?

Lo schermo del telefono è separato in due da una riga gialla. In alto c’è il lato del “ricevitore”, con cinque pulsanti ognuno dei quali ha un simbolo Zener, della serie usata anche da persone che effettuano esperimenti seri in questo settore. In basso c’è la parte del “trasmettitore”, con un display a due cifre, un pulsante di “exit” e un altro per avviare e controllare l’andamento della prova.

Facciamo un giro: due persone si mettono sedute a un tavolo, una di fronte all’altra, con il telefono in mezzo. Al centro del telefono (sulla riga gialla) si piazza uno schermo (può essere un pezzo di carta, oppure la mano di uno dei giocatori) in modo che il “ricevitore” non possa vedere cosa c’è dal lato del “trasmettitore”. Il “trasmettitore” preme il pulsante a destra (quello con le due frecce tonde) e nello spazio centrale appare (in modo casuale) uno dei 5 simboli Zener: cerchio, quadrato, croce, stella, onde. Il “trasmettitore” si mette a pensare intensamente al simbolo visualizzato e il “ricevitore”, se è telepatico, sicuramente visualizzerà nella sua mente tale simbolo, quindi premerà il tasto corrispondente dalla sua parte. A questo punto il “trasmettitore” premerà di nuovo il pulsante a destra per estrarre un nuovo simbolo. La cosa andrà avanti per 20 volte (ho verificato che con più prove mi viene mal di testa) e alla fine ci sarà il conteggio dei risultati indovinati dal “ricevitore”. Tale valore sarà visualizzato sul display, che in tale occasione sarà lampeggiante. Per ripartire con un nuovo test (magari scambiando il “trasmettitore” e il “ricevitore”) si premerà di nuovo il solito pulsante a destra, oppure “exit” per terminare.

Probabilità

Avendo 5 simboli, la probabilità di indovinare quello giusto è del 20% (una su cinque) e quindi, ripetendo la prova per 20 volte, tipicamente avremo un totale di “carte indovinate” pari a 4. Possiamo verificare questa cosa facendo premere al “ricevitore” sempre lo stesso pulsante (lo stesso simbolo) per tutti e 20 i tentativi. Il valore ottenuto non si discosterà molto da 4. Allora, come facciamo a vedere se c’è telepatia ? Se due persone riescono ad ottenere un valore che si discosta MOLTO da quello previsto, tipo 8, 10 o più, potremo affermare che c’è qualcosa di “strano” (se non abbiamo imbrogliato) . Conviene fare questo “gioco” con molti amici, provando diverse combinazioni di “trasmettitori” e “ricevitori”. Va benissimo fare queste prove al tavolo di un Pub, ripetendo l’esperimento dopo uno o più boccali di birra ! L’importante è che chi poi dovrà guidare resti sobrio, anche se sfortunatamente non dovesse risultare telepatico !

Trovate l’App sulla mia pagina di Google Play, è gratuita.

Ecco un esempio di uno schermo di protezione realizzato con un pezzo di carta e due stuzzicadenti, in meno di un minuto. In questo modo si sta più comodi e nessuno “sbircia”. E’ facile realizzarlo (pure meglio) anche con materiale che trovate al Pub. Sarà un ulteriore divertimento…