9 de dezembro de 2017

Sensor de Terremoto

Quando um movimento é detectado, o circuito aciona as luzes.


O sensor utilizado para identificar os movimentos é uma chave de mercúrio. Um pequeno vidro com dois terminais dentro, com uma gota de mercúrio. Quando o mercúrio se movimenta, fecha ou abre o contato nos terminais internos.
O microcontrolador é o Attiny85 rodando Arduino, e a alimentação é a bateria CR2032 de 3v.

Um circuito simples, pequeno e muito barato, que pode servir de base para um sistema que aciona luzes de emergência, sirenes, etc.

Segue  esquema elétrico e o código fonte:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*---------------------------------------------------------
  Programa : SENSOR DE TERREMOTO
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 09/12/2017
  ---------------------------------------------------------*/
#define LED_ALARM_R 0
#define LED_ALARM_Y 1
#define SENSOR 3

//Variável indicativa do estado do sensor
int previousSensor;

void setup() {
  //Configura os pinos dos leds como saída
  pinMode(LED_ALARM_R, OUTPUT);
  pinMode(LED_ALARM_Y, OUTPUT);

  //Configura o pino do sensor como entrada com pull-up interno
  pinMode(SENSOR, INPUT_PULLUP);

  //Seta a variável como o estado inicial do sensor
  previousSensor = digitalRead(SENSOR);
}

void loop() {
  //Variável recebe o valor atual do sensor
  int currentSensor = digitalRead(SENSOR);

  //Aciona o alarme caso o estado atual do sensor seja diferente do estado anterior
  if (currentSensor != previousSensor) {
    previousSensor = currentSensor;
    Alarm();
  }
}

void Alarm() {
  for (int i = 0; i < 20; i++) {
    for (int i = 0; i < 3; i++) {
      digitalWrite(LED_ALARM_R, HIGH);
      delay(50);
      digitalWrite(LED_ALARM_R, LOW);
      delay(50);
    }
    for (int i = 0; i < 3; i++) {
      digitalWrite(LED_ALARM_Y, HIGH);
      delay(50);
      digitalWrite(LED_ALARM_Y, LOW);
      delay(50);
    }
  }
}

Nenhum comentário:

Postar um comentário