Logo Studenta

Red_neuronal_arduino_or_exclusiva

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

/* Sketch de red neuronal capaz de simular compuerta logica OR-exclusiva
Sera una compuerta logica de dos entradas, y una salida
tabla de verdad
A	 B	 X
____________________
0	 0	 0
____________________
0	 1 	1
____________________
1	 0	 1
____________________
1 	1	 0
____________________
para la entrada usaremos dos putch button y dos leds para indicar el estado de la entrada 1 encendido / 0 apagado
y para la salida usare solo un led*
Estructura de la red neuronal: una capa oculta de //dos neuronas interconectadas//funcion de activacion sigmoide// 2 entradas y una salida/*/
//Variables de entrada 
//para leer botones 
int A=3;
int B=4;
//ya que la red neuronal requiere que las entradas sean 1 o -1, entonces al estar en 0 el boton la variable x estara en -1
int x1=0;
int x2=0;
//salidas
int y=0; //respuesta calculada
int Salida=11; //Visualizar salida
int a0=10; //viisualizar entradas
int b0=12;
//Ingrsamos Funcion de activacion 
float sigmoide;
//Ingresamos pesos de la red
double w11=-2.69;
double w12=-3.39;
double w21=-2.80;
double w22=-4.59;
double w01=-2.21;
double w02=4.76;
double v1=-4.91;
double v2=4.95;
double v0=-2.28;
//ya por ultimo ingreso variables para almacenar todos los pesos de cada una de las redes asi sera mas facil emplear la funcion de activacion solicitada
double neu1=0;
double neu2=0;
double neu3=0;
void setup() 
{
 //Declaramos las entradas
pinMode(A,INPUT);
pinMode(B,INPUT);
 //Declaramos las salidas
pinMode(Salida,OUTPUT);
pinMode(a0,OUTPUT);
pinMode(b0,OUTPUT);
 //velocidad de puerto serial
Serial.begin(9600);
}
void loop() 
{
 {
 if(digitalRead(A)==HIGH)
 {
 x1=1;
 digitalWrite(a0,HIGH);
 //Serial.println("A------>1");
 }
 else if(digitalRead(A)==LOW)
 {
 x1=-1;
 digitalWrite(a0,LOW);
 //Serial.println("A------>0");
 }
 else{}
 }
 if(digitalRead(B)==HIGH)
 {
 x2=1;
 digitalWrite(b0,HIGH);
 // Serial.println("B------>1");
 }
 else if(digitalRead(B)==LOW)
 {
 x2=-1;
 digitalWrite(b0,LOW);
 //Serial.println("B------>0");
 }
 else{}
 neu1=(w01+(w11*x1)+(x2*w21));
 neu2=(w02+(x1*w12)+(x2*w22));
 neu1=1/(1+exp(-neu1));
 neu2=1/(1+exp(-neu2));
 neu1=v1*neu1;
 neu2=v2*neu2;
 neu3=neu1+neu2+v0;
 y=1/(1-exp(-neu3));
 Serial.println(y);
 //Colocaremos un Umbral
 if(y<=0.5)
 {
 digitalWrite(Salida,LOW);
 Serial.println("X------>0");
 } 
 else if(y>0.5)
 {
 digitalWrite(Salida,HIGH);
 Serial.println("X------>1");
 }
 else{}
 //delay(500);
 neu1=0;
 neu2=0;
 neu3=0;
}

Continuar navegando