Questo circuito permette di controllare un motorino attraverso un potenziometro e di rilevarne la velocità attraverso un feedback luminoso dato da 3 led: uno verde, uno giallo e uno rosso (nella versione più evoluta i tre led sono sostituiti da un led RGB). Se il motore è spento i led sono spenti, se il motore gira piano viene acceso il led verde, se la velocità viene aumentata si accende anche il giallo e quando il motorino è alla massima potenza tutti e tre i led sono accesi.

Il codice


const int analogInPin = 0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
int ledPin = 11;
int ledPin2 = 6;
int ledPin3 = 5;

void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
}

void loop() {

// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out value:
analogWrite(analogOutPin, outputValue);

if (sensorValue == 0){
analogWrite(ledPin,  0);
analogWrite(ledPin2, 0);
analogWrite(ledPin3, 0);
} else if (sensorValue <= 400){
analogWrite(ledPin, 255);
analogWrite(ledPin2, 0);
analogWrite(ledPin3, 0);
} else if (sensorValue <= 800){
analogWrite(ledPin, 255);
analogWrite(ledPin2, 255);
analogWrite(ledPin3, 0);
} else{
analogWrite(ledPin, 255);
analogWrite(ledPin2, 255);
analogWrite(ledPin3, 255);
}

// print the results to the serial monitor:
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);

// wait 10 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
delay(10);
}