NOTA: O polo sul do íman deve apontar para o sensor (como mostra a figura). Quando o íman está próximo do sensor o seu estado é 0 (LOW), quando está afastado é 1 (HIGH).
/*
Projeto 49 - Sensor de efeito Hall digital (Medição do período de rotação de um disco)
Mede o intervalo de tempo que o disco demora a executar N voltas e calcula o período.
Depois de se pressionar o botão, o Arduino inicia a contagem do tempo quando o íman passa junto do sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#define PinSensor 7
#define PinBTN 8
#define PinLED 9
#define N 5 //Número de voltas
int estadoSensor;
int estadoBTN;
int atraso = 100; //Atraso para que o íman se afaste do sensor
unsigned long tempoi;
unsigned long tempof;
float periodo; //Período em ms
void setup()
{
Serial.begin(9600);
pinMode(PinSensor, INPUT);
pinMode(PinBTN, INPUT_PULLUP);
pinMode(PinLED, OUTPUT);
Serial.println();
Serial.println("Pressione o botão iniciar");
}
void loop()
{
digitalWrite(PinLED, LOW);
estadoBTN = digitalRead(PinBTN);
while(estadoBTN == 1)
{
estadoBTN = digitalRead(PinBTN);
}
Serial.println("A medir...");
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempoi = micros();
Serial.println("Início da contagem do tempo");
digitalWrite(PinLED, HIGH);
delay(atraso);
for(int i = 1; i <= N; i++)
{
digitalWrite(PinLED, LOW);
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempof = micros();
digitalWrite(PinLED, HIGH);
if(i == 1)
{
Serial.print(i);
Serial.println(" volta");
}
else
{
Serial.print(i);
Serial.println(" voltas");
}
delay(atraso);
}
periodo = (tempof - tempoi)/(N*1000.0);
Serial.print("Período = ");
Serial.print(periodo, 1);
Serial.println(" ms");
}
/*
Projeto 49 - Sensor de efeito Hall digital (Medição do período de um pêndulo)
Mede o intervalo de tempo que o disco demora a executar N oscilações.
Depois de se pressionar o botão, o Arduino inicia a contagem do tempo quando o íman passa junto do sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#define PinSensor 7
#define PinBTN 8
#define PinLED 9
#define N 3 //Número de oscilações
int estadoSensor;
int estadoBTN;
int atraso = 100; //Delay para que o íman se afaste do sensor
unsigned long tempoi;
unsigned long tempof;
float periodo; //Período em ms
void setup()
{
Serial.begin(9600);
pinMode(PinSensor, INPUT);
pinMode(PinBTN, INPUT_PULLUP);
pinMode(PinLED, OUTPUT);
Serial.println();
Serial.println("Pressione o botão iniciar");
}
void loop()
{
digitalWrite(PinLED, LOW);
estadoBTN = digitalRead(PinBTN);
while(estadoBTN == 1)
{
estadoBTN = digitalRead(PinBTN);
}
Serial.println("A medir...");
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempoi = micros();
Serial.println("Início da contagem do tempo");
digitalWrite(PinLED, HIGH);
delay(atraso);
for(int i = 1; i <= 2*N; i++)
{
digitalWrite(PinLED, LOW);
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempof = micros();
digitalWrite(PinLED, HIGH);
if(i == 2)
{
Serial.print(i/2);
Serial.println(" oscilação");
}
else if (i % 2 == 0) //Divide i por 2 e devolve o resto. Se o resto for 0, então i é par.
{
Serial.print(i/2);
Serial.println(" oscilações");
}
delay(atraso);
}
periodo = (tempof - tempoi)/(N*1000.0);
Serial.print("Período = ");
Serial.print(periodo);
Serial.println(" ms");
}
/*
Projeto 49 - Sensor de efeito Hall digital (Medição das Rotações Por Minuto de um disco)
Mede o intervalo de tempo que o disco demora a executar N voltas e calcula as RPM.
Depois de se pressionar o botão, o Arduino inicia a contagem do tempo quando o íman passa junto do sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#define PinSensor 7
#define PinBTN 8
#define PinLED 9
#define N 2 //Número de voltas
int estadoSensor;
int estadoBTN;
int atraso = 100; //Atraso para que o íman se afaste do sensor
unsigned long tempoi;
unsigned long tempof;
float periodo; //Período em ms
float RPM; //Rotações por minuto
void setup()
{
Serial.begin(9600);
pinMode(PinSensor, INPUT);
pinMode(PinBTN, INPUT_PULLUP);
pinMode(PinLED, OUTPUT);
Serial.println();
Serial.println("Pressione o botão iniciar");
}
void loop()
{
digitalWrite(PinLED, LOW);
estadoBTN = digitalRead(PinBTN);
while(estadoBTN == 1)
{
estadoBTN = digitalRead(PinBTN);
}
Serial.println("A medir...");
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempoi = micros();
Serial.println("Início da contagem do tempo");
digitalWrite(PinLED, HIGH);
delay(atraso);
for(int i = 1; i <= N; i++)
{
digitalWrite(PinLED, LOW);
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempof = micros();
digitalWrite(PinLED, HIGH);
if(i == 1)
{
Serial.print(i);
Serial.println(" volta");
}
else
{
Serial.print(i);
Serial.println(" voltas");
}
delay(atraso);
}
periodo = (tempof - tempoi)/(N*1000.0);
RPM = 60000.0/periodo;
Serial.print(RPM);
Serial.println(" RPM");
}
/*
Projeto 49 - Sensor de efeito Hall digital com LCD (Medição do período de rotação de um disco)
Mede o intervalo de tempo que o disco demora a executar N voltas e calcula o período.
Depois de se pressionar o botão, o Arduino inicia a contagem do tempo quando o íman passa junto do sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //0x27 ou 0x3F
#define PinSensor 7
#define PinBTN 8
#define PinLED 9
#define N 5 //Número de voltas
int estadoSensor;
int estadoBTN;
int atraso = 100; //Atraso para que o íman se afaste do sensor
unsigned long tempoi;
unsigned long tempof;
float periodo; //Período em ms
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pressione o");
lcd.setCursor(0,1);
lcd.print("botao iniciar");
pinMode(PinSensor, INPUT);
pinMode(PinBTN, INPUT_PULLUP);
pinMode(PinLED, OUTPUT);
}
void loop()
{
digitalWrite(PinLED, LOW);
estadoBTN = digitalRead(PinBTN);
while(estadoBTN == 1)
{
estadoBTN = digitalRead(PinBTN);
}
Serial.println("A medir...");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A medir...");
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempoi = micros();
digitalWrite(PinLED, HIGH);
delay(atraso);
for(int i = 1; i <= N; i++)
{
digitalWrite(PinLED, LOW);
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempof = micros();
digitalWrite(PinLED, HIGH);
if(i == 1)
{
Serial.print(i);
Serial.println(" volta");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(i);
lcd.print(" volta");
}
else
{
Serial.print(i);
Serial.println(" voltas");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(i);
lcd.print(" voltas");
}
delay(atraso);
}
periodo = (tempof - tempoi)/(N*1000.0);
Serial.print("Período = ");
Serial.print(periodo);
Serial.println(" ms");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Periodo");
lcd.setCursor(0,1);
lcd.print(periodo);
lcd.print(" ms");
}
/*
Projeto 49 - Sensor de efeito Hall digital com LCD (Medição do período de um pêndulo gravítico)
Mede o intervalo de tempo que o disco demora a executar N voltas e calcula o período.
Depois de se pressionar o botão, o Arduino inicia a contagem do tempo quando o íman passa junto do sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //0x27 ou 0x3F
#define PinSensor 7
#define PinBTN 8
#define PinLED 9
#define N 3 //Número de oscilações
int estadoSensor;
int estadoBTN;
int atraso = 100; //Atraso para que o íman se afaste do sensor
unsigned long tempoi;
unsigned long tempof;
float periodo; //Período em ms
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pressione o");
lcd.setCursor(0,1);
lcd.print("botao iniciar");
pinMode(PinSensor, INPUT);
pinMode(PinBTN, INPUT_PULLUP);
pinMode(PinLED, OUTPUT);
}
void loop()
{
digitalWrite(PinLED, LOW);
estadoBTN = digitalRead(PinBTN);
while(estadoBTN == 1)
{
estadoBTN = digitalRead(PinBTN);
}
Serial.println("A medir");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A medir...");
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempoi = micros();
digitalWrite(PinLED, HIGH);
delay(atraso);
for(int i = 1; i <= 2*N; i++)
{
digitalWrite(PinLED, LOW);
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempof = micros();
digitalWrite(PinLED, HIGH);
if(i == 2)
{
Serial.print(i/2);
Serial.println(" oscilação");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(i/2);
lcd.print(" oscilacao");
}
else if (i % 2 == 0) //Divide i por 2 e devolve o resto. Se o resto for 0, então i é par.
{
Serial.print(i/2);
Serial.println(" oscilações");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(i/2);
lcd.print(" oscilacoes");
}
delay(atraso);
}
periodo = (tempof - tempoi)/(N*1000.0);
Serial.print("Período = ");
Serial.println(periodo);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Periodo");
lcd.setCursor(0,1);
lcd.print(periodo);
lcd.print(" ms");
}
/*
Projeto 49 - Sensor de efeito Hall digital com LCD (Medição das Rotações Por Minuto de um disco)
Mede o intervalo de tempo que o disco demora a executar N voltas e calcula as RPM.
Depois de se pressionar o botão, o Arduino inicia a contagem do tempo quando o íman passa junto do sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //0x27 ou 0x3F
#define PinSensor 7
#define PinBTN 8
#define PinLED 9
#define N 2 //Número de voltas
int estadoSensor;
int estadoBTN;
int atraso = 100; //Atraso para que o íman se afaste do sensor
unsigned long tempoi;
unsigned long tempof;
float periodo; //Período em ms
float RPM; //Rotações por minuto
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pressione o");
lcd.setCursor(0,1);
lcd.print("botao iniciar");
pinMode(PinSensor, INPUT);
pinMode(PinBTN, INPUT_PULLUP);
pinMode(PinLED, OUTPUT);
}
void loop()
{
digitalWrite(PinLED, LOW);
estadoBTN = digitalRead(PinBTN);
while(estadoBTN == 1)
{
estadoBTN = digitalRead(PinBTN);
}
Serial.println("A medir...");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A medir...");
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempoi = micros();
digitalWrite(PinLED, HIGH);
delay(atraso);
for(int i = 1; i <= N; i++)
{
digitalWrite(PinLED, LOW);
estadoSensor = digitalRead(PinSensor);
while(estadoSensor == 1)
{
estadoSensor = digitalRead(PinSensor);
}
tempof = micros();
digitalWrite(PinLED, HIGH);
if(i == 1)
{
Serial.print(i);
Serial.println(" volta");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(i);
lcd.print(" volta");
}
else
{
Serial.print(i);
Serial.println(" voltas");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(i);
lcd.print(" voltas");
}
delay(atraso);
}
periodo = (tempof - tempoi)/(N*1000.0);
RPM = 60000.0/periodo;
Serial.print(RPM);
Serial.println(" RPM");
lcd.clear();
lcd.setCursor(0,0);
lcd.print(RPM);
lcd.print(" RPM");
}