amc:ss2025:group-d:start
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
amc:ss2025:group-d:start [2025/07/18 17:38] – [Reference] 33186_students.hsrw | amc:ss2025:group-d:start [2025/07/27 13:47] (current) – 33724_students.hsrw | ||
---|---|---|---|
Line 53: | Line 53: | ||
====Software==== | ====Software==== | ||
'' | '' | ||
- | The code was developed using the Arduino IDE. | + | The code was developed using the Arduino IDE. \\ |
- | Step one of the coding process involved importing and including all necessary libraries. For better readability and maintainability, | + | Step one of the coding process involved importing and including all necessary libraries. For better readability and maintainability, |
<code C++> | <code C++> | ||
Line 78: | Line 78: | ||
</ | </ | ||
+ | Next, global variables were defined to represent the prototype' | ||
+ | <code C++> | ||
+ | bool catInside = false; | ||
+ | bool waitingForMotion = false; | ||
+ | unsigned long motionStartTime = 0; | ||
+ | bool motionDetected = false; | ||
+ | int pirSignal = 0; | ||
+ | int rfidWindow = 0; | ||
+ | int servoState = 0; | ||
+ | MFRC522 rfid(SDA_PIN, | ||
+ | Servo myServo1; | ||
+ | Servo myServo2; | ||
+ | </ | ||
+ | |||
+ | To enable communication over the internet, WiFi credentials and MQTT broker information (HiveMQ Cloud) were defined. This includes the broker address, port number, client ID, credentials, | ||
+ | These configurations allow the ESP32 to establish a secure connection to the broker and publish MQTT messages when the cat enters or exits. | ||
+ | |||
+ | <code C++> | ||
+ | // WiFi credentials | ||
+ | const char WIFI_SSID[] = "Mein Hotspot"; | ||
+ | const char WIFI_PASSWORD[] = " | ||
+ | |||
+ | // MQTT broker config (HiveMQ Cloud) | ||
+ | const char MQTT_BROKER_ADDRESS[] = " | ||
+ | const int MQTT_PORT = 8883; // TLS port | ||
+ | const char MQTT_CLIENT_ID[] = ""; | ||
+ | const char MQTT_USERNAME[] = " | ||
+ | const char MQTT_PASSWORD[] = ";? | ||
+ | |||
+ | // MQTT topic | ||
+ | const char PUBLISH_TOPIC[] = " | ||
+ | |||
+ | WiFiClientSecure wifiClient; | ||
+ | MQTTClient MQTTClient; | ||
+ | </ | ||
+ | |||
+ | The function connectToWiFi() is used to establish a WiFi connection using the credentials defined earlier. Serial outputs are used to provide feedback on the connection status via the Serial Monitor. This function ensures that the ESP32 is successfully connected to the network before any MQTT communication can take place | ||
+ | <code C++> | ||
+ | void connectToWiFi() { | ||
+ | Serial.print(" | ||
+ | WiFi.begin(WIFI_SSID, | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The function connectToMQTT() handles the MQTT client connection. It configures TLS settings using a simplified certificate check (setInsecure()), | ||
+ | <code C++> | ||
+ | void connectToMQTT() { | ||
+ | |||
+ | wifiClient.setInsecure(); | ||
+ | |||
+ | MQTTClient.begin(MQTT_BROKER_ADDRESS, | ||
+ | MQTTClient.setOptions(60, | ||
+ | while (!MQTTClient.connect(MQTT_CLIENT_ID, | ||
+ | Serial.print(" | ||
+ | delay(1000); | ||
+ | } | ||
+ | Serial.println(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The setup() function runs once when the ESP32 boots up. It initializes the serial interface, connects to WiFi and MQTT, initializes the RFID reader via SPI, sets up the two servo motors with their respective pins and signal ranges, and configures the PIR motion sensor as an input. This function prepares the hardware and network environment to ensure the system is ready to process RFID scans and detect motion events from the start. | ||
+ | <code C++> | ||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | delay(500); | ||
+ | |||
+ | connectToWiFi(); | ||
+ | connectToMQTT(); | ||
+ | |||
+ | SPI.begin(SCK_PIN, | ||
+ | rfid.PCD_Init(); | ||
+ | |||
+ | myServo1.setPeriodHertz(50); | ||
+ | myServo1.attach(SERVO_PIN_1, | ||
+ | myServo1.write(0); | ||
+ | |||
+ | myServo2.setPeriodHertz(50); | ||
+ | myServo2.attach(SERVO_PIN_2, | ||
+ | myServo2.write(0); | ||
+ | |||
+ | pinMode(PIR_PIN, | ||
+ | |||
+ | Serial.println(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The loop() function runs continuously during the system' | ||
+ | |||
+ | RFID Detection: If a new RFID tag is present and the system is not already waiting for motion, it unlocks the door by turning both servo motors to 90°, records the current time, and sets a flag to begin motion monitoring. | ||
+ | |||
+ | Motion Monitoring: While the system is waiting for motion, it checks whether motion has occurred within a 5-second window. If motion is detected, it toggles the catInside state and publishes a corresponding MQTT message ("Cat is now INSIDE" | ||
+ | This logic ensures that the door only unlocks when the registered RFID tag is detected and verifies that the cat actually entered or exited using the motion sensor. The result is then communicated via MQTT to allow remote monitoring. | ||
+ | <code C++> | ||
+ | void loop() { | ||
+ | MQTTClient.loop(); | ||
+ | pirSignal = digitalRead(PIR_PIN); | ||
+ | |||
+ | // Step 1: RFID detected | ||
+ | if (!waitingForMotion && rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { | ||
+ | Serial.println(" | ||
+ | myServo1.write(90); | ||
+ | myServo2.write(90); | ||
+ | servoState = 90; | ||
+ | |||
+ | motionStartTime = millis(); | ||
+ | waitingForMotion = true; | ||
+ | motionDetected = false; | ||
+ | |||
+ | rfid.PICC_HaltA(); | ||
+ | rfid.PCD_StopCrypto1(); | ||
+ | } | ||
+ | |||
+ | // Step 2: Motion check | ||
+ | if (waitingForMotion) { | ||
+ | rfidWindow = 1; | ||
+ | if (pirSignal == HIGH) { | ||
+ | motionDetected = true; | ||
+ | } | ||
+ | if (millis() - motionStartTime >= 5000) { | ||
+ | myServo1.write(0); | ||
+ | myServo2.write(0); | ||
+ | servoState = 0; | ||
+ | if (motionDetected) { | ||
+ | catInside = !catInside; | ||
+ | String message = catInside ? "Cat is now INSIDE 🐱🏠" | ||
+ | MQTTClient.publish(PUBLISH_TOPIC, | ||
+ | delay(1000); | ||
+ | } else { | ||
+ | delay(1000); | ||
+ | } | ||
+ | waitingForMotion = false; | ||
+ | rfidWindow = 0; | ||
+ | } | ||
+ | } else { | ||
+ | rfidWindow = 0; | ||
+ | |||
+ | delay(50); | ||
+ | } | ||
+ | </ | ||
===== Discussion ===== | ===== Discussion ===== | ||
'' | '' | ||
Line 89: | Line 234: | ||
'' | '' | ||
Project Pawtal has successfully integrated sensor technology and MQTT communication into a fully functional prototype with real-time data access. The system demonstrates a practical and accessible approach to automating a pet door. Despite the limited range of RFID antenna and minor issues, this project presents a strong proof of concept as a versatile product with future applications and improvements. Future developments could include the integration of location tracking sensors, AI-based behavior analysis, or facial recognition technology to eliminate the need for RFID tags. Additionally, | Project Pawtal has successfully integrated sensor technology and MQTT communication into a fully functional prototype with real-time data access. The system demonstrates a practical and accessible approach to automating a pet door. Despite the limited range of RFID antenna and minor issues, this project presents a strong proof of concept as a versatile product with future applications and improvements. Future developments could include the integration of location tracking sensors, AI-based behavior analysis, or facial recognition technology to eliminate the need for RFID tags. Additionally, | ||
+ | |||
+ | ===== Demonstration & Presentation ===== | ||
+ | {{ : | ||
+ | |||
===== Reference ===== | ===== Reference ===== | ||
- | Rose, M., & Kurtz, J.(2016, May 16). NFC – A closer look [Presentation].Future Electronics. | ||
- | http:// | ||
Osoyoo.(2017, | Osoyoo.(2017, | ||
https:// | https:// | ||
+ | |||
+ | Rose, M., & Kurtz, J.(2016, May 16). NFC – A closer look [Presentation].Future Electronics. | ||
+ | http:// | ||
+ | |||
amc/ss2025/group-d/start.1752853132.txt.gz · Last modified: 2025/07/18 17:38 by 33186_students.hsrw