No terceiro encontro, realizado no auditório do CCSL do IME-USP, nós fizemos duas práticas, sendo uma com LED e potenciômetro, e outra utilizando um sensor ultrassônico.

Na primeira, controlamos a luminosidade de um LED com um potenciômetro. A luminosidade de um LED não se controla (muito bem) através da variação da corrente que passa por ele, então resolveu-se variar o tempo no qual o LED permaneceria aceso dentro de um intervalo de tempo de 20ms a fim de controlar a luminosidade do mesmo. Segue abaixo o código utilizado:

/* Pot sketch blink an LED at a rate set by the position of a potentiometer */

const int potPin = 0; // Select the input pin for the potentiometer
const int ledPin = 13; // Select the pin for the LED
int val = 0; // Variable to store the value coming from the sensor

void setup ()
{
  pinMode(ledPin, OUTPUT); // Declare the ledPin as an OUTPUT
}

void loop ()
{
  //val = analogRead(potPin)/50;
  val = map(analogRead(potPin), 0, 1023, 0, 20);

  digitalWrite(ledPin, HIGH);
  delay(val);
  digitalWrite(ledPin, LOW);
  delay(21-val);
}

Na outra prática utilizamos um sensor ultrassônico. Com ele é possível controlar a distância entre um objeto e o sensor até um certo limite. No nosso teste limitamos para 20cm, de modo que ele só identificaria algum obstáculo nesta distância. Discutimos sobre a função pulseIn para entender melhor a leitura realizada. Também fizemos alguns testes com limites maiores do que 20cm, encontrando alguns resultados estranhos. Segue abaixo o código utilizado:

/*
 HC-SR04 Ping distance sensor:
 VCC to arduino 5v
 GND to arduino GND
 Echo to Arduino pin 7
 Trig to Arduino pin 8

 This sketch originates from Virtualmix: http://goo.gl/kJ8Gl
 Has been modified
  by Winkle ink here: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
  and modified further by ScottC here: http://arduinobasics.blogspot.com/
 on 10 Nov 2012.
 */

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200 ; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup ()
{
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop ()
{
  /* The following trigPin/echoPin cycle is used to determine the
  distance of the nearest object by bouncing soundwaves off of it. */
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);

  distance = duration/58.2; // Calculate the distance (in cm) based on the speed of sound.

  if (distance >= maximumRange || distance <= minimumRange){
    /* Send a negative number to computer and Turn LED ON
    to indicate "out of range" */
    Serial.println("-1");
    digitalWrite(LEDPin, HIGH);
  } else {
    /* Send the distance to the computer using Serial protocol, and
    turn LED OFF to indicate successful reading. */
    Serial.print(distance);
    Serial.print(" ");
    Serial.println(duration);
    digitalWrite(LEDPin, LOW);
  }

  delay(50); // Delay 50ms before next reading.
}