Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRACTICA #4:
MATRÍCULA: 1832141
Tabla de datos
Temperatura (°C) Luz (%) Distancia (cm) Condición para vacunación contra Covid
37 96 280 4
1 46 50 1
39 15 210 2
14 14 200 3
27 97 160 5
24 78 80 3
-9 5 270 2
-7 39 20 1
35 45 450 3
39 35 70 2
14 35 330 4
38 98 240 5
-8 11 230 2
46 80 20 1
43 50 130 1
-9 89 260 3
46 83 220 3
37 37 390 2
12 100 240 5
38 37 0 1
37 83 30 2
-3 17 60 1
20 82 120 4
34 35 130 3
29 54 190 4
33 82 320 5
6 81 450 4
33 85 230 4
36 63 120 3
-1 98 390 3
26 44 320 3
-1 94 80 2
2 72 90 2
-8 84 40 2
-7 48 110 1
34 25 360 3
-7 36 160 2
13 51 100 3
2 63 140 4
26 62 80 4
50 56 110 2
-3 26 0 1
-10 8 380 1
13 59 120 3
42 73 90 2
-9 95 150 4
6 24 280 2
23 79 40 3
2 55 230 3
42 39 10 1
-5 99 300 3
19 97 430 5
49 64 430 2
22 80 10 2
-8 72 260 4
45 90 50 2
-8 83 250 4
35 33 370 2
30 41 220 3
27 1 220 3
46 57 20 2
-5 82 410 4
42 18 30 1
22 7 200 3
8 41 270 3
22 34 110 2
-5 97 440 4
31 84 110 4
29 52 80 3
20 31 400 3
49 13 80 1
3 90 100 3
27 29 420 3
5 14 220 2
21 90 410 5
17 27 450 3
42 42 30 2
-9 75 260 2
14 87 90 3
5 2 100 1
38 85 60 3
21 2 330 3
43 78 180 4
11 90 170 5
25 7 410 3
14 85 90 4
25 76 320 5
44 75 0 1
-7 87 10 1
-9 89 90 2
27 15 10 1
13 12 10 1
22 95 250 5
32 60 110 4
3 14 330 2
44 23 180 2
30 4 30 1
25 55 410 5
13 6 60 1
-3 98 10 2
Arquitectura de la red neuronal utilizada y parámetros de
entrenamiento
Arquitectura
Datos de entrenamiento
Pesos
o= {-3.515552399752711,
-9.522862930667985,
-15.463516632968291,
0.9814077387658282,
-6.81912397321553,
8.09297180978903,
1.722585442091482};
m= {{-0.5730995520693748,
-3.1654220795065386,
-1.7075956896551787,
2.2197258487308678},
{14.740422252062558,
-8.288258044454496,
-2.7001326835853576,
-8.213349161992717},
{-8.925932378903589,
-11.30949618792544,
-15.477690781583822,
11.98711813530532},
{-3.3233904649274626,
-1.2657227343123119,
-2.043213774233675,
-1.2150898998219775},
{-10.49693645073214,
4.742488514398998,
0.690299388127907,
-4.904156132986425},
{-7.160306565258374,
-12.88036971120068,
-8.532787470117055,
12.31215555862011},
{1.0519543845662855,
0.8960074111511478,
0.49406694638849546,
-1.271220742437876}};
Componentes utilizados
Componente Imagen
Sensor ultrasónico
Servomotor
Led RGB
Buzzer
ESP32
Protoborad
Resistencias
Circuito armado
Resultado del entrenamiento (graficas de error)
Casos con respuestas altas y bajas
Ahora vemos que las personas están a 27cm de distancia unas con otras, la
iluminación es de 37% y hay 16 grados, esta condición es muy mala para esperar
la vacuna. El LED pasó de verde a rojo, el servo paso de 0° a 180° y el buzzer
comenzó a emitir ruido.
Código fuente en Arduino IDE para ESP32
//Servo libreria
#include <Servo.h>
//Luz sensor
float weird;
int porcentaje = 0;
//temp sensor
int RawValue= 0;
float Voltage = 0;
float tempC = 0;
const int Trigger = 18; //Pin digital 2 para el Trigger del sensor
const int Echo = 19; //Pin digital 3 para el Echo del sensor
String LECTURA1;
String LECTURA2;
String LECTURA3;
String LECTURA4;
//Pesos
float o[7]= {-3.515552399752711,
-9.522862930667985,
-15.463516632968291,
0.9814077387658282,
-6.81912397321553,
8.09297180978903,
1.722585442091482};
float SENSOR1 = 0;
float SENSOR2 = 0;
float SENSOR3 = 0;
float YN = 0;
void setup() {
Serial.begin(115200);
delay(1000);
myservo.attach(13);
// Inicializar las variables de salida como salidas
pinMode(output33, OUTPUT);
digitalWrite(output33, LOW);
pinMode(output25, OUTPUT);
digitalWrite(output25, LOW);
pinMode(output26, OUTPUT);
digitalWrite(output26, LOW);
pinMode(output27, OUTPUT);
digitalWrite(output27, LOW);
void loop(){
//Luz //Sonido
weird = analogRead(pin34);
RawValue = analogRead(pin32);
porcentaje = weird/40.95;
Voltage = (RawValue / 2048.0) * 3300; // 5000 to get millivots.
tempC = Voltage * 0.1;
Serial.println(porcentaje);
Serial.println(tempC);
LECTURA1= String(tempC);
SENSOR1= tempC;
LECTURA2= String(porcentaje);
SENSOR2= porcentaje;
//Sensor ultrasónico
long t; //timepo que demora en llegar el eco
long d; //distancia en centimetros
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
Serial.print("Distancia: ");
Serial.print(d); //Enviamos serialmente el valor de la distancia
Serial.print("cm");
LECTURA3= String(d);
SENSOR3= d;
x[0] = SENSOR1;
x[1] = SENSOR2;
x[2] = SENSOR3;
//Ecuaciones de red
N[0] = fa(x[0] * m[0][0] + x[1] * m[0][1] + x[2] * m[0][2] + x[3] * m[0][3]);
N[1] = fa(x[0] * m[1][0] + x[1] * m[1][1] + x[2] * m[1][2] + x[3] * m[1][3]);
N[2] = fa(x[0] * m[2][0] + x[1] * m[2][1] + x[2] * m[2][2] + x[3] * m[2][3]);
N[3] = fa(x[0] * m[3][0] + x[1] * m[3][1] + x[2] * m[3][2] + x[3] * m[3][3]);
N[4] = fa(x[0] * m[4][0] + x[1] * m[4][1] + x[2] * m[4][2] + x[3] * m[4][3]);
N[5] = fa(x[0] * m[5][0] + x[1] * m[5][1] + x[2] * m[5][2] + x[3] * m[5][3]);
N[6] = fa(x[0] * m[6][0] + x[1] * m[6][1] + x[2] * m[6][2] + x[3] * m[6][3]);
//Ecuacion de salida
YN = fa(N[0] * o[0] + N[1] * o[1] + N[2] * o[2] + N[3] * o[3] + N[4] * o[4] + N[5] * o[5] + N[6]
* o[6]);
YN = desnormalizar(YN, Range[0][5], Range[4][0]);
LECTURA4 = String(YN);
else {
if (YN > 1 && YN <= 2) {
//MALA
digitalWrite(output25, HIGH);
digitalWrite(output26, LOW);
digitalWrite(output27, HIGH);
digitalWrite(output33, LOW); ///ENCENDER BUZZER
myservo.write(180);
}
else {
if (YN > 2 && YN <= 3) {
//REGULAR
digitalWrite(output25, LOW);
digitalWrite(output26, HIGH);
digitalWrite(output27, HIGH);
digitalWrite(output33, LOW); ///ENCENDER BUZZER
myservo.write(90);
}
else {
if (YN > 3 && YN <= 4) {
//BUENA
digitalWrite(output25, LOW);
digitalWrite(output26, LOW);
digitalWrite(output27, HIGH);
digitalWrite(output33, LOW); ///ENCENDER BUZZER
myservo.write(0);
}
else {
if (YN > 4 && YN <= 5) {
///MUY BUENA
digitalWrite(output25, LOW);
digitalWrite(output26, HIGH);
digitalWrite(output27, LOW);
digitalWrite(output33, LOW); ///ENCENDER BUZZER
myservo.write(0);
}
else {
digitalWrite(output25, LOW);
digitalWrite(output26, LOW);
digitalWrite(output27, LOW);
digitalWrite(output33, LOW); ///ENCENDER BUZZER
myservo.write(0);
}
}
}
}
}
client.println("<p>");
client.println("Iluminacion:");
client.println(LECTURA2);
client.println("% de luz");
client.println("<p>");
client.println("Temperatura:");
client.println(LECTURA1);
client.println("grados centigrados");
client.println("<p>");
client.println("<p>");
client.print("La condicion para vacunacion es: ");
client.print(LECTURA4);
client.println("<p>");
client.println("</body></html>");
//Funciones Auxiliares
float normalizar(float sensor, float minimo, float maximo) {
float normalizado;
normalizado = (sensor - minimo) / (maximo - minimo);
return normalizado;
}
float desnormalizar(float sensor, float minimo, float maximo) {
float desnormalizado;
desnormalizado = (sensor * (maximo - minimo)) + minimo;
return desnormalizado;
}
float fa(float z) {
float y;
y = 1 / (1 + exp(-1 * z));
return y;
}
https://youtu.be/V12IIoABygo