Archivio mensile:dicembre 2014

Arduino e la lavatrice

La lavatrice che abbiamo in casa, non è molto loquace nel notificare la fine del lavaggio. Se poi la casa è di medie dimensioni, con di mezzo una rampa di scale, implica il fare parecchia attività fisica. La cosa sarebbe anche sopportabile, se una volta finito il programma di lavaggio, fosse effettivamente finito, invece questa richiede almeno un altro paio di risciacqui aggiuntivi prima di far uscire il bucato senza residui di detersivo. Infine, in casa mia, il fine settimana, la lavatrice inizia ad andare il sabato mattina e lavora senza sosta fino a domenica pomeriggio.

Inutile dire che erano anni che cercavo di trovare un modo per risolvere la questione, ma tutti implicavano l’utilizzo del wifi, un qualche mini pc attaccato alla lavatrice  ed uno al piano di sopra. Troppo costoso. Nel 2011 vengo a conoscenza di Arduino, potrebbe essere una soluzione, ma la mia ignoranza in campo di elettronica mi fa comunque desistere.

A novembre 2013, inizio a fare esperimenti con Arduino, e decido da subito di provare a risolvere questo problema.

Il primo problema da affrontare è stato come capire se la lavatrice ha finito. Ha un bel led rosso, che si accende in fase di risciacquo e quando termina il lavaggio lampeggia. Avevo una fotoresistenza di recupero, l’ho attaccata ad un ingresso analogico, alcune righe di codice per capire se sta lampeggiando o no e avevo il segnale di fine lavaggio a disposizione.

A questo punto è venuto il bello, come portare il segnale al piano superiore. Alcuni mesi prima avevo letto di un tale che era riuscito a fare delle trasmissioni radio FM collegando un pezzo di filo ad un pin della Raspberry. Verifico se la cosa è fattibile con Arduino… non tanto, non riesce a modulare un segnale a 103 MHz. C’è però un tizio che è riuscito a fare un trasmettitore morse in AM sulla frequenza di 1 MHz. Faccio una prova, un pezzo di filo su un pin di Arduino, accendo la radio, piano piano cerco la frequenza corretta e… in mezzo ad un bel po’ di fruscio si riesce ad udire un debole codice morse. Purtroppo, la trasmissione è talmente debole, che a pochi metri di distanza non si riceve più nulla oltre a dover orientare la radiolina in posizioni assurde. Provo ad informarmi su che antenna ci vorrebbe, parlano di un filo lungo una decina di metri. Non è proprio il tipo di antenna che posso tenere in casa. A parte scoprire poi che trasmettere su quella frequenza non è proprio legalissimo.

Ad un certo punto mi viene in mente che ho a disposizione la scheda elettronica del cancello elettrico che si era rotta per un fulmine estivo qualche mese prima.

Scollego la scheda radio ricevente, mi metto a controllare come sono fatte le piste della scheda, tiro fuori VCC, GND ed il contatto che viene attivato quando arriva l’impulso radio. Provo ad alimentarla direttamente con un alimentatore da 12 V, metto il tester sul contatto di uscita, premo i pulsanti sul telecomando e vedo il tester muoversi. Bon, questo è fatto.

Ora il problema è che mi scocciava dover lasciare li l’Arduino comperato e pagato 24 euro. Dopo un po’ di girovagare sono approdato all’Arduino su breadboard. Tra l’altro, se lo faccio andare a 8 MHz, posso risparmiare due condensatori ed un quarzo (che non avevo a casa). Decido di costruirlo. Vado a comperare i componenti mancanti, ma non trovo il quarzo da 16 MHz. Controvoglia, procedo all’aquisto online dei quarzi mancanti e attendo che arrivino. Nel frattempo recupero un chip ATMega328P, verifico su internet che si può caricare il bootloader da 8 MHz anche senza avere il quarzo, con una versione di ArduinoISP che recupero sul sito di AdaFruit. Un po’ di prove e riesco a caricare il bootloader di arduino senza il bisogno del quarzo.

Ora procedo a sviluppare la scheda su millefori. Sarà composta da un regolatore di tensione, il chip ATMega328, un transistor per azionare il telecomando, dei morsetti dove collegare alimentazione, telecomando e fotoresistenza. Aggiungo anche un led rosso con lo scopo di replicare lo stato del led della lavatrice (che verrà coperto dalla fotoresistenza).

Ecco la scheda finita sopra:

Lavatrice_scheda_fronte

e sotto:

Lavatrice_scheda_retro

Tutta la scheda funziona a 5 V mentre il radio comando funziona a 9 V. Avevo acquistato un regolatore di tensione da 9 V, ma la mia scarza esperienza in elettronica, mi ha impedito di farlo funzionare, per cui (su consiglio) sono ricorso a quelle due obrobriose file di diodi con lo scopo di far scendere la tensione di alimentazione dai 12 V del trasformatore ai 9 V per il radio comando.

Il potenziometro sulla sinistra, nelle intenzioni originali, sarebbe dovuto servire a regolare la luminosità proveniente dalla fotoresistenza in modo da non dover cambiare il programma se dovesse cambiare il livello di luminosità del led che segnala la fine lavaggio. Di fatto è stato più semplice modificare il programma.

A fianco all’ATMega sono presenti due coppie di pin maschi, una per collegare il tx/rx della seriale, l’altra per fare il reset della scheda, necessario per il caricemento dello sketch. Il pin di reset, lo azionavo o con un pulsante collegato tramite cavo o con un cacciavite (a seconda di quello che risultava più comodo).

Alla fine, inscatolo il tutto in una scatola di recupero e posiziono sulla lavatrice.

La foto resistenza è stata posizionata sulla spia di fine lavaggio, sotto ad un pezzo di carta per non essere influenzata dalla luce ambientale.

Lavatrice_fronte_sensore

Per il ricevitore, ho semplicemente attaccato un led ed una resistenza sul pin dove arriva la tensione quando riceve il segnale radio, inscatolato e posizionato in cucina.

Quando termina il lavaggio, il programma fa lampeggiare il led per circa cinque minuti.

Il tutto funziona tranquillamente da 13 mesi… con parecchie rampe di scale risparmiate :-).

Un’ulteriore evoluzione, sarebbe stata l’aggiunta di un pulsante e di un display a sette segmenti dove indicare il numero di risciacqui aggiuntivi da fare, così al termine del lavaggio la scheda avrebbe comandato la lavatrice per fare i risciacqui successivi.

Sarebbe stato interessante anche mettere un sensore sul tubo di scarico che misurasse la conducibilità elettrica e la limpidezza dell’acqua di scarico, poi in base a questi due parametri determinare se l’acqua è sufficientemente pulita così da decidere quanti risciacqui aggiuntivi fare.

Credo sia tutto.

Memory hole 15-16 MB e GRUB Error 28: Selected item cannot fit into memory

Dopo aver clonato un hard disk da una vm ad un pc fisico, mi ritrovo con questo strano errore a video:

Error 28: Selected item cannot fit into memory

Una veloce ricerca, e salta fuori che questo errore è dovuto ad un’impostazione del bios che sarà capitato a tutti di vedere e chiedersi a che cosa servisse: il “Memory hole 15-16 MB”.

Per sistemare l’errore, va disattivata questa impostazione in modo che il bios non riservi questo mega di memoria.

A sto punto, ho fatto una ricerca per vedere a cosa serve sto memory hole.

E’ saltato fuori che questa zona di memoria veniva usata da alcune vecchie schede su bus ISA. Ora, mi chiedo perché su schede madri P4, ci sia ancora l’opzione (va be’…) ma sia soprattutto attiva. Si, un’idea ce l’ho… ma passiamo oltre che mi vengono i brividi…

Aprire con Excel un file csv che usa come separatore di colonna la virgola

Excel (almeno per la versione italiana), quando lavora con file csv vuole come separatore di colonna il punto e virgola. Se gli si da un file che usa come separatore di colonna la virgola, non lo rirconosce e importa ogni riga come se fosse un’unica colonna.

Prima di imbarcarsi in sostituzioni varie nel file o tentativi di cambiare le impostazioni internazionali del pc, basta aprire il file con un normale editor di testo, ed inserire all’inizio una nuova riga con scritto:

sep=,

ed ecco che il file viene aperto normalmente.

Dalla mia esperienza personale, nel momento in cui si salva il file, Excel provvede a sostituire tutte le virgole che separano le colonne con il punto e virgola.

Clonazione disco via rete

Questa è l’ultima delle cose da annotare su di un sito, ma siccome la uso una volta l’anno, ed è facile far confusione con i parametri (in particolare con il -p di netcat che una volta ci va, l’altra no, l’altra dipende dalla versione di netcat ecc.), e se la cerchi su google, i primi 10 link sono di uso del netcat con triplo salto carpiato tunnellato in ssh, giusto una annotazione:

Lanciare prima sul pc di destinazione:

# nc -l 1234 | dd of=/dev/hdb bs=1M

Poi sul pc con il disco da clonare:

# dd if=/dev/sda bs=1M | pv | nc ip_destinazione 1234

Il comando pv serve per vedere a che punto è la copia ed una visualizzazione della velocità (che non fa mai male).

Storie della sala macchine reloaded: disco rotto sul 486

Taaanti anni fà, al termine della seconda superiore, ricevetti il mio primo pc. Era un Olivetti Familia 486 SX2 50, con DOS 6.20 e Window 3.1, dotato di 4 MB di RAM e 200 MB di hard disk.
Un paio d’anni dopo, fu upgradato a window 95, cpu 486 DX4 100 e la bellezza di 16 MB di RAM.
Quando poi iniziai a lavorare, fu la volta dell’hard disk, che sostituii con un WD da 4 GB. E aggiunsi un lettore CD ROM 4x di recupero.

Con il cambio dell’hard disk, creai due partizioni, la principale, dove ci finì WIN 95 B ed una da 320 MB dove copiai l’installazione presente nel disco da 200 MB.
La partizione più grande per me, l’altra per il papi.

Ora, tra un cambio di pc e l’altro, il 486 è tutt’oggi funzionante per svolgere un compito su cui non mi dilungo.
Tutto bene, fino a circa un mese fà, quando si è rotto l’hard disk.
Fortuna ha voluto che la vigilia di Natale del 2012, nel tentativo di recuperare un file rovinato, avessi fatto una copia della partizione da 320 MB (quella che ancora oggi si usa). E soprattutto non avessi cancellato il file immagine.

Ancora una volta, la fortuna ha voluto che tra i rottami vari che ho in casa, ci fossero 3 hd candidabili a sostituto.
Prendo il primo da 4 GB: rotto. Ok, ho un vago ricordo che si fosse rotto nel 2008.
L’altro subito a portata di mano, era da poco più di 2 GB. Funzionante.
Apri il 486, smonta l’hard disk, verifica che si, ci sono settori danneggiati (RIP caro WD, costato circa 200.000 lire).
Spiaccico sopra l’immagine, vado in cerca su come ricostruire l’mbr da linux, attacco il disco, rimonto tutto, non viene visto.
Va sul BIOS, ravana un po’, provo a forzare il numero di cilindri, settori, testine. Nulla. Provo a cambiare un po’ di altri parametri del BIOS. Nulla.
Succedono un po’ di altri casini in casa, per cui lascio stare tutto li, fino ad oggi.
Prendo il terzo disco, da 4 GB che era su un muletto linux spento li da circa 4 anni.
Salvo quei 4 file che potrebbero avere senso, rifaccio le partizioni con cfdisk, clono l’immagine, rifaccio l’mbr, attacco il disco, viene visto :-), errore, che non trova la memoria ROM (o messaggio simile).
Ravano, recupero il floppy di installazione di Windows 95 A originale. Funziona ancora. Quando tento di accedere al disco C, il solito errore di Annulla, Riprova, Tralascia…
Proviamo con un:

A:\>FORMAT C: /S

Confermo che sono sicuro di cancellare tutto…
Esce di nuovo il prompt, senza chiedermi l’etichetta di volume, né il progresso della formattazione.
Non so dove andare a sbattere la testa.
Ricerco il CD di windows 95 B, che però non riesco più a trovare.
Vado di FDISK e ricreo la partizione.
Niente.
Spengo tutto e tento di andarmi a vedere lo streaming del CCC congress a Berlino.
Maledetta connessione internet, lo streaming va come una tartaruga bolsa.
Nel frattempo ho ritrovato il cd di windows.
Provo a fare il boot da CD e…
Si, giusto, il 486 non faceva, non poteva fare il boot da CD.
Come cavolo avevo fatto? La memoria ritorna a quel fine 1998, quando avevo fatto il lavoro, tento di riesumare un po’ di ricordi.
Umh… aspetta, adesso quando vado in C: vedo alcuni file, quando vado nella directory di WINDOWS mi da ancora errore.
Stacca tutto e riclona la partizione.
Faccio il boot da floppy.
Il contenuto del disco si vede bene.
Probabilmente non gli piacevano le partizioni fatte da cfdisk.
Qualche progresso l’abbiamo fatto.
Sul floppy non c’è il comando SYS.
Potrei provare a lanciarlo dal CD.
Faccio il boot da floppy, per vedere il cd dovrei lanciare MSCDEX… ah si, ci voleva il driver… ma quale driver avevo usato quella volta… mi ricordo uno generico… non ricordo altro.
Aspetta però, SYS c’è in C:\WINDOWS\COMMAND.
A:\> C:
C:\> cd windows\command
C:\WINDOWS\COMMAND> SYS a: c:
Lavora per un po’ poi la scritta:

Sistema trasferito.

Occavolo, forse ce l’ho fatta.
Faccio per digitare exit, reboot, no, non c’era nulla di tutto ciò, un colpo di CTRL-ALT-CANC, schermata del BIOS… poi compare:

Avvio di Windows 95 in corso…

Trattengo il fiato…

Compaiono le scritte dell’autoexec.bat relative al comando MODE.

Sta andando… sta andando…

Sparisce tutto per un secondo, poi ricompare lo sfondo familiare di windows con quella bitmap di un koala su un albero.

Funziona!!! e parte il canto dell’Alleluia.

Ad un certo punto, avevo disperato di riuscire a riportarlo in vita… alla fine ce l’ho fatta.

Però… quante cose sono cambiate in questi 14 anni… una cosa è certa però, ripristinare il boot su dos/windows 9x era 1000 volte più semplice che su un windows attuale o su linux.
Bastava un floppy, il comando SYS e tre file: COMMAND.COM, IO.SYS e MSDOS.SYS.
Altro che secure boot, UEFI ed i casini moderni.

Driver per chipset ICH7

Casomai mi dovesse riservire per il futuro.

Dopo aver formattato un pc Compaq di più di qualche anno fà, né windows, né io riuscivamo a trovare i driver per il chipset ICH7.

L’utility Intel per la ricerca automatica dei driver non funziona su Windows xp…

Alla fine, ricercando per 8086:27da (l’id della periferica che compariva in gestione computer), è saltato fuori questo link:

http://h10025.www1.hp.com/ewfrf/wc/softwareDownloadIndex?softwareitem=ob-39732-1&cc=us&dlc=en&lang=en&lc=en&os=228&product=3224055

Scaricato il file, eseguito ed è andata :-).