lunedì 5 dicembre 2016

Microscopi e Bambini


Quest'anno, con l'inizio dello studio delle Scienze Naturali, mia figlia ha espresso il desiderio di poter utilizzare lo strumento principe... il Microscopio.



Quindi mi sono messo all'opera per cercare un Buono strumento con cui far appassionare mia figlia.

Innanzi tutto c'è da specificare il tipo:
- Biologico (il classico nell'immaginario di un bambino) con cui, usando dei vetrini, è possibile vedere ed osservare ali di insetti, composizione foglie, fettine di cipolla etc etc

- Ad illuminazione superiore con ingrandimento minore rispetto al primo, non adatto all'uso di vetrini, ma che in compenso da grandi soddisfazioni nel campo della geologia per osservare rocce, quarzi, cristalli etc. etc.


Per i miei scopi, ho cercato un Microscopio Biologico; esistono molte buone marche, quella che ho trovato molto soddisfacente per il budget iniziale è stata la Bresser, che produce anche prodotti rimarchiati National Geografic.
Più che alle specifiche pure del prodotto mi sono basato su "marche note", "venditori affidabili" e sopratutto recensione di chi lo aveva già acquistato.

il miglior prodotto (a mio modesto parere) per ragazzi, sotto le 150 euro, dopo un paio di giorni di ricerche mi è risultato il

Bresser 5116200 - Microscopio Biolux NV 20x - 1280x 


che però offre ottimo ingrandimento (è possibile vedere i globuli Rossi!), facilità di messa a fuoco, un oculare USB (per vere le immagini direttamente sul PC) e non trascurabile una valigetta Protettiva.

Su Amazon ha un ottimo prezzo e le recensioni sono numerose e tutte largamente positive 3-4 stelle.


Dopo Alcune considerazioni di carattere personale, ho pero' ordinato un più economico Tasco, marca comunque buona, in una chiara configurazione da "Gioco".

Microscopio Tasco + Vetrini 


Le recensioni trovate parlano di una ottima usabilità e facile messa a Fuoco (problema invece molto ostico per la maggior parte di microscopi giocattolo).
Gli ingrandimenti sono "solo" 650 la meta del Bresser di cui sopra, ma più che sufficienti per una ottima avventura nel microscopico.

Nel pacchetto che ha attirato la mia attenzione erano inclusi anche una ventina di Vetrini già preparati


Vetrini preparati per Microscopio 

consigliati comunque per qualsiasi microscopio, per avere un punto di partenza solido (ve lo immaginate avere un microscopio fantastico.. ma non sapere cosa guardarci ?)

Cmq sia spero di esser stato utile anche a qualcun altro.




mercoledì 27 gennaio 2016

R2D2 - Alias C1P8 - Parte 1 di 999 - Arduino e Motori in DC


Rieccomi qui,
qualche Mese fa avevo fatto vedere la Saga di Guerre Stellari (Quelle degli anni '80) a mia figlia di 7 anni... è stato amore a prima vista con C1P8 (il nome italiano di R2D2)
Poi ci sono state le pubblicità del Robottino Emiglio (ma in italiano i nomi si scrivono con "LI" e mai con "GLI"?! ) e giu pianti quando gli ho spiegato che erano "solo radiocomandati" che non erano come C1P8...
Da li mi sono messo a giocare con un vecchio chassis di un robot (Cybot) uscito a fascicoli con la DeAgostini (di cui avevo preso solo i primi 4 fascicoli...)
un Arduino Uno R3, ed un chip L293D acquistato in stock su Amazon.

Qui Sotto lo schema del Chip (L293)


Quindi Partendo da questo datasheet ed usando lo schema qui sotto

Sono riuscito a far muovere il tutto alimentandolo con un PowerBank da cellulare.

il Programma usato è stato:




// Motore A
#define enable1Pin 11
#define in1Pin 10
#define in2Pin 9

//Motore B
#define enable2Pin 6
#define in3Pin 7
#define in4Pin 8


boolean reverse = false;
  
void setup()
{
  // Motore A
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(enable1Pin, OUTPUT);
  
  // Motore B
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);
  pinMode(enable2Pin, OUTPUT);
}
 
void loop()
{

setMotorA(0, true);
setMotorB(0, true);
delay(1000);
delay(1000);
setMotorA(128, true);
setMotorB(128, true);
delay(1000);
setMotorA(255, true);
//setMotorB(128, true);
delay(1000);
setMotorA(128, true);
setMotorB(255, true);
delay(1000);

}
 
void setMotorA(int speed, boolean reverse)
{
  analogWrite(enable1Pin, speed);
  digitalWrite(in1Pin, ! reverse);
  digitalWrite(in2Pin, reverse);
}

void setMotorB(int speed, boolean reverse)
{
  analogWrite(enable2Pin, speed);
  digitalWrite(in3Pin, ! reverse);
  digitalWrite(in4Pin, reverse);
}



et Voila, un "percorso" da 5 secondi... :D


venerdì 9 gennaio 2015

Intrigo a Venezia (Gioco)



 Ieri sera con 3 Amici siamo andati in Ludoteca (L'Università Europea degli Sport della Mente) a Milano per provare un gioco in scatola: "Intrigo a VENEZIA" della Giochi Uniti.


Apriamo la microscopica scatola (parliamo di un quadrato di 1/2 spanna X 1/2spanna alto 2 dita! 13x13x4cm) "Sempre a portata di mano" esordisce orgoglioso lo Steeve Proprietario del gioco ed iniziamo a tirare fuori il manualetto ed una serie di carte...
mi Defilo per fare approvigionamento di birra Menabrea, mooolta acqua e patatine al bar della ludoteca.
Non passano 2minuti che ritorno e trovo il tavolo da gioco pieno di carte apparentemente sparpagliate, gettoni, schedine 1metro quadrato di gioco!

Iniziamo a leggere le istruzioni e diligentemente iniziamo a studiarcelo... si parla di 30min di gioco... una passeggiata.

"In Intrigo a Venezia ogni giocatore controlla una nobile famiglia che partecipa al ballo in maschera organizzato dal nuovo Doge"


io ero la Famiglia Verde "Dandolo" ... ed anche gli altri avevavo Famiglie realtente esistite al tempo dei Doge di Venezia...
la complessità inizialmente, prima di conoscere la meccanica, pare semplice lieare... quando comprendi le implicazioni di alcune mosse, inizi a vedere le strategie su "3 piani di gioco" ... e ti viene mal di testa... o forse era la stanchezza.

La cosa bella è che nelle prime manche della partita cerchi di vincere, nelle fasi finali cerchi di massacrare gli avversari.
i commenti di contorno poi sembrano molto quelli del gioco del 2 o Briscola chiamata: si parla di strategie vere o finte si danno consigli agli altri per dare fastidio agli avversari, si fa finta di non vedere alcune mosse, e si inscena un "errore" di giocata  etc etc


Fatto sta che partiti alle 21.00 con la lettura delle istruzioni ... sono arrivato a casa alle 2:00am dopo qualche partita: stanco ma soddifatto.

Insomma 14 €uro ben spesi! ve lo consiglio. 

Miglior prezzo su AMAZON


giovedì 18 dicembre 2014

Campane & suono Argentino

durante una pausa di una sessione lavorativa, di fronte alla macchinette del caffè, com'è come non è si è iniziato a parlare, visto anche il periodo natalizio, di campanellini di suono argentino... e mi è venuto in mente una aneddoto di cui sono venuto a conoscenza qualche tempo addietro...

Qualche tempo fa, in uno dei miei giri guidati per Milano, ci siamo recati prima alla chiesa di Santa Maria alla Fontana (è un santuario Mariano di Milano locato in piazza Santa Maria alla Fontana n.11 Zona MM Zara) e dopo alla vicinissima Fonderia Napoleonica.


Questa fonderia, famosa per le campane, ha avuto anche esperienze artistiche notevoli, come la fusione della Statua equestre per il monumento a Vittorio Emanuele II in piazza Duomo a Milano, o la stessa Portale maggiore del Duomo di Milano;
di recente è diventato un interessante museo (QUI un documento stilato dal FAI nel 2009)

Nella Fonderia si è parlato  dell'accordamento delle campane e delle tecniche di costruzione, del decreto del governo Mussolini del 23 aprile 1942, che comportò la requisizione forzata delle campane su tutto il territorio italiano per convertirle in armi da offesa, e della successiva "restituzione" tramite la fusione di nuove campane che costituì un business formidabile per le fonderie del settore, che tra il 1946 e il 1955 circa lavorarono in modo incessante.

Considerando che la vita media di una campana  in 100-150 anni.. si capisce che il prossimo boom nella produzione campanaria sarà presumibilmente nel ... 2050-2100 da qui anche la vocazione artistica.

vi chiederete, ma cosa centra tutto questo con il suono argentino ?

        1 che ha il timbro limpido e squillante dell’argento percosso: voci argentine (*)


attendete ancora un po...


a quei tempi ogni paese/quartiere aveva la sua chiesetta con il proprio campanile, e nel campanile le proprie Campane.
Come si sa le campane sono sempre state riccamente decorate... ma perché se poi venivano messe a decine di metri di altezza in cima ai campanili e non si sarebbero viste da terra ?
Semplice prima la popolazione si auto tassava per acquistare la campana nuova, poi prima di montarla la portavano in giro durante una festa per mostrarla anche agli altri e si faceva a gara per chi aveva la campana più bella... da li il Campanilismo.

Già il giro di parata era pericoloso (un colpo preso male poteva crepare la campana rovinando completamente il suono) figurarsi il trasposto dalla fabbrica al Campanile, con le strade che c'erano... chi fabbricava le campane, lo faceva spesso a domicilio.
Portava i suoi progetti ed i suoi attrezzi presso la zona del campanile, e li dava disposizione al committente che lo aveva assunto, su come costruire il forno per la colata, su quale e quanto bronzo procurare etc etc.

Finita la fusione, la rifinitura della campana, e finita la Festa, la campana veniva issata sul campanile ed il costruttore di campane tornava a casa con il suo stipendio.
Ma chi erano i committenti ? erano abitanti della zona, agricoltori, allevatori che non avevano grosse disponibilità di denaro... e pagavano il lavoro con beni (vino, olio etc) che veniva poi gestito dal fonditore... che solitamente oltre alla fabbrica aveva anche un negozio per vendere i frutti del "baratto".

Esistevano pero' anche dei fonditori "girovaghi" che andavano di paese in paese a costruire campane.. in questi casi la merce la doveva portare fino al paese successivo sperando che ci fosse un mercato/sagra per vendere le vettovaglie... e nel frattempo ?

Questi girovaghi iniziarono a dire che se si metteva dell'argento nella fusione di bronzo, il suono sarebbe stato migliore più Argentino ... quindi i committenti fornivano monete d'argento per ottenere un suono migliore;
ma in realtà l'argento, in campane grandi, essendo duttile e "morbido" invece di migliorare il suono lo peggiorerebbe... ma nessun problema! le monete d'argento erano intascate prima di finire nella fusione ed usate dal fonditore come integrazione di pagamento!

da qui "le campane con suono Argentino"






martedì 30 settembre 2014

Arduino & Raspberry Pi




Questa sera ho deciso di mettere nero su bianco I passi che mi hanno permesso di collegare il mio “Raspberry Pi B-” ad uno dei miei “Arduino Uno R3”
Allora voi direte ma perche usare un Arduino ? Perche se devi usare con precisione la temporizzazione, leggere velocemente valori analogici etc etc l'Arduino è perfetto (Open Surce e Progetto Italiano) e come dice il sito ufficiale
Arduino is an open-source electronics platform based on easy-to-use hardware and software. It's intended for anyone making interactive projects.
(per maggiori info su cosa sia esattamente http://www.arduino.cc/)
cos'altro si puo' volrere ?
Collegargo al Raspberry Pi! Perche ? Potrei discutere sul fascino di interfacciare I due sistemi, dell'esplorazione dell'insolito... oppure confessare che il raspberry Pi è l'unico “PC-Fisso” che ho nella stanza Hobby che è un Triangolo Rettangolo Isoscele di lato 1,5 mt … in compenso il monitor è un 17Pollici1280x1024 :o)

cmq bando alle ciance
Aprendo il Terminale si scarica

sudo apt-get install arduino

Rispondete ad eventuali domande, scaricate, attendete .. et voilà comparira un menu con “Arduino IDE”




impostiamo la Board come “Arduino Uno



Dopodiche Carichiamo uno Sketch (è un programma per arduino) il piu semplice possibile...






dove al piedino 13 è collegato un Led (apposta per fare queste prove :) ) che andremo a far lampeggiare;
aggiungiamo, giusto per far lampeggiare il led in maniera particolare, le seg righe di codice alla fine:

digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
delay(250);
digitalWrite(led, LOW);
delay(250);

dopodichè verifichiamo il codice








Prima di Fare L'upload sull Arduino
Bisogna collegarlo, in Teoria Bisognerebbe collegarlo NON direttamente al Raspberry Pi ma tramite un hub USB alimentato... ed è cio che vi consiglio.
Io per questi test ho provato il collegamento diretto ed ha funzionato... cmq non mi ritengo responsabile di eventuali Svampate che possano succedervi :D


(da notare che dovrebbe aver riconosciuto la porta USB in autonomia) nel mio caso :

/dev/ttyACM0


ed ora Carichiamo il programma su Arduino








Ed ora Finalmente un led giallo dovrebbe lampeggiare...

Come Fare una Guida usando il Raspbrry Pi

Allora prima di tutto abbiamo bisogno di un qualcosa che catturi lo schermo o una finestra ... cercando un po' in giro (sinceramente non ricordo piu dove) ho trovato questo simpatico strumento  a riga di comando: "scrot"

io uso sempre l'interfaccia grafica di default di Raspberry .. quindi apro un terminale ed installo l'applicazione

sudo apt-get install scrot

finita l'installazione  se uso il comando

scrot -d 10

dopo 10 secondi di delay, viene catturato tutto lo schermo e salvato in un file *.png nella directory dove si è lanciato...

se invece scrivo

scrop -d 10  -u

verrà catturata la finestra attiva allo scadere dei 10 secondi di delay

i file generati da scrot sono del tipo

yyyy-mm-dd-hh24mmss_LarghezzaxAltezza_scrot.png
ovvero per esempio
2014-09-29-220333_1232x992_scrot.png

ma se dovete ritagliare l'immagine o poco piu ? ho cercato in giro qualcosa di veramente easy... ma non ho trovato il tool Finale.

Così per scherzare ho cercato info sul buon vecchio Gimp & Raspberry ed ho trovato che SI! funziona, Lentamente, ma funziona! (qui un overclock dinamico si apprezzerà sensibilemente )

e quindi

sudo apt-get install gimp

a questo punto comparirà il menu "GNU Image Manipolation Program" Sotto Graphics





et Voilà ora avete tutti gli strumenti per catturare le schermate e manipolarle (con pazienza...)


Migior prezzo su AMAZON per RaspBerry Pi: 39 Euro

martedì 8 luglio 2014

Giochiamo con il Sensore HC-SR04


(il data sheet lo potete trovare QUI)

Un  preambolo su questo sensore... per quanto ho potuto appurare su inet le prime versioni non erano molto a buon mercato (sensori ultrasonici per misurare le distanze... poi I prezzi sono scesi e l'altro giorno me ne sono arrivati da Hong Kong due esemplari a 3,4 euro in tutto, spese di spedizione incluse!)

prima nota dolente ho letto che spesso (1 su 10) se ne trovano di difettosi tra le “cinesate” ed uno dei miei due ogni tanto sbarella... ma pazienza l'altro funziona bene

comunque vi consiglio di dare un occhiata anche QUI su AMAZON.

Guardando il manuale del sensore e girando per internet (per esempio qui QUI) ho fatto questo schema di cablaggio




con la solita resistenza da 1Khom per portare il segnale da 5v a 3,3 senza bruciare il Raspberry

L'alimnetazione da 5V l'ho presa direttamente dal Raspberry.

La versione 0 del sorgente lo ammetto l'ho scopiazzata, tanto per testarne il funzionamento e ve la riporto qua con qualche mio commento in piu da cui si capisce come funziona il sensore
(si manda segnale al pin “Trigger” e poi si legge il tempo che il pin “Echo” sta “Alto(1-ON)”
questo tempo è proporzionale alla distanza percorsa da un pacchetto di ultra-suoni a 44 Khz [da non confondere con la qualita di 44Khz dei CD, che è quella di campionamento, Teorema di Shannon insomma i cd riproducono al massimo frequenze di 22Khz perche tanto il nostro orecchio non sente suoni piu acuti (leggi); )

<pre>[Omissis]... </pre>
La seconda versione (v1) riprende la prima e la estende con settaggi di variabili al posto di codici cablati a programma, e per la gestione corretta della struttura (gestione errori etc)

<pre>[Omissis]... </pre>

La terza versione (v3) introduce la gestione di problemi tipo l'interruzione del segnale (magari per rottura del cavetto) tra sensore e raspberry, e la gestione di una distanza massima entro cui ci si aspetta il sensora debba funzionare (questo per evitare di aspettare inutilmente secondi se davanti al sensore non c'e' nulla)
La versione v3 ha avuto un parto travagliato per la gestione delle operazioni di interi in phyton... che restituisce sempre un intero e non un float... cmq la sera dopo, a mente lucida è stato risolto tutto.





import time
import RPi.GPIO as GPIO

# use the values of the GPIO pins, and not the actual pin number
# so if you connect to GPIO 25 which is on pin number 22, the
# reference in this code is 25, which is the number of the GPIO
# port and not the number of the physical pin
GPIO.setmode(GPIO.BCM)

# remember to change the GPIO values below to match your sensors
Trig_pin = 17 # GPIO output = the pin that's connected to "Trig" on the sensor
Echo_pin = 27 # GPIO input = the pin that's connected to "Echo" on the sensor

ON = 1
OFF = 0

#shoudln't need to changed these values unless you have a specific need to do so.
MAX_SENSOR_DISTANCE = float(500) # Maximum sensor distance can be as high as 500cm,
# no reason to wait for ping longer than sound takes
# to travel this distance and back.
US_ROUNDTRIP_IN = 146 # Microseconds (uS) it takes sound to travel round-trip 1 inch (2 inches total),
# uses integer to save compiled code space.
US_ROUNDTRIP_CM = 57 # Microseconds (uS) it takes sound to travel round-trip 1cm (2cm total),
# uses integer to save compiled code space.

#max_cm_distance = float(60)


#_maxEchoTime = (min(max_cm_distance, MAX_SENSOR_DISTANCE) / 17000);
#* US_ROUNDTRIP_CM + (US_ROUNDTRIP_CM / 2) *1000; # Calculate the maximum distance in uS.

#print min(max_cm_distance, MAX_SENSOR_DISTANCE) /17
#print min(max_cm_distance, MAX_SENSOR_DISTANCE) /1700
#print min(max_cm_distance, MAX_SENSOR_DISTANCE) /17000
#print _maxEchoTime*17000

def NewPingConvert(echoTime, conversionFactor):
return (echoTime + conversionFactor / 2) / conversionFactor


def reading(sensor,max_cm_distance):
max_cm_distance=float(max_cm_distance)
_maxEchoTime = (min(max_cm_distance, MAX_SENSOR_DISTANCE) / 17000);

if sensor == 0:
# point the software to the GPIO pins the sensor is using
# change these values to the pins you are using
# GPIO output = the pin that's connected to "Trig" on the sensor
# GPIO input = the pin that's connected to "Echo" on the sensor

GPIO.setup(Trig_pin,GPIO.OUT)
GPIO.setup(Echo_pin,GPIO.IN)
GPIO.output(Trig_pin, GPIO.LOW)

# found that the sensor can crash if there isn't a delay here
# no idea why. If you have odd crashing issues, increase delay
time.sleep(0.3)

# sensor manual says a pulse ength of 10Us will trigger the
# sensor to transmit 8 cycles of ultrasonic burst at 40kHz and
# wait for the reflected ultrasonic burst to be received
# to get a pulse length of 10Us we need to start the pulse, then
# wait for 10 microseconds, then stop the pulse. This will
# result in the pulse length being 10Us.
# start the pulse on the GPIO pin
# change this value to the pin you are using
# GPIO output = the pin that's connected to "Trig" on the sensor
GPIO.output(Trig_pin, ON) #True

# wait 10 micro seconds (this is 0.00001 seconds) so the pulse
# length is 10Us as the sensor expects
time.sleep(0.00001)

# stop the pulse after the time above has passed
# change this value to the pin you are using
# GPIO output = the pin that's connected to "Trig" on the sensor
GPIO.output(Trig_pin, OFF) #False

# listen to the input pin. 0 means nothing is happening. Once a
# signal is received the value will be 1 so the while loop
# stops and has the last recorded time the signal was 0
# change this value to the pin you are using
# GPIO input = the pin that's connected to "Echo" on the sensor
signaloff = time.time()
signal0 = signaloff + _maxEchoTime

while (GPIO.input(Echo_pin) == OFF and signaloff <= signal0):

signaloff = time.time()
if GPIO.input(Echo_pin) == ON:

# listen to the input pin. Once a signal is received, record the
# time the signal came through
# change this value to the pin you are using
# GPIO input = the pin that's connected to "Echo" on the sensor
signalon = signaloff
signal0 = signalon + _maxEchoTime

while (GPIO.input(Echo_pin) == ON and signalon <= signal0):

signalon = time.time()

if GPIO.input(Echo_pin) == OFF:
# work out the difference in the two recorded times above to
# calculate the distance of an object in front of the sensor
timepassed = signalon - signaloff


# we now have our distance but it's not in a useful unit of
# measurement. So now we convert this distance into centimetres
# if you take 340 m/sec (approximate speed of sound through air)
# and convert to cm/sec you get 34000 cm/sec.
# For pulse-echo, the sound travels twice the measured distance so
# you need to divide the conversion factor by 2 so you get 17000 cm/sec.
# When you multiply by the measured time, you get distance from the
# transducer to the object in cm.
# The speeds of sound used in the formulas are approximations.
# The actual speed of sound through air varies with temperature and
# (to a lesser extent) with humidity (and a little due to other factors).
distance = timepassed * 17000

else:
distance = 'Out Of Range'


else:
distance = 'No Start Echo'

# return the distance of an object in front of the sensor in cm
return distance

else:
print "Incorrect usonic() function varible."

def barra_da_num(myNum):
sOut = '#'
n = 1

while (n < myNum and n < 120):
n += 2
sOut += '#'
return sOut
try:

#here you put your main loop or block of code
#print reading(0,80)
myDist = reading(0,80)
while ( myDist > 6):
myDist = reading(0,80)
print '#' + str(myDist) + barra_da_num(myDist)

except KeyboardInterrupt:
# here you put any code you want to run before the program
# exits when you press CTRL+C
#print "\n", counter # print value of counter
print "\nuscito per pressione tasti CTRL+C"

#except:
# this catches ALL other exceptions including errors.
# You won't get any error messages for debugging
# so only use it once your code is working
# print "Other error or exception occurred!"

finally:
# we're no longer using the GPIO, so tell software we're done
GPIO.cleanup() # this ensures a clean exit