giovedì 6 settembre 2012

Attivare Windows 8

Dopo l'installazione di Windows 8 cercando di attivarlo, a differenza di Windows 7 non riesco a trovare la finestra nella uqale inserire il product key:

 
di conseguenza l'attivazione non viene eseguita e il sistema operativo cerca la entry nel DNS per attivarsi in modalità KMS.


Ecco quindi la procedura per inserire il product key ed attivare Windows 8:

Dalla finestra Start (Modern UI) digitare

cmd

in questo modo verrà ricercata l'applicazione del prompt dei comandi che dovremmo eseguire come amministratore (vedi icona in basso)


apparirà la finestra dei comandi nella quale dovremmo inserire

slui 3



che mostrerà la finestra di inserimento del product key


permettendoci di completare l'installazione


mercoledì 5 settembre 2012

Windows 8 64bit in VMware Workstation 8

Ho avuto qualche problemino nell'installazione di w8 64 bit su vmware workstation 8 per cui ecco gli step per un'installazione corretta:

Dalla procedura guidata di creazione di una nuova virtual machine scegliere l'opzione che prevede di installare successivamente il sistema operativo.


Selezionare il sistema operativo Windows 7 64 bit


Negli step successivi attribuire un nome alla macchina e un disco da 60 GB (a seconda delle esigenze) e completare la creazione della virtual machine.

Spostarsi nella cartella all'interno della quale abbiamo creato la virtual machine durante la procedura guidata e con un editor tipo notepad modificare il file .vmdk aggiungendo (in qualunque punto del file) la seguente riga:

vmGenCounter.enable = FALSE

e salvare il file (mantenendo l'estensione originale.
Agganciare al CD ROM della macchina virtuale la ISO di Windows 8 64 bit e accedere la virtual machine.



A questo punto partirà la procedura di installazione che in pochi minuti installerà il nuovo sistema operativo di Microsoft.


Buon divertimento!






sabato 17 marzo 2012

Massimo Banzi a Trento

Ospite della fondazione AHREF il 16/03 Massimo Banzi cofondatore di Arduino ha presentato a Trento la nascita e la filosofia di Arduino e dell'Open Hardware.

Oggetto della presentazione alcuni progetti basati su Arduino che hanno avuto maggior successo nella comunity online quali
MPGuino : una comunità che usa strumenti basati su Arsuino per interfacciarsi alle centraline delle automobili
OpenPCR per replicare in casa DNA a basso costo (come nel caso Arduino uno strumento a basso costo su piattaforma open)
Stampanti 3D open http://www.makerbot.com/ http://reprap.org/wiki/Main_Page

Viene presentato il presente/futuro del mondo Arduino: dalle Officine Arduino (punto di riferimento italiano per Arduino) alla nuova piattaforma Arduino basata su processori ARM, dalla nuova comunity dedicata alla scuola al nuovo shield GPRS/GSM costruito in collaborazione con Telefonica

Nel question time vengono poste molte domande sui progetti futuri del team Arduino e sulla possibilità di nuove architetture che uniscano alla semplicità di Arduino un sistema basato su linux.
Nelle risposte ho visto Banzi più volte sulla difensiva in particolare nei confronti dei clonatori cinesi (con i loro prodotti di bassa qualità) e sui nuovi progetti di computer a basso costo come http://www.raspberrypi.org/. Come ricordato dallo stesso Banzi la forza del progetto Arduino non sta solo nell'hardware e nel software, ma nella comunity che circonda il progetto che da il vero valore aggiunto al prodotto, quindi secondo me non sono da temere i cinesi nè tantomeno i progetti a basso costo in stile raspberrypi che secondo me si rivolgono ad un'utenza diversa o complementre (secondo me raspberry potrebbe essere un ottimo strumento da affiancare all'Arduino per soluzioni che richiedano potenza di calcolo).
Queste nuove sfide potrebbero essere invece un incentivo per il team Arduino verso l'innovazione magari seguendo l'idea di http://beagleboard.org/bone di unire le potenzialità di una scheda a microcontrollore come arduino alla potenza e flessibilità di una scheda computer basata su un sistema operativo open come linux innondando il progetto della forza della comunity arduino...staremo a vedere...

Complimenti a Massimo Banzi per il piacevole pomeriggio e soprattutto per il suo lavoro e grazie a AHREF per l'opportunità che ha offerto ai fan trenitni di Arduino.

mercoledì 1 febbraio 2012

Comunicazione seriale

Oggi vediamo come far comunicare Arduino col nostro computer attraverso il protocollo seriale, ovvero attraverso la porta USB alla quale è collegata la scheda.
Fortunatamente  una libreria di funzioni per gestire la comunicazione seriale renderà molto semplice il nostro compito.
Per instaurare una comunicazione seriale utilizziamo il comando:

Serial.begin(9600);  

che inserito nel metodo setup() instaurerà una comunicazione seriale a 9600 baud.
A questo punto è sufficiente utilizzare il comando

Serial.print("Hello World");

per inviare i dati. Attraverso questo comando possiamo inviare oltre a stringhe di testo anche valori numerici, di variabili, risultati di operazioni , ecc.
Accanto a serial.print esiste il comando serial.println che introduce un a capo al termine del dato inviato.

Vediamo uno sketch di esempio:


/*
 *  comunicazione seriale
*/
void setup() {
  Serial.begin(9600);           // Instaura comunicazione a 9600 baud
}

void loop(){
  Serial.println("Hello World");
  delay(1000);
}

Se carichiamo il codice sul nostro Arduino apparentemente non accadrà nulla.
E' sufficiente premere l'icona corrispondente al "Serial Monitor" nell'ambiente di sviluppo per visualizzare i dati inviati dall'Arduino al computer attraverso la seriale:




mercoledì 25 gennaio 2012

led e pulsante (Digital Input...continua)

Ora che conosciamo le resistenze di pullup possiamo implementare il nostro circuito che ci permetterà di accendere un LED utilizzando un pulsante.


Sketch

/*
 *  Ingressi digitali
*/
 
int ledPin = 12;                // Pin a cui connettere il led
int switchPin = 2;              // Pin a cui connettere il pulsante
int val;                        // variabile per leggere lo stato del pulsante


void setup() {
  pinMode(ledPin, OUTPUT);      // Imposta il pin del LED come uscita
  pinMode(switchPin, INPUT);    // Imposta il pin del pulsante come ingresso
}


void loop(){
  val = digitalRead(switchPin);   // legge l'input e lo inserisce in una variabile
  if (val == LOW) {               // se il pulsante è premuto
    digitalWrite(ledPin, HIGH);   // accende il LED
  }
  if (val == HIGH) {              // se il pulsante è premuto
    digitalWrite(ledPin, LOW);    // spegne il LED
  }
}


Schema

Schema generato con fritzing


Lo sketch appena descritto presenta un problema. I pulsanti per come sono costruiti presentano il cosidetto effetto rimbalzo , ovvero non appena premuti, nei primi millisecondi, generano del rumore che potrebbe falsare la lettura.
Per ovviare a questo problema possiamo leggere i valori in input a distanza di qualche millisecondo e verificare se sono uguali tagliando in questo modo il rumore dell'effetto rimbalzo;


void loop(){
  val = digitalRead(switchPin);      // legge il valore
  delay(10);                         // aspetta 10 millisecondi
  val2 = digitalRead(switchPin);     // rilegge il valore
  if (val == val2) {                 // se i due valori sono uguali
     if (val == LOW) {               // se il pulsante è premuto
       digitalWrite(ledPin, HIGH);   // accende il LED
     }
     if (val == HIGH) {              // se il pulsante è premuto
       digitalWrite(ledPin, LOW);    // spegne il LED
  } 
} 


Riferimenti:
http://www.ikalogic.com/debouncing.php
http://arduino.cc/it/Tutorial/Debounce



martedì 24 gennaio 2012

Resistenze di pull up

Nell'esempio precedente abbiamo cambiato lo stato di un pin di digital input collegandolo a GND piuttosto che a 5V.
Un metodo più semplice è quello di utilizzare un pulsante per variare lo stato di un pin. Prima di questo però dobbiamo introdurre un nuovo concetto: le resistenze di pullup

Resistenze di pull up

Gli ingressi dell'arduino sono ad alta impedenza ovvero richiedono (assorbono) una corrente minima per cambiarne lo stato.
Questo è molto vantaggioso e ci permette di gestire facilmente i dispositivi da collegare agli ingressi, ma presenta anche un inconveniente: essendo così sensibili gli ingressi lasciati liberi (non collegati) presentano valori casuali causati dai rumori di fondo e non un valore LOW come potremmo erroneamente pensare.



Nello schema sopra riportato con pulsante premuto avremo un valore HIGH sul pin di ingresso, mentre con circuito aperto avremo valori in ingresso oscillanti.
Per questa ragione dobbiamo far si che il nostro pin sia sempre connesso o a 5V o a 0V.
Potremmo ovviare il problema connettendo il circuito aperto a terra:




Ma in questo caso il problema nasce quando chiudiamo il circuito che causa un bel cortocircuito con conseguente danneggiamento del nostro arduino.



Per fare questo possiamo utilizzare il seguente schema:



Nello schema abbiamo introdotto una resistenza da 10K chiamata resistenza di pull up.
Fintatochè il pulsante non è premuto il pin rimane stato HIGH; la corrente che fluisce è bassa per via della resistenza, ma data l'alta impedenza degli ingressi è sufficiente a mantenere alto lo stato.
Quando premiamo il pulsante la corrente fluisce verso massa e la tensione prossima a 0V porta il pin in stato LOW. In questo caso non abbiamo corto circuito poichè la resistenza limita la corrente ( I = V/R=5V/10.000ohm= 5mA)

L'obiettivo raggiunto utilizzando una resistenza di pull up è quello di togliere le fluttuazioni al pin di input; Il compito della resistenza di pull up è i ridurre la corrente che attraversa il circuito.

Solitamente per i circuiti di pull up si utilizzano resistenze da 10K, ma se vogliamo possiamo utilizzare resistenze da 47K o superiori.

Utilizzando una resistenza di pull up avremmo uno stato HIGH con il circuito aperto (pulsante non premuto) e LOW con circuito chiuso (pulsante premuto). Questo può inizialmente creare un po' di confusione, ma è solo una convenzione.

Resistenza di pull up interna
E' possibile attivare una resistenza di pull up interna all'Atmega con l'istruzione
 
pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors
 

In questo modo viene attivata sul pin in ingresso una resistenza di pull up pari a  30K.
Rispetto alle resitenze di pullup reali quelle software hanno il limite di avere un valore fisso che in certi casi potrebbe non essere adeguato

Resistenze di pull down
In maniera analoga alle resistenze di pull up possiamo utilizzare resistenze di pull down. In questo caso il circuito aperto porterà il pin in stato LOW e il circuito chiuso in stato HIGH.








Riferimenti

http://www.seattlerobotics.org/encoder/mar97/basics.html
http://www.thebox.myzen.co.uk/Tutorial/Inputs.html
http://www.ladyada.net/learn/arduino/lesson5.html
http://arduino.cc/en/Tutorial/Button