Descarga la aplicación para disfrutar aún más
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; }
Compartir