di Alfonso D’Ambrosio

Questa sera mi piace parlare di Microbit, il nuovo microcontrollore che la BBC “regala” ai bambini inglesi.

In particolare voglio aprire una finestra su come collegare ad esso tutta una serie di sensori esterni e parlerò questa sera del sensore ad ultrasuoni a 4 uscite.

In sostanza il sensore ad ultrasuoni funziona secondo il principio fisico seguente: se se conosco il tempo di andata e ritorno di un segnale sonoro, nota la velocità del suono in aria a quella temperatura, posso anche determinare l’oggetto su cui il suono viene riflesso.

il segnale viene quindi inviato e poi registrato il suo eco.

Come fare tutto questo con Microbit?

Eccovi il codice in Java dove visualizzo a schermo la distanza in unità di Led accesi

basic.forever(() => {
pins.digitalWritePin(DigitalPin.P0, 0)
control.waitMicros(2)
pins.digitalWritePin(DigitalPin.P0, 0)
control.waitMicros(10)
pins.digitalWritePin(DigitalPin.P0, 1)
led.plotBarGraph(pins.pulseIn(DigitalPin.P1, PulseValue.High) / 58, 0)
basic.pause(100)
})

 

più in generale se volete costruirvi le vostre estenzioni

per chi volesse il file .ts per aggiungere l’estensione

enum PingUnit {
MicroSeconds,
Centimeters,
Inches
}

/**
* sensore ultrasuoni
*/
//% weight=10
namespace sonar {
/**
* invia un ping ed ottiene una uscita in microsecondi
* @parametro trig tigger pin
* @parametro echo echo pin
* @parametro unità di misura
* @param massima e minima distanza ho messo max 5 metri
*/

export function ping(trig: DigitalPin, echo: DigitalPin, unit: PingUnit, maxCmDistance = 500): number {
// invia impulso
pins.setPull(trig, PinPullMode.PullNone);
pins.digitalWritePin(trig, 0);
control.waitMicros(2);
pins.digitalWritePin(trig, 1);
control.waitMicros(10);
pins.digitalWritePin(trig, 0);

// legge impulso
let d = pins.pulseIn(echo, PulseValue.High, maxCmDistance * 58);

switch (unit) {
case PingUnit.Centimeters: return d / 58;
case PingUnit.Inches: return d / 148;
default: return d ;
}
}
}

 

Buon divertimento

Vai alla barra degli strumenti