Está en la página 1de 2

Cristian Alexander Vega Camacho IOT 1

Librerías lógicas Difusa para Arduino


Cristian Alexander Vega Camacho, alexandervega1948@gmail.com

• isMember: verdadero o falso y sin dado un


valor el elemento es miembro de un conjunto
Resumen – FuzzyControl para Arduino, esta es una librería de
difuso
estructura de datos para la construcción de conjuntos difusos y la
aplicación de control difuso en placas de desarrollo como Arduino • isMemberOr: Igual que el anterior pero
aplicando operaciones lógica AND entre
Abstract – FuzzyControl for Arduino, this is a data structure varios conjuntos
library for building fuzzy sets and applying fuzzy control on • isMemberAnd: Igual que el anterior pero
development boards like Arduino
aplicando operaciones lógica OR entre
varios conjuntos
Índice de Términos – Lógica difusa, Arduino, Funciones, • weightedAverage: Defusifica utilizando el
defuzificacion. método de weighted average

I. INTRODUCCION USO DE LA LIBRERIA

Declaración de variables y definición de conjuntos


. FuzzyControl Librería: La librería está programada
difusos
utilizando registros y operaciones sobre esas
estructuras de datos. La librería perfectamente fuzzyDef miConjunto;
podría programarse utilizando objetos, pero fue
construida de esta manera para enseñanza. Un Luego en el void setup
registro es una colección de campos, y en C se
construyen con struct. Se utilizó struct pues la void setup(){
estructura de conjuntos no pretende implementar miConjunto.membership =
métodos y herencia como tal, es decir, struct es útil &increasing;
para objectos pequeños públicos pasivos que no miConjunto.mina = 0.5;
tienen herencia, como un contenedor de datos. Se miConjunto.maxa = 1.5;
utiliza un puntero a función para asociar una función }
de membresía a cada estructura de conjunto difuso.
miConjunto.membership define la función de
1.1 ESTRUCTURA DE DATOS membresía del conjunto, luego se definen los
intervalos donde la función se construye.
• FuzzyDef para definir conjuntos difusos con
su respectiva función de membresía. Las funciones de membresía se pueden construir
• fuzyDomain para encapsular todo el dominio con el enunciado de función
de conjuntos difusos para el dominio de
discurso float miFuncion(fuzzyDef fset,
Funciones: float x){}
• setDomain: permite construir un domino
completo de conjuntos difusos usando En la función se utiliza fset.mina, fset.maxa,
funciones monotonicas de triángulo fset.minb, para definir los intervalos de validez de la
• resetDomain: resetea los valores de función.
membresía a 0
• truthDegree: Calcula los valores de float increasing(fuzzyDef fset,
membresía de todo el dominio, y lo almacena float x) {
en el campo miu de cada conjunto if (x < fset.mina)return 0;
if (x > fset.maxa)return 1;
Cristian Alexander Vega Camacho IOT 2

return (x - fset.mina) / light.fset = new fuzzyDef[3];


(fset.maxa - fset.mina);
} //creates a standard domain with
nset=3 fuzzy sets
Luego se asocia a un conjunto difuso
setDomain(&light, 1023);
miConjunto.membersdip =
&miFuncion;
pinMode(A0, INPUT);
Construcción de reglas de interferencia
}
Las reglas de interferencia se construyen de la
siguiente manera
void loop() {
if(isMember($miConjunto)){ // put your main code here, to run
setMiu(&outConjunto, miConjunto.miu); repeatedly:
}
int val = analogRead(A0);
De esa manera se construyen las reglas de
truthDegree(&light, val);
inferencia. Hay más funciones para facilitar la
escritura como isMemberAnd y isMemberOr, pero
int red = round(255 *
esa es la estructura básica.
light.fset[0].miu);
int green = round(255 *
Defuzificacion. light.fset[1].miu);
int blue = round(255 *
Solo existe una función para defuzificacion
light.fset[2].miu);
float val =
weightedAverage(&outDominio); pixels.setPixelColor(0,
pixels.Color(green, red,blue));
Ejemplo: pixels.show();

}
#include <Adafruit_NeoPixel.h>
#include <FuzzyControl.h>
Adafruit_NeoPixel pixels = REFERENCIAS
Adafruit_NeoPixel(1, 9, NEO_GRB +
NEO_KHZ800); https://github.com/tomasdecamino/FuzzyControl/blob/master/e
xamples/Fuzzy_Neopixel/Fuzzy_Neopixel.ino

fuzzyDomain light;

void setup() {

Serial.begin(9600);
pixels.begin();
pixels.show();

light.nset = 3;

También podría gustarte