/********* Pleasedontcode.com ********** Pleasedontcode thanks you for automatic code generation! Enjoy your code! - Terms and Conditions: You have a non-exclusive, revocable, worldwide, royalty-free license for personal and commercial use. Attribution is optional; modifications are allowed, but you're responsible for code maintenance. We're not liable for any loss or damage. For full terms, please visit pleasedontcode.com/termsandconditions. - Project: "Fuzzy Control" - Source Code compiled for: Arduino Uno - Source Code created on: 2024-03-17 17:03:38 ********* Pleasedontcode.com **********/ /****** SYSTEM REQUIREMENTS *****/ /****** SYSTEM REQUIREMENT 1 *****/ /* Using fuzzy logic and the fuzzy library i have to */ /* write a specific code where i have an output led */ /* (pin 6) and input photorsistor (pin A0), and */ /* ultrasonic for the detection of motion (pin 2 for */ /* triger and 3 for echo) the fuzzy rule are Motion */ /* detecte */ /****** END SYSTEM REQUIREMENTS *****/ /****** DEFINITION OF LIBRARIES *****/ #include //https://github.com/ErickSimoes/Ultrasonic #include //https://github.com/zerokol/eFLL /****** FUNCTION PROTOTYPES *****/ void setup(void); void loop(void); void updateOutputs(void); /***** DEFINITION OF DIGITAL INPUT PINS *****/ const uint8_t ultrasonic_sensor_HC_SR04_Echo_PIN_D3 = 3; /***** DEFINITION OF ANALOG INPUT PINS *****/ const uint8_t Photoresistor_PIN_A0 = A0; /***** DEFINITION OF DIGITAL OUTPUT PINS *****/ const uint8_t LED_LEDRGB_Blue_PIN_D6 = 6; const uint8_t ultrasonic_sensor_HC_SR04_Trigger_PIN_D2 = 2; /***** DEFINITION OF OUTPUT RAW VARIABLES *****/ /***** used to store raw data *****/ bool LED_LEDRGB_Blue_PIN_D6_rawData = 0; bool ultrasonic_sensor_HC_SR04_Trigger_PIN_D2_rawData = 0; /***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/ /***** used to store data after characteristic curve transformation *****/ float LED_LEDRGB_Blue_PIN_D6_phyData = 0.0; float ultrasonic_sensor_HC_SR04_Trigger_PIN_D2_phyData = 0.0; /****** DEFINITION OF LIBRARIES CLASS INSTANCES *****/ Ultrasonic ultrasonic_sensor_HC_SR04(ultrasonic_sensor_HC_SR04_Trigger_PIN_D2, ultrasonic_sensor_HC_SR04_Echo_PIN_D3); /****** FUZZY *****/ Fuzzy *fuzzy = new Fuzzy(); // FuzzyInput FuzzySet *photoresistor_low = new FuzzySet(0, 0, 0, 100); FuzzySet *photoresistor_mid = new FuzzySet(0, 100, 100, 200); FuzzySet *photoresistor_high = new FuzzySet(100, 200, 1023, 1023); // FuzzyOutput FuzzySet *led_off = new FuzzySet(0, 0, 0, 0); FuzzySet *led_on = new FuzzySet(1, 1, 1, 1); void setup(void) { // put your setup code here, to run once: pinMode(ultrasonic_sensor_HC_SR04_Echo_PIN_D3, INPUT); pinMode(Photoresistor_PIN_A0, INPUT); pinMode(LED_LEDRGB_Blue_PIN_D6, OUTPUT); pinMode(ultrasonic_sensor_HC_SR04_Trigger_PIN_D2, OUTPUT); // Add FuzzyInput and FuzzyOutput objects to the fuzzy logic system FuzzyInput *photoresistor = new FuzzyInput(1); photoresistor->addFuzzySet(photoresistor_low); photoresistor->addFuzzySet(photoresistor_mid); photoresistor->addFuzzySet(photoresistor_high); fuzzy->addFuzzyInput(photoresistor); FuzzyOutput *ledState = new FuzzyOutput(1); ledState->addFuzzySet(led_off); ledState->addFuzzySet(led_on); fuzzy->addFuzzyOutput(ledState); // Define fuzzy rules here FuzzyRuleAntecedent *motionDetected = new FuzzyRuleAntecedent(); motionDetected->joinSingle(photoresistor_high); FuzzyRuleConsequent *outputLedOn = new FuzzyRuleConsequent(); outputLedOn->addOutput(led_on); FuzzyRule *fuzzyRule = new FuzzyRule(1, motionDetected, outputLedOn); fuzzy->addFuzzyRule(fuzzyRule); // Set initial input values for the fuzzy logic system fuzzy->setInput(1, analogRead(Photoresistor_PIN_A0)); // Set initial output values for the physical outputs LED_LEDRGB_Blue_PIN_D6_rawData = false; ultrasonic_sensor_HC_SR04_Trigger_PIN_D2_rawData = false; // Start serial communication Serial.begin(9600); } void loop(void) { // put your main code here, to run repeatedly: // Perform ultrasonic sensor measurements float distance = getUltrasonicDistance(); // Set input values for the fuzzy logic system fuzzy->setInput(1, analogRead(Photoresistor_PIN_A0)); // Perform fuzzy logic calculations fuzzy->fuzzify(); // Obtain output value from fuzzy logic system float ledState = fuzzy->defuzzify(1); // Update physical outputs based on fuzzy logic outputs updateOutputs(ledState); delay(1000); } float getUltrasonicDistance() { unsigned int distance = ultrasonic_sensor_HC_SR04.read(CM); if (distance == 0) { return 100; // If no object detected, set distance to maximum value } else { return distance; } } void updateOutputs(float ledState) { if (ledState > 0.5) { LED_LEDRGB_Blue_PIN_D6_rawData = true; } else { LED_LEDRGB_Blue_PIN_D6_rawData = false; } // Update physical output states digitalWrite(LED_LEDRGB_Blue_PIN_D6, LED_LEDRGB_Blue_PIN_D6_rawData); digitalWrite(ultrasonic_sensor_HC_SR04_Trigger_PIN_D2, ultrasonic_sensor_HC_SR04_Trigger_PIN_D2_rawData); // Print the output state Serial.print("LED State: "); Serial.println(LED_LEDRGB_Blue_PIN_D6_rawData); }