Components and supplies
2
Ultrasonic Sensor - HC-SR04 (Generic)
1
Female/Female Jumper Wires
1
Arduino UNO
1
Buzzer
1
5 mm LED: Yellow
1
5 mm LED: Green
1
5 mm LED: Red
1
Jumper wires (generic)
1
Relay Module (Generic)
Tools and machines
1
Tape, Electrical
Project description
Code
Projeto Fogão com Máquinas de Estado
arduino
1// Projeto Fogao Seguro 2// Aluno: Raphael da Cunha Marinho Jório dos Santos - Nº 59604 3//Docente responsvel: Antonio Silva 4//Projeto da disciplina de Microprocessadores 5//Este projeto tem o obejetivo de levar mais segurana ao usar um fogo eltrico. Sempre que o fogo estiver ligado e sem presena por mais de T segundos programado, 6//o fogo desliga e avisa para a pessoa por forma visual (leds) e por forma sonra (buzzer) que deve-se desligar o comando central para maior segurana. 7 8 9 10const int pingPin = 11; 11const int pingPin1 = 8; 12#define rele 10 13#define ledPin1 4 14#define ledPin2 5 15#define ledPin3 3 16#define buzzer 7 17 18 19 bool estadoSensor; 20 float tempo; 21 float acTempo; 22 int T; 23 24 25void setup() { 26 27 Serial.begin(9600); 28 pinMode(rele, OUTPUT); 29 pinMode ( ledPin1 , OUTPUT ); 30 pinMode ( ledPin2 , OUTPUT ); 31 pinMode ( ledPin3 , OUTPUT ); 32 pinMode(buzzer, OUTPUT); 33 acTempo = millis(); 34 tempo = 0; 35 T = 10000; 36 37 38} 39 40void loop() { 41 42 43 44long distancia, distancia1; 45 46 47 // The PING))) is triggered by a HIGH pulse of 2 or more microseconds. 48 // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: 49 50 51 pinMode(pingPin, OUTPUT); 52 digitalWrite(pingPin, LOW); 53 delayMicroseconds(2); 54 digitalWrite(pingPin, HIGH); 55 delayMicroseconds(5); 56 digitalWrite(pingPin, LOW); 57 58 pinMode(pingPin, INPUT); 59 distancia = pulseIn(pingPin, HIGH); 60 61 62 pinMode(pingPin1, OUTPUT); 63 digitalWrite(pingPin1, LOW); 64 delayMicroseconds(2); 65 digitalWrite(pingPin1, HIGH); 66 delayMicroseconds(5); 67 digitalWrite(pingPin1, LOW); 68 69 pinMode(pingPin1, INPUT); 70 distancia1 = pulseIn(pingPin1, HIGH); 71 72 73// faz com que o actempo seja igual a funo millis quando o tempo for menor que millis 74 if ( tempo < millis()){ 75 acTempo = millis(); 76 } 77 78 Serial.print(distancia); 79 Serial.print("-"); 80 81 Serial.print(distancia1); 82 Serial.print("-"); 83 84 85bool estadoFogao = estadoSistema(distancia, distancia1);//chama a funo estadoSistema 86bool fogao = estadoSensor_fsm ( T, acTempo);//chama a funo estadoSensor_fsm 87 88 89} 90 91// mquina de estado para definir se os estados dos sensores (estadoSensor) 92//juntos sero 0 ou 1 de acordo com os parmetros de distncia. 93bool estadoSistema (float distancia, float distancia1){ 94 static short int state; 95 //Serial.println(state); 96 97switch(state){ 98 case 0: 99 100 if (distancia >= 1000 || distancia1 >= 1000 ){ 101 state = 1; 102 estadoSensor = 0; 103 } 104 break; 105 106 case 1: 107 108 if (distancia < 1000 && distancia1 < 1000 ){ 109 state = 0; 110 estadoSensor = 1; 111 112 } 113 break; 114 } 115} 116 117// mquina de estado que tem funo de fazer com que o sistema esteja ligado ou desligado 118//de acordo com o parametro estadoSensor vindo da mquina de estado anterior. 119bool estadoSensor_fsm (float T, float acTempo){ 120 static short int state; 121 static float tempo; 122 //Serial.println(state); 123switch(state){ 124 case 0: 125//neste caso, o sistema est ligado 126 if(estadoSensor == 0){state =1;} 127 128 Serial.println("detectado"); 129 digitalWrite (rele, HIGH); 130 digitalWrite (ledPin1, LOW); 131 digitalWrite (ledPin2, HIGH); 132 digitalWrite (ledPin3, LOW); 133 noTone(buzzer); 134 tempo = acTempo; //atualizao do tempo 135 break; 136 137 case 1: 138//neste caso o sistema ainda est ligado. 139 if (tempo + T<= acTempo){state = 2;} // caso o sistema continue no estado 1 por mais de T segundos, ele vai para o estado 2. 140 if(estadoSensor == 1){state = 0;} //Porm caso o estadorSensor v a 1 o sistema volta para o estado 0. 141 142 Serial.println("detectado+++"); 143 digitalWrite (rele, HIGH); 144 digitalWrite (ledPin1, HIGH); 145 digitalWrite (ledPin2, LOW); 146 digitalWrite (ledPin3, LOW); 147 noTone(buzzer); 148 break; 149 150 151 case 2: 152 //neste caso o sistema est desligado, e s sai de seu estado quando o estadoSensor for para 1, fazendo com que v para o estado 0. 153 if(estadoSensor == 1){state = 0;} 154 155 Serial.println("No detectado"); 156 digitalWrite (rele, LOW); 157 digitalWrite (ledPin1, LOW); 158 digitalWrite (ledPin2, LOW); 159 digitalWrite (ledPin3, HIGH); 160 tone(buzzer, 1600); 161 break; 162 163} 164} 165
Comments
Only logged in users can leave comments