#define BLYNK_PRINT Serial /************ BLYNK CONFIGURATION ************/ #define BLYNK_TEMPLATE_ID "TMPL2PAhKRuXi" #define BLYNK_TEMPLATE_NAME "Week15" #define BLYNK_AUTH_TOKEN "8UtXxMqDvQbu-QKcqCdu-JdQm0BNU-DM" /************ LIBRARIES ************/ #include #include /************ WIFI DATA ************/ char ssid[] = "STAR LABS"; char pass[] = "$t@rLAB5"; /************ HARDWARE PINS ************/ #define SHARP_PIN A0 // Sharp analog distance sensor #define MOTOR_IN1 D1 // L9110S input A / IN1 #define MOTOR_IN2 D2 // L9110S input B / IN2 #define LED_PIN D10 // LED on the PCB /************ BLYNK TIMER ************/ BlynkTimer timer; /************ VARIABLES ************/ float distanceCm = 0.0; int motorState = 0; float readSharpDistance() { int rawValue = analogRead(SHARP_PIN); // ESP32 ADC range is usually 0 to 4095 float voltage = rawValue * (3.3 / 4095.0); // Avoid division problems with very low voltage if (voltage < 0.1) { return 999.0; } // Approximate conversion for Sharp IR distance sensor float distance = 27.86 * pow(voltage, -1.15); return distance; } /**************************************************** Motor control functions ****************************************************/ void motorOn() { digitalWrite(MOTOR_IN1, HIGH); digitalWrite(MOTOR_IN2, LOW); digitalWrite(LED_PIN, HIGH); motorState = 1; } void motorOff() { digitalWrite(MOTOR_IN1, LOW); digitalWrite(MOTOR_IN2, LOW); digitalWrite(LED_PIN, LOW); motorState = 0; } void updateSystem() { distanceCm = readSharpDistance(); Serial.print("Distance: "); Serial.print(distanceCm); Serial.println(" cm"); if (distanceCm >= 15.0 && distanceCm <= 20.0) { motorOn(); Serial.println("Object detected in range: MOTOR ON / LED ON"); Blynk.virtualWrite(V2, "Object in range - Motor ON"); } else { motorOff(); Serial.println("Object out of range: MOTOR OFF / LED OFF"); Blynk.virtualWrite(V2, "Out of range - Motor OFF"); } // Send values to Blynk Blynk.virtualWrite(V0, distanceCm); Blynk.virtualWrite(V1, motorState); } /**************************************************** SETUP ****************************************************/ void setup() { Serial.begin(115200); delay(1000); Serial.println(); Serial.println("===================================="); Serial.println("XIAO ESP32-C6 + Blynk + Sharp Sensor"); Serial.println("Input: Sharp sensor on A0"); Serial.println("Output: Motor L9110S on D1/D2"); Serial.println("Output: LED on D10"); Serial.println("===================================="); pinMode(SHARP_PIN, INPUT); pinMode(MOTOR_IN1, OUTPUT); pinMode(MOTOR_IN2, OUTPUT); pinMode(LED_PIN, OUTPUT); motorOff(); Serial.println("Connecting to WiFi and Blynk..."); Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); Serial.println("System ready."); // Update system every 500 ms timer.setInterval(500L, updateSystem); } /**************************************************** LOOP ****************************************************/ void loop() { Blynk.run(); timer.run(); }