Tuesday, March 7, 2017

19. Medindo distâncias com som

Para que o sistema seja autônomo, uma bateria de 9V pode ser usada para alimentar o arduíno e um LCD (1602 16x2 Character LCD Display Module HD44780 Controller Blue Arduino) é usado como mostrador. 

Veja as Aulas 19 e 20 deste curso: http://www.toptechboy.com/arduino-lessons/




#include <LiquidCrystal.h> 

// initialize the library with the numbers of the interface pins
LiquidCrystal LCD(7,8,9,10,11,12);
int trigPin=13; //Sensor Trip pin connected to Arduino pin 13
int echoPin=3;  //Sensor Echo pin connected to Arduino pin 11
float pingTime;
float targetDistance;
int speed= 345; //speed of sound at 26C, 1atm, in m/s

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly: 
  
  digitalWrite(trigPin, LOW); //Set trigger pin low
  delayMicroseconds(2000); //Let signal settle
  digitalWrite(trigPin, HIGH); //Set trigPin high
  delayMicroseconds(10); //Delay in high state
  digitalWrite(trigPin, LOW); //ping has now been sent
  delayMicroseconds(10); //Delay in high state

     pingTime = pulseIn(echoPin, HIGH);  //pingTime is presented in microceconds
  
  targetDistance = speed*pingTime/1000000/2; 

 LCD.setCursor(0,1);  //Set cursor to first column of second row
  LCD.print("                "); //Print blanks to clear the row
  LCD.setCursor(0,1);   //Set Cursor again to first column of second row
  LCD.print(targetDistance); //Print measured distance
  LCD.print(" m");  //Print your units.
  delay(250); //pause to let things settle
}

Monday, March 6, 2017

18. Medindo a distância e velocidade do som com saída no monitor

Usamos o HC-SR04 Ultrasonic Distance Measuring Sensor Module para medir distâncias e imprimi-las no monitor.  Veja a Aula 17 deste curso: http://www.toptechboy.com/arduino-lessons/


int trigPin=13; //Sensor Trip pin connected to Arduino pin 13
int echoPin=11;  //Sensor Echo pin connected to Arduino pin 11
float pingTime;
float targetDistance;
int speed= 345; //sound speed in m/s at 26C at see level
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  // put your main code here, to run repeatedly: 
  
  digitalWrite(trigPin, LOW); //Set trigger pin low
  delayMicroseconds(2000); //Let signal settle
  digitalWrite(trigPin, HIGH); //Set trigPin high
  delayMicroseconds(10); //Delay in high state
  digitalWrite(trigPin, LOW); //ping has now been sent
  
  pingTime = pulseIn(echoPin, HIGH);  //pingTime is presented in microceconds

  targetDistance = speed*pingTime/1000000/2; 
  Serial.print("the distance is: ");
  Serial.print(targetDistance);
 Serial.println("    m");
  delay(1000);
}

Para medir a velocidade do som, partimos de uma distância bem determinada (digamos, 20cm) e modificamos o código acima do seguinte modo: 

int trigPin=13; //Sensor Trip pin connected to Arduino pin 13
int echoPin=11;  //Sensor Echo pin connected to Arduino pin 11
float pingTime;
float speedOfSound;
float targetDistance=0.2; //Distance to Target in m
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  // put your main code here, to run repeatedly: 
  
  digitalWrite(trigPin, LOW); //Set trigger pin low
  delayMicroseconds(2000); //Let signal settle
  digitalWrite(trigPin, HIGH); //Set trigPin high
  delayMicroseconds(10); //Delay in high state
  digitalWrite(trigPin, LOW); //ping has now been sent
  
  pingTime = pulseIn(echoPin, HIGH);  //pingTime is presented in microceconds

  speedOfSound = (targetDistance*2)/pingTime*1000000; 
  Serial.print("The Speed of Sound is: ");
  Serial.print(speedOfSound);
 Serial.println("    m/s");
  delay(1000);

}

Saturday, March 4, 2017

17. Semáforo (4)

Quando o botão é apertado o estado do pin 5 passa de HIGH (definida com INPUT_PULLUP) para LOW, de modo que o semáforo passa a funcionar. Se o botão é solto o estado se congela.

Baseado em:
Simon Monk, 30 Arduino Projects for the Evil Genius, McGraw-Hill Education TAB; 2nd ed., 2013. 

int redPin = 4;
int yellowPin = 3;
int greenPin = 2;
int buttonPin = 5;

int state = 0;

void setup()                    
{
  pinMode(redPin, OUTPUT);    
  pinMode(yellowPin, OUTPUT);    
  pinMode(greenPin, OUTPUT);     
  pinMode(buttonPin, INPUT_PULLUP); 
}

void loop()                    
{
  if (digitalRead(buttonPin) == LOW)
  {
    if (state == 0)
    {
      setLights(HIGH, LOW, LOW);
      state = 1;
      delay(3000);
    }
    else if (state == 1)
    {
      setLights(HIGH, HIGH, LOW);
      state = 2;
      delay(2000);
    }
    else if (state == 2)
    {
      setLights(LOW, LOW, HIGH);
      state = 3;
      delay(3000);
    }
    else if (state == 3)
    {
      setLights(LOW, HIGH, LOW);
      state = 0;
      delay(2000);
    }
    delay(1000);
  }
}

void setLights(int red, int yellow, int green)
{
  digitalWrite(redPin, red);
  digitalWrite(yellowPin, yellow);
  digitalWrite(greenPin, green);
}  





Exercício: 

1. Simule este circuito em Tinkercad e depois implemente-o físicamente.