Arduino Real Time OS Evolution (flash news)

A new version of an Arduino Realtime OS is on the go:

I have used with profit and fun NilRTOS, and I strongly suggest to you this new variant.

A preemptive multi tasking RTOS in a 2KB 1-MIPS, 8 bit microcontroller remember be the ugly time when a MS-Windows 3.x with 1 MB of RAM was an inferior operative system no-preemptive at all, but with nice software like Excel and Access

BBC Micro bit: first look

The BBC Micro bit an ARM-based embedded system designed by the BBC for use in computer education in the UK. The device has been given away free […] [to every 11 years old pupil] in the UK, and is also available for purchase by anyone.

This is the wikipedia definition.

micro_bit
The BBC:Micro compared with some coins: very small indeed

With a 5×5 led matrix, two buttons, a compass and a 3-axis accelermeter, this small unit has a lot of interesting suff packed for less then 17€ on Amazon


The core is an ARM CortexM with 16KB of RAM and 256KB of static flash for the code.

The Microbit web site offers a very huge set of videos and teaching material. But to regster you need to got an authorization code, because the site seems teacher-oriented, at least for publishing code samples.

It is not very easy to search for code samples, even if there is a bizzarre “site” index, who rememebrs me a 1995 web site :)

The micro:bit is plug and play: when you connect it on a PC  USB, a magic drive will appear. Simply copy your “hex” code on it and…no other steps are needed!

Comparing with an Arduino uno:

Pros

  1. Four different web editor (Microsoft Blocks, Microsoft Touch Develop, Code Kingdoms JavaScript and MicroPython) to start.
    No C language knowledge required.
    Install nothing and get ready in seconds.
    Very easy upload procedure (is a simple drive copy!)
  2. A lot more RAM then arduino (16Ks vs 2kBs)
  3. 3-more pin on the bottom and +3V and GND to attach extra leds/sensor and so on
  4. MicoPython-ready
    Very good collections of examples and demo at https://github.com/bbcmicrobit/micropython.The python runtime has a good hardware coverage too.
  5. Low power: only 3Volt needed for operation (Arduino needs at least double as far as I know, anyway can work in a wider range and can output 3.xV and 5V).
  6. Quite aggressive price.

Cons

  1. Very difficult to download an off-line editor. The online editors use a custom format to save your code. In general the platform seems a bit too close for “ordinary” people. Arduino is much more open. Anyway the micropython is open source and only need a free account on ARM web site (mbed.org). Also my attempt to build the python editor was unsuccessful. The python editor lacks compilation checks anyway.
    I was able to build Micropython with a bit of work on MacOSX
  2. Very very tiny.  For a 6/7 years old child is only “small”, for an adult is “tiny”.
  3. To access the smaller pins like I2C you need additional stuff and/or precise soldering

Anyway I was very impressed. Every Europe school should get one.

 

RaspberryPi 2: The perfect box for your backpack

After my two children grow a little, I have some spare time to play with RaspberryPi. I have bought a Raspberry Pi 2 Model B, a very neat and compact machine with 1GB of RAM, and a quad-core ARM chip on it.

I was looking for an easy-to-carry unix box, and I was wrong: raspberry pi can be a lot more than that.nippon-gio

Continue reading “RaspberryPi 2: The perfect box for your backpack”

Arduino Stereo sid

Arudino StereoSID emulates the SID sound chip of the famous Commodore 64.
It is based on the Atmega8 MOS6581 SID Emulator from Christoph Haberer.
Library conversion and memory optimization by Mario Patino.
Stereo Effect by Giovanni Giorgi

Egg box con Sensore sonico

This entry is part 1 of 3 in the series Arduino the Egg Box Lamp

Costruiamo una lampada luminosa con Arduino, un sensore sonico ed…una scatola di uova :)

Come abbiamo già visto le scatole traslucide per il trasporto delle uova sono un ottima base per creare piccole lampade, per diverse ragioni:

  • sono facili da trovare
  • sono leggere
  • sono abbastanza rigide
  • possono essere incollate con del Vinavil (strano ma vero)

Questa versione di eggbox è composta da una sola scatola da quattro uova e da un sensore sonico che potete trovare su amazon per meno di 5€. In realtà il suo prezzo dovrebbe essere meno di 3€, ma considerando l’affidabilità di Amazon (viene recapitato in meno di 3 giorni e senza costi di spedizione) è ancora un prezzo accettabile.

Cosa vi serve:

  1. Arduino Uno
  2. Cavi rigidi di 3-4 colori
  3. Un sensore sonico
  4. Uno o più led ad alta luminosità
  5. Un caricabatterie usb da cellulare, dal costo contenuto. Ongi tanto nei supermercati trovate offerte per caricabatterie sotto i 10€.
  6. Un paio di mini breadboard.

Arduino uno viene montato al contrario sulla superficie piana della scatola di uova:per tenerlo in posizione vengono creati 4 buchi da cui vengono passati quattro fili rigidi da connettere al sensore sonico

Inoltre su un lato viene fatto un buco per far passare il cavo USB, che verrà alimentato con batteria USB.

arudino_egg_effect1

Il codice che ho progettato è una variante di un esempio d’uso del sensore sonico, ed è integrato con NilRTOS, di cui ho già ampiamente parlato.

Il sensore ha bisogno di 4 connessioni e non tre come il Ping  ma non richiede pin PWM e costa sei volte di menoQuesto tutorial è molto chiaro e pure in italiano.

Le connessioni sono l’alimentazione da 5volt, la massa e due pin Trigger e Echo. Inviando un valore su Trigger si legge il risultato su Echo.

//HC RS04 Sensore ultrasuoni
const int triggerPort = 7;
const int echoPort = 8;
const int blueLed=11;
const int maxDistCm=28;
#include
#include 

void setup() {

  pinMode( triggerPort, OUTPUT );
  pinMode( echoPort, INPUT );
  pinMode( blueLed, OUTPUT);
  Serial.begin( 9600 );
  Serial.println( "Sensore ultrasuoni: ");
  nilSysBegin();
}

void loop() {
  //nilPrintUnusedStack(&Serial);
  //Serial.println();
}

NIL_WORKING_AREA(waUltrasonicSensor, 64);
NIL_THREAD(UltrasonicSensor,arg){
  static long lastValue=0;
  while(true) {
  //porta bassa l'uscita del trigger
  digitalWrite( triggerPort, LOW );

  //invia un impulso di 10microsec su trigger
  digitalWrite( triggerPort, HIGH );
  delayMicroseconds( 10 ); // nilThdSleepMicorseconds
  digitalWrite( triggerPort, LOW );

  long duration = pulseIn( echoPort, HIGH );

  long r = 0.034 * duration / 2;
  if(r != lastValue){

    Serial.print( "durata: " );
    Serial.print( duration );
    Serial.print( " , " );
    Serial.print( "distanza: " );

    //dopo 38ms è fuori dalla portata del sensore
    if( duration > 38000 ) Serial.println( "fuori portata");
    else { 

        Serial.print( r ); Serial.print( "cm" );

        Serial.print(" ");
        nilPrintUnusedStack(&Serial);
        if(r <=maxDistCm && r>=5 ){
          int v=map(r,5,maxDistCm,0,255);
          Serial.print( v );
          Serial.print(" LED ");
          analogWrite(blueLed, v);
        }

      }
    lastValue=r;
  }
  //aspetta mezzo secondo ca
  /* we
      suggest to use over 60ms
      measurement cycle, in order to prevent trigger sign
      al to the echo signal
*/
  nilThdSleepMilliseconds( 60*2 );
  }
}

NIL_THREADS_TABLE_BEGIN()
NIL_THREADS_TABLE_ENTRY(NULL /*TH NAME*/, UltrasonicSensor,          NULL, waUltrasonicSensor,          sizeof(waUltrasonicSensor))
NIL_THREADS_TABLE_END()

Il codice dello sketch è molto semplice ma non fatevi ingannare: difatti consente di impostare la luminosità avvicinando od allontanando la mano, ma se la si solleva di scatto il valore impostato rimarrà fisso. Difatti se il valore letto (=la distanza letta) supera la toleranza di 20cm il sistema non fa nulla, ed il led rimane dell’intensità selezionata.

Il sensore poggia sulla mini breadboard e non c’è bisogno di alcuna saldatura, a patto di avere fili della giusta lunghezza e ben tirati.

E’ possibile aggiungere altri led che pulsano con effetti differenti

IMG_2013