Alarm with PIR Sensor

Fork of Alarme_Sensor_PIR by Alison Michel Fernandes

Committer:
Alison86
Date:
Tue Jul 03 18:48:53 2018 +0000
Revision:
73:90675a74cbb1
Parent:
65:42b55175c696
Alarm pir

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:2757d7abb7d9 1 #include "mbed.h"
Alison86 65:42b55175c696 2 #include "beep.h"
Alison86 65:42b55175c696 3 #include "EthernetInterface.h"
Alison86 65:42b55175c696 4 #include "rtos.h"
Alison86 65:42b55175c696 5 #include "SDFileSystem.h"
Alison86 65:42b55175c696 6
Alison86 65:42b55175c696 7 InterruptIn movimento(D2);
Alison86 65:42b55175c696 8 Serial pc(USBTX, USBRX); // tx, rx
Alison86 65:42b55175c696 9 Beep buzzer(D5);
Alison86 65:42b55175c696 10 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
Alison86 65:42b55175c696 11
Alison86 65:42b55175c696 12 DigitalIn buttonStopLog(SW2);
Alison86 65:42b55175c696 13 DigitalOut led0(LED_RED);
Alison86 65:42b55175c696 14 DigitalOut led1(LED_GREEN);
Alison86 65:42b55175c696 15 DigitalOut rgb_red(D7);
Alison86 65:42b55175c696 16 DigitalOut rgb_green(D8);
Jonathan Austin 0:2757d7abb7d9 17
Alison86 65:42b55175c696 18 Mutex PIR;
Alison86 65:42b55175c696 19 Timer timer;
Alison86 65:42b55175c696 20 EthernetInterface eth;
Alison86 65:42b55175c696 21 Mutex ETH_IN;
Alison86 65:42b55175c696 22
Alison86 65:42b55175c696 23 unsigned int move_detected = 0;
Alison86 65:42b55175c696 24
Alison86 65:42b55175c696 25 unsigned int alarme = 0;
Alison86 65:42b55175c696 26
Alison86 65:42b55175c696 27 const char* ECHO_SERVER_ADDRESS = "10.3.2.6";//"192.168.15.5";
Alison86 65:42b55175c696 28
Alison86 65:42b55175c696 29 const int ECHO_SERVER_PORT = 23;
Alison86 65:42b55175c696 30
Alison86 65:42b55175c696 31 void irq_handler(void)
Alison86 65:42b55175c696 32 {
Alison86 65:42b55175c696 33 move_detected = 1;
Alison86 65:42b55175c696 34 }
Alison86 65:42b55175c696 35
Alison86 65:42b55175c696 36 //Thread 1 - Leitura do sensor PIR
Alison86 65:42b55175c696 37 void Le_sensor()
Alison86 65:42b55175c696 38 {
Alison86 65:42b55175c696 39 wait(1);
Alison86 65:42b55175c696 40 movimento.rise(&irq_handler);
Jonathan Austin 0:2757d7abb7d9 41
Alison86 65:42b55175c696 42 while(1)
Alison86 65:42b55175c696 43 {
Alison86 65:42b55175c696 44 timer.start();
Alison86 65:42b55175c696 45 if(timer.read()>=60){
Alison86 65:42b55175c696 46 timer.reset();
Alison86 65:42b55175c696 47 alarme=0;
Alison86 65:42b55175c696 48 }
Alison86 65:42b55175c696 49
Alison86 65:42b55175c696 50 if(move_detected)
Alison86 65:42b55175c696 51 {
Alison86 65:42b55175c696 52 PIR.lock();
Alison86 65:42b55175c696 53 alarme++;
Alison86 65:42b55175c696 54 move_detected = 0;
Alison86 65:42b55175c696 55 pc.printf("Alarme disparou %d vezes\n", alarme);
Alison86 65:42b55175c696 56 PIR.unlock();
Alison86 65:42b55175c696 57 }
Alison86 65:42b55175c696 58
Alison86 65:42b55175c696 59 Thread::wait(300);
Jonathan Austin 0:2757d7abb7d9 60 }
Alison86 65:42b55175c696 61
Alison86 65:42b55175c696 62 }
Alison86 65:42b55175c696 63
Alison86 65:42b55175c696 64 //Thread 2 - Acionamento do atuador
Alison86 65:42b55175c696 65 void Aciona_buzzer()
Alison86 65:42b55175c696 66 {
Alison86 65:42b55175c696 67 while(1)
Alison86 65:42b55175c696 68 {
Alison86 65:42b55175c696 69 if(movimento.read()==1 && move_detected == 1)
Alison86 65:42b55175c696 70 {
Alison86 65:42b55175c696 71 rgb_red = 0;
Alison86 65:42b55175c696 72 rgb_green = 1;
Alison86 65:42b55175c696 73 buzzer.beep(1000,0.5); //Aumentar frequencia e tempo de duração
Alison86 65:42b55175c696 74 }
Alison86 65:42b55175c696 75 else
Alison86 65:42b55175c696 76 {
Alison86 65:42b55175c696 77 rgb_red = 1;
Alison86 65:42b55175c696 78 rgb_green = 0;
Alison86 65:42b55175c696 79 }
Alison86 65:42b55175c696 80
Alison86 65:42b55175c696 81 }
Alison86 65:42b55175c696 82
Jonathan Austin 0:2757d7abb7d9 83 }
Jonathan Austin 1:846c97078558 84
Alison86 65:42b55175c696 85 //Thread 3 - Gravação de informações no cartão SD
Alison86 65:42b55175c696 86 void Armazena_cartao()
Alison86 65:42b55175c696 87 {
Alison86 65:42b55175c696 88
Alison86 65:42b55175c696 89 mkdir("/sd/mydir", 0777);
Alison86 65:42b55175c696 90 FILE *fp = fopen("/sd/mydir/log.txt", "w");
Alison86 65:42b55175c696 91 fprintf(fp, "Alarme");
Alison86 65:42b55175c696 92 fprintf(fp, "\t");
Alison86 65:42b55175c696 93 fprintf(fp, "Tempo");
Alison86 65:42b55175c696 94 fprintf(fp, "\r\n");
Alison86 65:42b55175c696 95
Alison86 65:42b55175c696 96 while(1)
Alison86 65:42b55175c696 97 {
Alison86 65:42b55175c696 98 if(buttonStopLog.read()==0)
Alison86 65:42b55175c696 99 break;
Alison86 65:42b55175c696 100 PIR.lock();
Alison86 65:42b55175c696 101 fprintf(fp, "%d", alarme);
Alison86 65:42b55175c696 102 fprintf(fp, "\t");
Alison86 65:42b55175c696 103 fprintf(fp, "%.f", timer.read());
Alison86 65:42b55175c696 104 fprintf(fp, "\r\n");
Alison86 65:42b55175c696 105 PIR.unlock();
Alison86 65:42b55175c696 106 Thread::wait(50);
Alison86 65:42b55175c696 107 }
Alison86 65:42b55175c696 108 fclose(fp);
Alison86 65:42b55175c696 109 led0 = 1;
Alison86 65:42b55175c696 110 led1 = 0;
Alison86 65:42b55175c696 111 }
Alison86 65:42b55175c696 112
Alison86 65:42b55175c696 113 //Thread 4 - Protocolo de comunicações TCP/IP
Alison86 65:42b55175c696 114 void Ethernet_Interface()
Alison86 65:42b55175c696 115 {
Alison86 65:42b55175c696 116
Alison86 65:42b55175c696 117 eth.init();
Alison86 65:42b55175c696 118 eth.connect();
Alison86 65:42b55175c696 119 printf("\nClient IP Address is %s\n", eth.getIPAddress());
Alison86 65:42b55175c696 120
Alison86 65:42b55175c696 121 // Connect to Server
Alison86 65:42b55175c696 122 TCPSocketConnection socket;
Alison86 65:42b55175c696 123 while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
Alison86 65:42b55175c696 124 printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
Alison86 65:42b55175c696 125 Thread::wait(500);
Alison86 65:42b55175c696 126 }
Alison86 65:42b55175c696 127 printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS);
Alison86 65:42b55175c696 128
Alison86 65:42b55175c696 129 // Send message to server
Alison86 65:42b55175c696 130 char buffer[1000] = "";
Alison86 65:42b55175c696 131
Alison86 65:42b55175c696 132 while(socket.is_connected())
Alison86 65:42b55175c696 133 {
Alison86 65:42b55175c696 134 ETH_IN.lock();
Alison86 65:42b55175c696 135 snprintf(buffer, 1000, "Alarm: %d Tempo: %.f \n", alarme, timer.read());
Alison86 65:42b55175c696 136 socket.send_all(buffer, sizeof(buffer));
Alison86 65:42b55175c696 137 printf("\nAlarme: %d \n\r", alarme);
Alison86 65:42b55175c696 138 printf("Tempo: %.f\n\r", timer.read());
Alison86 65:42b55175c696 139 ETH_IN.unlock();
Alison86 65:42b55175c696 140 Thread::wait(100);
Alison86 65:42b55175c696 141 }
Alison86 65:42b55175c696 142
Alison86 65:42b55175c696 143 // Clean up
Alison86 65:42b55175c696 144 socket.close();
Alison86 65:42b55175c696 145
Alison86 65:42b55175c696 146
Alison86 65:42b55175c696 147
Alison86 65:42b55175c696 148 }
Alison86 65:42b55175c696 149 //Função Principal
Alison86 65:42b55175c696 150 int main(void)
Alison86 65:42b55175c696 151 {
Alison86 65:42b55175c696 152 led1 = 1;
Alison86 65:42b55175c696 153 led0 = 0;
Alison86 65:42b55175c696 154 rgb_red = 1;
Alison86 65:42b55175c696 155 rgb_green=0;
Alison86 65:42b55175c696 156
Alison86 65:42b55175c696 157 Thread SensorPIR;
Alison86 65:42b55175c696 158 Thread Atuador_Buzzer;
Alison86 65:42b55175c696 159 Thread Cartao_SD;
Alison86 65:42b55175c696 160 Thread Ethernet;
Alison86 65:42b55175c696 161
Alison86 65:42b55175c696 162 SensorPIR.start(Le_sensor); //Utilizar callback na chamada SensorPIR.start(callback(Le_sensor))
Alison86 65:42b55175c696 163 Atuador_Buzzer.start(Aciona_buzzer);
Alison86 65:42b55175c696 164 Cartao_SD.start(Armazena_cartao);
Alison86 65:42b55175c696 165 Ethernet.start(Ethernet_Interface);
Alison86 65:42b55175c696 166
Alison86 65:42b55175c696 167 while(1){
Alison86 65:42b55175c696 168 }
Alison86 65:42b55175c696 169 }