giovedì 14 novembre 2013

Arduino Amplifier Shield

Cercando di rendere utilizzabile il circuito visto in questo post, ho pensato di rendere la versione definitiva come uno shield Arduino in modo da evitare al massimo cavi volanti

Per fare cio' e' stata presa una normale piastrina millefori tagliata sulle dimensioni di una Arduino a cui sono stati aggiunti pin mediante una strip (i pin inseriti sul lato dei contatti digitali dell'Arduino servono solo a rendere meccanicamente stabile lo shield e non sono elettricamente connessi)



I cavi dalla strumentazione vengono connessi alle morsettiere verdi (il contatto centrale non e' connesso...avevo solo morsettiere a tre posti)
Nelle foto e' mostrato il circuito completo per l'amplificazione da un solo canale dell'LM358 ma sono gia' stati predisposte la morsettiera ed il trimmer per regolare l'amplificazio (a destra nella foto sottostante) per il secondo canale

La lettura dei dati avviene sui Pin A3 (canale 1) e A5 (canale 2) dell'Arduino

Lo shield rovesciato
Alla fine la realizzazione e' piuttosto pulita ed ordinata (almeno per i miei standard)


mercoledì 13 novembre 2013

Doppio arcobaleno su Firenze

Foto da www.repubblica.it degradata e ridotta per motivi di copyright

Questo arcobaleno lo ho visto ma non ho avuto il tempo e la posizione per fotografarlo. A parte la particolarita' della posizione dell'arcobaleno c'e' da segnalare che si tratta in realta' di un doppio arcobaleno.
Come si vede dalla foto (ma era piu' evidente dal vivo) all'esterno dell'arco piu' luminoso era presente un secondo arco piu' tenue e dai colori invertiti (si nota come il rosso dell'arco esterno coincida con il rosso di quello interno). Per riferimento l'arco esterno e' in corrispondenza della Cupola del Brunelleschi
Per meggiori dettagli come al solito Wikipedia

Debian Wheezy su Acer Aspire 3003 LMi

Questo computer e' primo portatile personale che mi sono comprato (prima usavo solo quelli di lavoro o materiale obsoleto scartato da altri) ed ha una storia piuttosto complicata perche' e' una macchina che ho quasi subito odiato (costata poco ma con una pessima batteria, un monitor inguardabile alla luce ambientale e plastiche veramente economiche) e lo ho prestato varie volte (anche per prestiti annuali) ed e' sempre ritornato indietro....l'ultima volta giusto ieri


Si tratta di una macchina del 2007 con una scheda grafica SIS, 1024x768, 512 Mb di Ram (in due banchi da 256 Mb un altro motivo per cui ho odiato questa macchina), AMD Sempron 3000+ 1.8GHz

Per rimetterla in vita ho montato una Debian Wheezy XFCE che gira egregiamente (si consideri che nel momento in cui usci' il portatile era in circolazione Debian 4 ..adesso siamo alla 7 e non ci sono problemi)

Per attivare il Wifi si devono aggiungere i repository non-free e poi digitare
apt-get install firmware-b43-installer

Un paio di pecularita' del portatile
1) la scheda WiFi non si attiva di default ma si deve premere il pulsante frontale di destra fino a quando non si accende la luce arancione (vedi foto)
2) Effettuare il boot da USB non e' banale perche' premendo semplicemente F12 al boot non e' mostrata come periferica quella USB anche se inserita. Accendendo con la periferica USB inserita si deve entrare nel Setup del Bios, Boot, Hard Drive,Enter per espandere il ramo, si seleziona la chiavetta (in questo caso una Kingstone DataTraveler) ed con F6 si porta di un passo sopra il disco fisso HTS54xxxxxx. Si esce dal Bios salvando e si riavvia selezionando Hard Disk (in questo caso l'USB viene vista come HD) 




martedì 12 novembre 2013

Installare Ubuntu su disco esterno

Al lavoro ho, come penso piu' o meno tutti, un calcolatore che uso come un utente dai bassi privilegi. Cio' impedisce di giocare sul posto di lavoro ma impedisce anche di installare software per fare elaborazioni che possono essere utili per la mia attivita'

Visto che mi avanza un disco esterno piuttosto capiente ma vecchiotto (120 Gb) e visto che il computer di lavoro e' settato per fare il boot anche da USB Storage ho provato a montare Ubuntu su questa unita', non come Live Cd ma proprio come una vera installazione.
Su Internet ci sono diverse istruzioni che consigliano come prima cosa di rimuovere il disco fisso interno alla macchina con cui si crea l'installazione di Ubuntu sul disco esterno ma sono riuscito a portare a termine l'operazione senza modificare l'hardware della macchina .... basta sapere cosa si sta facendo


Si parte scaricando il file iso di Ubuntu (ho preferito la LTS attualmente al 12.04.03) ed ho creato una pennetta USB con cui fare il boot,
Una volta partito il sistema ho inserito il disco esterno (nella foto sopra si vede male ma e' appoggiato per traverso a sinistra del touchpad con la sigla Kraun) ed ho iniziato l'installazione.
Dopo un primo tentativo andato a vuoto perche' l'installer non voleva inserire GRUB su /dev/sdc (disco esterno) sono ripartito ed invece di creare due partizioni sul disco esterno (/ e swap) ne ho creato tre aggiungendone una di boot (/, /boot e swap).
Al successivo riavvio, selezionando il disco esterno, il sistema Ubuntu e' partito e la velocita' e' sostanzialmente discreta tanto da farne un sistema utilizzabile

sabato 9 novembre 2013

Arduino Aroboto Duemilanove (clone cinese)

Ho comprato per una decina di euro un clone cinese dell'Arduino Duemilanove da usare come scheda da battagli su DealExtreme

Arduino Duemilanove originale

Clone Cinese
come si vede dal confronto con l'originale, il clone cinese mostra una serie di pin aggiuntivi per montare dei servo ma si tratta solo di pin connessi ai normali PWM dell'Arduino

Al momento di provarla ho caricato lo skecth di esempio Blink ma il programmatore si rifiutava sempre di completare il lavoro

Sul momento ho pensato che si fosse corrotto il bootloader dell'Arduino (i led della scheda si accendono quindi l'alimentazione e' presente) e stavo per sostituire il processsore con uno originale comprato direttamente programmato da Arduino
Cercando meglio sul sito di DealExtreme, tra i commenti, viene riportato che le prime schede prodotte presentavano una resistenza denominata R2 che deve essere rimossa per permettere la programmazione (nelle nuove schede sembra che questa resistenza sia stata rimossa)

Francamente non so dissaldare un componente con saldatura SMD ed ho provato prima ad interrompere la pista con un trincetto ma senza risultato. Ho preso quindi il coraggio ed ho provato a rimuovere direttamente il componente sollevandolo con un trincetto

Scheda con R2 rimosso

Fatto cio' la scheda e' risultata programmabile e perfettamente funzionante....questo e' il divertente di comprare in Cina



venerdì 8 novembre 2013

Gauge Force + LM358 + Arduino

Il progetto di lettore per il Force Gauge per il laboratorio di geotecnica e' ai suoi passi finali

Nell'immagine sottostante il cavo rosso e giallo (in basso) derivano dai cavi di lettura del forge gauge (la cui alimentazione e' stata effettuata con una comune pila da 9V)
Il cavo blu che entra nel pin A0 dell' Arduino e' la lettura amplificata del segnale
I cavi nero e giallo accoppiato derivano corrente dall'Arduino ed alimentano il circuito e piu' in particolare l'LM358
Sono presenti inoltre una resistenza da 220 Ohm ed un trimmer (in blu) da 10 KOhm per tarare il valore di amplificazione




La configurazione dell'amplificatore e' quella di un operazionale invertente
http://www.scuolaelettrica.it/elettrotecnica/3dis5.jpg

per completezza riporto anche il pinout dell'LM358 (nel caso in esame e' stato usato solo un operazionale dei due che sono inseriti nell'IC)




e per finire un breve video che mostra la lettura della forza applicata sul force gauge direttamente nel monitor seriale dell'IDE di Arduino (e' stato usato lo sketch di esempio AnalogReadSerial nella categoria Basic)



giovedì 7 novembre 2013

Unire e velocizzare video con FFMPEG

Quando ero piccolo e guardavo Quark ero affascinato dalle riprese di persone che dormono (e soprattutto di quanto una persona si muova nel sonno) ..avrei voluto vedermi mentre dormivo

Naturalmente all'epoca non c'era ancora la diffusione dell'elettronica a basso costo di oggi ed avrei comunque dovuto dormire a finestra aperta. Oggi invece per pochi euro si possono comprare delle video camere ad infrarossi con illuminatori che permettono l'impiego in stanze di normali dimensioni completamente al buio. Il modello che ho comprato io era disponibile su Alibaba per meno di 20 euro (ovviamente e' privo di marca riconoscibile)


La video camera e' comoda perche' registra su una micro SD in formato GP3 ed ha solo dell'alimentazione da rete tramite il cavo USB ed il trasformatore allegato (fra parentesi il lettore microSD incluso nella confezione si e' rifiutato di lavorare sia su Windows che su Linux)

Alla fine si hanno file GP3 della lunghezza ciascuno di 30 minuti... il mio obbiettivo era quindi di avere un unico filmato accelerato (anche perche' vedere a tempo reale una registrazione di 7 ore di una persona che dorme e' francamente noioso). Cio' puo' essere fatto con FFMpeg
Per prima cosa si crea un file txt con all'interno la lista dei file che si vogliono unire secondo la seguente sintassi
-----------------------
file '1.gp3'
file '2.g3'
------------------------
chiamato questo file lista i vari video possono essere concatenati e convertiti in un unico passaggio con il comando
ffmpeg -f concat -i lista.txt -c copy night.avi

a questo punto si puo' velocizzare l'esecuzione con il comando
ffmpeg -i night.avi -r 40 -filter:v "setpts=0.05*PTS" -an n_veloce.avi

che permette di comprimere in 20 minuti oltre 7 ore di registrato (piu' veloce diventa schizofranico)







Luna e Venere nel cielo autunnale

Ma quanto caspita brilla Venere che si riesce a fotografare anche con un normale cellulare???



Differenze pratiche tra LM358 e LM741

Sto lavorando ad amplificare il segnale del Force Gauge gia' visto in questo post

Gli integrati di cui si trovano informazioni e tutorial (non molti peraltro) su Internet sono sostanzialmente due:
LM741 e LM358 (con il primo piu' datato e quindi con meggiore supporto dalla rete)



Ho provato entrambi e ci sono alcuni aspetti che fanno propendere per l'uso dell'LM358
  1. LM358 ammette una alimentazione a due fili (Vcc e GND) e puo' essere alimentato anche da una comune pila a 9 V (puo' essere alimentato direttamente anche da Arduino). LM741 necessita invece di trasformatore a tre uscite (V+, GND e V-) e viene indicato di usare una tensione di 15 altrimenti non e' garantito che l'integrato funzioni (alcuni sembra di si' ,altri no)
  2. LM358 ha un doppio operazionale mentre LM741 ne ha uno solo (con lo stesso numero di piedini)
  3. LM741 ha in piu' il controllo dell'offset mediante gli appositi piedini OFFSET NULL

Pinout LM741


Pinout LM358
Il circuito di amplificazione e' gia' pronto e lo mostrero nei seguenti post (e' basato su LM 358)

lunedì 4 novembre 2013

Android e Linux su I-Mate PDA 2K

Ho ritirato fuori per caso dall'archivio del materiale obsoleto questo terminale datato 2004 come anno di uscita che all'epoca era la formula 1 degli smartphone (tanto per dare un'idea l'Iphone sarebbe uscito nel 2007)
La caratteristica principale e' la tastiera QWERTY a scomparsa, la presenza di GPS, Bluetooth, WiFi con 128 Mb di Ram ed ha montato come sistema operativo supportato Windows Mobile 6.1 (incredibilmente lento)

Su questo terminale sono stati sviluppati molti progetti per effettuare il porting di altri sistemi operativi. Quello piu' interessante ed incredibile e' far girare Android 2.3.6 (uscito nel settembre 2011) su un terminale con specifiche di 7 anni prima. L'usabilita' non e' il massimo ma non e' peggio di Windows Mobile 6.1

Istruzioni per la configurazione di Android a questo link
Home di Android 2.3.6


Info su Android 2.3.6





Altrimenti e' possibile far girare sullo smartphone anche Linux con la versione Angstrom/QTopia.
In questo caso il progetto e' piuttosto vecchio e non e' piu' aggiornato dal 2007 (qui i file)

Boot di Angstrom


Qtopia





Amanita Cesarea e Trombette di morto


Di ritorno da un giro nel bosco

Amanita Cesarea

Trombetta di morto (Craterellus cornucopioides)
ed alla fine il tramonto su Firenze


giovedì 31 ottobre 2013

USB Key Read Only


Un amico mi ha portato questa chiavetta USB pubblicitaria perche' era interessato ad utilizzarla per i propri file visto il taglio da 17 Gb. Il problema e' che l'unita' si mostrava sempre come in sola lettura e quindi sostanzialmente non usabile per scopi differenti dal vedere il filmato pubblicitario

La cosa mi e' sembrata subito strana dato che non ho mai visto a giro tagli di memoria di questo tipo (o 16 o 32 Gb per esempio)


Ho provato a smontare il dispositivo per vedere se era nascosto uno switch. Sulle prime USB era comune trovare un interruttore a slitta vicino al connettore ma dopo aver rimosso 4 viti, una cucitura ed una tonnellata di colla nessun risultato

Rimontato il tutto ho riprovato ad inserire il dispositivo nella mia Debian Box le cose si sono un po' chiarite.
Sono visibili due partizioni: la prima da 18 Mega (e non 17 Giga!!) a sola lettura ed una seconda da 944 Mega di spazio libero liberamente scrivibile. Si tratta quindi di una comunissima USB Key da 1 Giga.
A questo punto rimane il problema della partizione a sola scrittura. Non puo' trattarsi di un blocco hardware perche' un eventuale switch di blocco scrittura avrebbe agito su tutta l'unita' disco e non su una sola partizione. Non si tratta nemmeno dell'impostazione dei permessi del sistema operativo (ho provato ad usare GParted per cancellare le partizioni ma l'operazione non e' permessa)

La possibile soluzione e' che il firmware della scheda sia stato modificato in modo proprietario per far apparire le due partizioni di cui una bloccata in scrittura (qualcosa di simile e' possibile con le chiavette SANDISK..ho provato il loro tool di formattazione a basso livello launchpadremoval.exe ma senza successo). Mi sa che la riconsegno cosi' com'e'

mercoledì 30 ottobre 2013

Cambio sistema di coordinate geografiche

Ogni tanto mi ricordo di essere un geologo con un po' di esperienza in telerilevamento.
Per un studio che sto facendo nei ritagli di tempo sto usando delle immagini Landsat 7 e non avendo una licenza Envi e ArcGis mi sto adattando ad usare QGis

Caricando i dati Landsat Toscana-Emilia (TIF georiferite) direttamente in QGis queste vengono inserite nel sistema di riferimento EPSG:32632 (WGS84 UTM Zona 32 N)


LE71920292001046EDC01
Gli shapefile che invece mi servono sono tutti nel sistema di riferimento EPSG 3003 (Monte Mario Italy Zona 1)

Invece di convertire le immagini e' possibile traslare il sistema di riferimento degli shapefile usando i tools GDAL in particolare con il comando

dove
wgs.shp e' il nome dello shape risultato dell'elaborazione
boaga.shp e' il nome del file shape da convertire
-s_srs e' il sistema di riferimento di partenza
-t_srs e' il sistema di riferimento finale

ogr2ogr wgs.shp boaga.shp -s_srs EPSG:3003 -t_srs EPSG:32632

martedì 29 ottobre 2013

Compressione video

Il video originale dell'intervento al Linux Day 2013 e' stato ripreso con una micro camera Go Pro a risoluzione Full HD. Il risultato e' che l'intervento della durata di circa 16 minuti corrisponde ad una occupazione su disco di circa 3.7 Gb... un po' troppo per pensare di effettuare l'upload su Youtube



Ho quindi provato a comprimere il file mediante il software ffmpeg e la seguente stringa

ffmpeg -i luca.mp4 -s 720x480 -acodec copy luca.mkv

al termine della compressione il file e' risultato essere di circa 30 Mb con una compressione di oltre un fattore 1000. La conversione e' stata fatta su un IBM T61 dual core con 2 Giga di Ram e per ogni secondo di video erano necessari circa 3-4 secondi di calcolo

Personalizzazione di Webiopi

Il sistema di gestione Web delle porte GPIO di Raspberry presentato in questo post puo' essere anche customizzato nell'aspetto dell'interfaccia per esempio per mostrare un solo pulsante



Un esempio viene riportato al Wiki di Google Code ...peccato che sia sbagliato

Dopo un po' di ricerche ecco una pagina funzionante che accende e spenge il solo pin GPIO 25. L'aspetto fondamentale e' che prima di usare il pin questo deve essere dichiarato come output
Il file deve essere posizionato in /usr/share/webiopi/htdocs
------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content = "height = device-height, width = 420, user-scalable = no" /> 
        <title>WebIOPi | Demo</title>

        <script type="text/javascript" src="/webiopi.js"></script>
        <script type="text/javascript">
        webiopi().ready(function() {
webiopi().setFunction(25,"out");

                var content, button;
                content = $("#content");
                               
                button = webiopi().createGPIOButton(25, "SWTICH");
                content.append(button); // append button to content div
                       
           

webiopi().refreshGPIO(true);
                
        });
                
        function mousedown() {
                webiopi().digitalWrite(7, 1);
        }
        
        function mouseup() {
                webiopi().digitalWrite(7, 0);
        }
        
        function outputSequence() {
                var sequence = "01010100110011001100101010" // S.O.S. morse code or whatever you want
                // output sequence on gpio 7 with a 100ms period
                webiopi().outputSequence(7, 100, sequence, sequenceCallback);
        }
        
        function sequenceCallback(gpio, data) {
                alert("sequence on " + gpio + " finished with " + data);
        }
        
        function callMacro() {
                var args = [1,2,3] // or whatever you want
                // call myMacroWithArgs(arg)
                webiopi().callMacro("myMacroWithArgs", args, macroCallback);
        }
        
        function macroCallback(macro, args, data) {
                alert(macro + " returned with " + data);
        }
        
        </script>
        <style type="text/css">
                button {
                        display: block;
                        margin: 5px 5px 5px 5px;
                        width: 160px;
                        height: 45px;
                        font-size: 24pt;
                        font-weight: bold;
                        color: black;
                }
                
                input[type="range"] {
                        display: block;
                        width: 160px;
                        height: 45px;
                }
                
                #gpio7.LOW {
                        background-color: White;
                }
                
                #gpio7.HIGH {
                        background-color: Red;
                }
        </style>
</head>
<body>
        <div id="content" align="center"></div>
</body>
</html>

Video presentazione Linux Day 2013 - Nemo Rov

Il video dell'intervento al Linux Day 2013
La prima parte e' tenuta da Francesco Mugnai con la presentazione dell'esperienza sulla Costa Concordia mentre nella seconda viene spiegato con qualche dettaglio maggiore le caratteristiche del ROV






File presentazione Libreoffice
File presentazione Pdf

lunedì 28 ottobre 2013

Importanza del cavo USB

Un amico e' mi ha chiesto su un aiuto per recuperare i dati dal suo disco esterno Lacie. Questo modello, riportato nella foto, presenta  un cavo USB esterno sempre attaccato al case in alluminio che ovviamente si era tranciato nel punto di maggiore tensione 


Il primo istinto e' stato quello di trovare un set di chiavi torx per aprire il case quando e' stato notato che il cavo esterno era facilmente rimuovibile e sotto il connettore grigio si nascondeva una rassicurante mini Usb.

E' stato quindi recuperato quindi il primo cavo mini Usb presente in ufficio .. un cavo retrattile come quello riportato come esempio nella foto sottostante

Una volta connesso il cavo al disco ed al computer il disco fisso ha iniziato a girare emettendo dei tipici ticchettii spesso indicatori di disco fisicamente rotto.
Visto che era improbabile anche la rottura del disco ho suggerito di sostituire il cavo retraibile con un normale cavo mini USB (caratterizzato da una sezione maggiore)

A questo punto il disco ha iniziato a funzionare correttamente. L'ipotesi piu' probabile e' che il cavo retraibile non fosse in grado di alimentare in modo corretto il disco che quindi provava a mettersi in moto ma non avendo corrente a sufficienza emetteva il rumore sopra descritto

Force Gauge SM-1000N

Un piccolo riassunto sulle caratteristiche sul Force Gauge SM-1000N da accoppiare ad Arduino Due

Prima di tutto come funziona un Force Gauge
Sulla barra sono montati quattro Strain Gauge; quando si ha una flessione a causa di una forza verso il basso si ha che i sensori superiori si estendono (seppur di poco) mentre quelli inferiori si comprimono

i quattro Strain Gauge sono montati con una configurazioni a ponte di Wheatstone in cui a due estremi opposti (A-C) viene inserita l'eccitazione (l'alimentazione) mentre agli altri due capi opposti (B-D) si effettua la misura


La resistenza interna e' piuttosto modesta (attorno a 350 Ohm)

Per il taglio anulare sono necessari due Force Gauge



Per i carichi di esercizio della prova di taglio anulare (da 0  a 20  Kg) si osserva che la tensione in uscita dal sensore e' molto modesta. con valori massimi inferiori ai 10  mV


Curve di calibrazione sperimentali

Un altro aspetto di interesse e' la presenza di tensioni negative per il primo tratto di curva di taratura del sensore 2. Visto che Arduino non registra tensioni negative sugli ingressi analogici si deve creare un offset sulla tensione in modo da registrare sempre tensioni positive. 

Demone avahi su Raspberry/Raspbian

Oramai uso Raspberry praticamente sempre in modalita' headless ovvero senza tastiera e monitor attaccati ed interagisco via SSH o via Web. Il principale problema in questo modo, essendo la connessione WiFi regolata da un DHCP, e' di indovinare ogni volta quale indirizzo dinamico e' stato attribuito alla Raspberry (la modalita' normale e' guardare dentro al router come sono associati i vari dispositivi)

Una soluzione alternativa molto valida e stranamente non implementata di default ne' in Raspbian ne' in PiBang (mentre lo e' in  Debian standard) e' utilizzare il demone Avahi

Questo demone si installa mediante

apt-get install avahi-daemon

e permette di avere una sorta di DNS interno alla rete locale in cui i vari dispositivi che supportoano il protocollo di annunciarsi

Una volta installato ed avviato il demone non e' quindi necessario conoscere ogni volta l'indirizzo dinamico ma basta chiamare la macchina con il suo nome (che non cambia mai)


per esempio in una configurazione standard per cercare una Raspberry con montato  Raspbian si dovra' cercare
raspberry.local

mentre su PiBang
pibang.local

ovviamente i nomi identificativi devono essere univoci all'interno della LAN

martedì 22 ottobre 2013

Linux Day 2013 - Pistoia

In preparazione per il Linux Day 2013 a Pistoia. L'intervento sara' dalle 11.30 alle 12.00 ma spero di esserci sia prima che dopo per fare due chiacchere



Problemi su Mediacom 850i


Ieri sera il bambino stava guardando un film su tablet Mediacom 850i quando si sono esaurite le batterie.
Ho messo in carica il tablet ed il led di ricarica ha funzionato in modo corretto

Il giorno successsivo, con ricarica completa, ho provato a riaccendere il dispositivo. Niente da fare, completamente morto.


Stavo gia' pensando di ricomprare un tablet quando per puro divertimento ho provato a ripetere la procedura per flashare la ROM gia' presentata in questo precedente post
Curiosamente, con lo schermo completamente oscurato, il tablet era gia' in modalita' di recovery e quindi e' stato facile rimontare la ROM e riavviare il sistema. Certo che non si tratta di un tablet per principianti

lunedì 21 ottobre 2013

Lettura valori analogici su Arduino Uno ed Arduino Due

Un amico mi ha chiesto la possibilita' di monitorare uno strumento da laboratorio per taglio anulare (si tratta di una strumentazione geotecnica) mediante Arduino

Lo strumento e' sostanzialmente un Force Gauge SM 1000-N capace di misurare carichi fino a 1000 N.
I collegamenti sono piuttosto semplici. Vi e' una alimentazione da 15 Vcc e due cavi di misura

Il problema e' il tipo di uscita dello strumento che risulta essere di pochi milliVolt (al massimo di qualche decina di milliVolt) al contrario dello strumento visto in questo post


Per questo motivo avevo escluso a priori l'utilizzo dell'Arduino Uno perche' ha una sensibilita' (nel migliore delle ipotesi) di 5 mV

Arduino Due invece dovrebbe avere una sensibilita' nettamente superiore perche' monta un convertitore analogico digitale da 12 bit (4096 livelli al contrario dell'ADC a bit 10 e 1024 livelli della Uno) ed ha un fondo scala a 3.3 V (5.0 V Arduino Uno). Per questo motivo, con un rapido conto, la minima lettura dell'Arduino Due doveva essere 3.3V/4095 = 0.8 mV...perfettamente in linea con le tensioni che avevo bisogno di misurare

Una volta connessa l'Arduino Due al Force Gauge ed un multimetro per riferimento e' stato chiaro che qualcosa non tornava. Per tensioni misurate di circa 7 mV la risposta della Arduino Due era compresa tra 3-4 (in linea teorica doveva essere circa il doppio ovvero tra 8 e 9)

Frugando su Internet ho trovato questo interessante post che entra nel dettaglio dell'ADC di Arduino Due mostrando come l'offset possa essere anche molto alto (20 mV) rendendo difficoltose le misure di tensioni molto basse. Fra le altre cose e' interessante l'influenza di avere una tensione di riferimento stabile anche per l'Arduino oltre che per lo strumento di misura

venerdì 18 ottobre 2013

Controllo remoto di rele' mediante Raspberry

Recentemente un amico mi ha chiesto un metodo per poter gestire in remoto (dove per remoto si deve intendere accendere una caldaia negli USA stando in Italia) usando una Raspberry.

La cosa e' piuttosto semplice da fare con Php ma visto che la ruota e' gia' stata inventata, e funziona bene, ho preferito usare questo strada

Prima di tutto la parte collegamenti
La Raspberry, con montata una Raspbian, e' stata collegata al rele' alla porta GPIO #23 (porta S del rele') e i classici +5V e GND


Per la parte software ho impiegato WEBIOPI , uno script in Python che crea un piccolo webserver interfacciato con le GPIO

Prima prima cosa di sscaricare il file
wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz

e lo si scompatta
A questo punto da utente root si digita
./setup.sh
(attenzione, durante questa fase la Raspberry deve essere connessa ad internet perche' vengono scaricate eventuali librerie non gia' presenti nel sistema...l'operazione dura qualche minuto)

al termine si puo' digitare (sempre da root)
/etc/init.d/webiopi start

a questo punto collegandosi all'indirizzo della macchina sulla porta 8000 (od in localhost:8000) si accede ad una interfaccia di questo tipo

La username di default e' "webiopi" e la password "raspberry"

All'inizio tutte le porte sono di Input. Quindi si deve cliccare sulla casellina grigia accanto alla porta di interesse (nel mio caso #23) e porta in modalita' output (OUT). Fatto cio' cliccando sul numero della porta si interagisce con il rele' aprendo e chiudendo il contatto


Nel video si osserva il led luminoso del rele' che si accende quando si apre il contatto via web

Per rendere il sistema sempre avviato all'accensione del sistema si deve digitare


update-rc.d webiopi defaults

mercoledì 16 ottobre 2013

Google Chrome, Proxy Server e Debian

Questo riepilogo non è disponibile. Fai clic qui per visualizzare il post.

Problemi con Google Chrome per Linux su Debian

Cercando di installare Google Chrome su una macchina virtuale Debian con la procedura che ha sempre funzionato oggi sono comparsi alcuni errori



di fatto l'installazione con dpkg si blocca a causa di alcune dipendenze non risotel
-----------------------------------------------
 google-chrome-stable : Dipende: lib32gcc1 (>= 1:4.1.1) ma non è installabile
                                     Dipende: lib32stdc++6 (>= 4.6) ma non è installabile
                                     Dipende: libc6-i386 (>= 2.11) ma non è installabile
-----------------------------------------------

La versione beta 31.0.1650.16-1 funziona invece correttamente.

lunedì 14 ottobre 2013

Configurazione Debian minimale su IBM X20


In questo post viene mostrato come ho configurato in modo minimale (ma abbastanza completo) l'IBM X20 visto in questo post in modo da avere un compromesso tra la modesta potenza della macchina  e la necessita' di renderla comunque operativa


Per prima cosa sono partito dal primo CD di installazione di Debian togliendo le opzioni Ambiente Desktop e Server di Stampa ed impostando Server SSH.

Al successivo riavvio si ha la sola shell senza ambiente grafico

Si procede quindi con l'installazione di alcuni programmi a linea di comando

apt-get install alpine sqlite3 lynx mc imagemagick
apt-get install moc (player musicale basato su ncurses che si lancia con il comando mocp)

e di alcuni tool di sviluppo che di solito uso
apt-get install build-essential codeblocks codeblocks-contrib openjdk-7-jdk ant subversion git

a questo punto si installa X Windows in configurazione minimale
apt-get install x-window-system-core

seguito dall'installazione di Openbox minimale
apt-get install openbox obconf obmenu
apt.get install conky tint2

per attivare conky e tint due si deve procedere come segue
touch ~/.config/openbox/autostart.sh
chmod 700 ~/.config/openbox/autostart.sh


il contenuto del file autostart e' il seguente
----------------------------------------------------
# Run the system-wide support stuff . 
$GLOBALAUTOSTART 
(sleep 1 && tint2) & 
(sleep 1 && conky) & 
------------------------------------------------------

di default conky si aggiorna una volta al secondo ma non e' di interesse e ruba abbastanza cicli alla CPU cosi' ho modificato il valore update_interval in /etc/conky/conky.conf portandolo a 15.0

con questa configurazione ed Openbox in esecuzione si ha una occupazione della RAM di 46 MB (aprendo una shell di XTerminal si passa a circa 51 Mb con una occupazione di spazio disco di circa 1.5 Gb).
Tramite OBConf ho impostato una sola finestra di desktop

Per gestire la reti wireless in modo umano ho montato come network manager wicd
apt-get install wicd 


che deve essere attivato con il comando
wicd-client

(attenzione: se non e' presente deve essere inserita a mano la scheda wlan0 all'interno della configurazione)

Un paio di programmi di comune utilizzo su X (un leggero browser ed editor di testo)
apt-get install midori
apt-get install leafpad
apt-get install mupdf (visualizzatore pdf)

Per effettuare degli screenshot ho installato scrot
apt-get install scrot

che si usa con la seguente sintassi
scrot -d 5 (salva lo schermo con un ritardo di 5 secondi)

Data che X non sara' sempre usato, per massimizzare lo schermo della consolle testuale, si puo' modificare GRUB in modo che in partenza la shell sia in modalita' 1024x768 editando il file /etc/default/grub, togliendo il commento a  GRUB_GFXMODE=640x480 e portandolo a 1024x768.
Si deve poi aggiungere la linea
GRUB_GFXPAYLOAD_LINUX=keep

per rendere le modifiche operative si lancia poi
update-grub2

A questo punto si possono togliere un po' di demoni che non servono. Visto che la batteria non e' funzionante e che il BIOS non accetta la modalita' Speedstep si puo' rimuovere ACPI
apt-get remove acpi
Visto che non e' previsto di utilizzare dischi di rete mappati NFS via anche questo servizio
apt-get --purge remove nfs-common rpcbind
Il sistema non ha un modulo Bluetooth e potrei disinstallare il demone ma visto mi potrebbe servire per un dongle USB Bluetooth lo disattivo semplicemente dal boot  modificando /etc/default/bluetooth ed editando
BLUETOOTH_ENABLED=0

Via anche il client di CUPS (di solito non stampo)
apt-get remove cups 

Per il demone Avahi ho preferito disattivarlo piuttosto che disinstallarlo perche' puo' sempre tornare utile. Si digita quindi il file 
sudo update-rc.d -f avahi-daemon remove

LLama3 Anita

A seguito di questo post ho provato a vedere ho provato a vedere cosa accadeva ad utilizzare un modello specifico per la lingua italiana in...