Arduino Uno, un po’ più di un “Hello, world!”

Primo esperimento significativo con Arduino Uno, qualcosa che va oltre il classico “Hello, world” con annesso blink del LED giallo.

Inizialmente mi sono accontentato di montare qualche componente esterno direttamente su due pin strip infilate nei connettori della scheda, ma la scarsa stabilità del sistema mi ha fatto desistere, e così ho acquistato cinque Proto Shield, cioè un circuito stampato preforato (tipo una scheda millefori) e preformato per essere sovrapposto alla board Arduino Uno. Ed ecco il circuito iniziale, riportato nel proto shield.

Arduino Uno Proto Shield

C’è un trimmer collegato ad un ingresso analogico, un dip switch a due vie collegato a due ingressi digitali, e due LED ad alta luminosità (per rendere il tutto più figo) collegati a due uscite PWM. Il loop principale del firmware funziona così: leggo il valore relativo al trimmer, e uso il valore per pilotare in PWM i due LED, solo se il corrispondente pin del dip switch è su ON, altrimenti spengo il LED. Inoltre, se la variabile legata al debug è vera, invio sulla seriale il valore letto sul trimmer.

Ecco il firmware.


// Do not remove the include below
#include "dimmer.h"
#include <SoftwareSerial.h>

#define LED_R 10
#define LED_V 11
#define TRIMMER A0
#define DIP1 5
#define DIP2 6

boolean debug = true;
int brigthness = 0;

//The setup function is called once at startup of the sketch
void setup() {
pinMode(LED_R, OUTPUT); // Red LED, output
pinMode(LED_V, OUTPUT); // Green LED, output
pinMode(DIP1, INPUT); // 1st switch
pinMode(DIP2, INPUT); // 2nd switch
if (debug) Serial.begin(57600);
}

// The loop function is called in an endless loop
void loop() {
brigthness = analogRead(TRIMMER);

if (digitalRead(DIP1)) analogWrite(LED_R, (int)(brigthness / 4));
else analogWrite(LED_R, 0);

if (digitalRead(DIP2)) analogWrite(LED_V, (int)(brigthness / 4));
else analogWrite(LED_V, 0);

if (debug) {
    Serial.print("Brigthness: ");
    Serial.println((int)(brigthness / 4), DEC);
}

}

Nel breve termine vorrei: 0] legare il debug ad un tasto fisico, invece che ad una variabile hard-coded; 1] verificare se tramite una coppia trasmettitore / ricevitore IR si può mettere in piedi un sensore di prossimità; 2] pilotare una barra LED usando il minor numero di pin; 3] (il vero obiettivo) interfacciare la board ad una macchina radiocomandata, in modo da sfruttare la meccanica e l’elettronica di base preesistenti.

Categorie

Archivi

2 Comments

  1. 11 aprile 2012

    Grande professionismo! Tienici informati :-) Ma una “Arduino session” da qualche parte la vogliamo fare?

    • mcalamelli
      11 aprile 2012

      Mi pare una bella idea :)

Comments are closed, but trackbacks and pingbacks are open.