Once a luxury, sitting has now become an ailment. Have you yet wondered to just how many times in a day you sit or to what percentage of your day is consumed on bended knee? Making use of a resistance sensor and a NodeMCU ESP-12E, we are able to track our daily lethargy and display it in all of it's aggregated misery. Amend as needed.VIDEO
Ingredients 1. NodeMCU ESP-12E 2. (2) LEDs 3. (4) 1K Resistor 4. Push Button 5. Slide Switch 6. 10K PotButt-On State Code // IoT Sit Counter // Version 0.1 // VijeMiller // NodeMCU ESP-12E 1.0 #include <ESP8266WiFi.h> // WIFI Network Access const char* ssid = "XXXXXX"; const char* password = "XXXXXXX"; WiFiServer server(80); // ThingSpeak Access char thingSpeakAddress[] = "api.thingspeak.com"; String APIKey = "XXXXXXXXXXX"; // API const int updateThingSpeakInterval = 10 * 1000; // Interval long lastConnectionTime = 0; boolean lastConnected = false; WiFiClient client; // LEDs int activeled = 13; int wifiled = 12; // Sensor int sensor = A0; int ssr = 0; int sensorstart = 0; int senres = 0; int sensorstate = 0; // Button int button = 14; int buttstate; // Stats int sitdown = 0; int pretime = 0; float dattime; float runpert; // States int mainstate = 0; void setup() { Serial.begin(9600); pinMode(button, INPUT); pinMode(activeled, OUTPUT); pinMode(wifiled, OUTPUT); digitalWrite(activeled, LOW); digitalWrite(wifiled, LOW); calibrate(); } void loop() { digitalWrite(activeled, HIGH); // WIFI Button Pressed? buttstate = digitalRead(button); // WIFI Yes or No? if (buttstate == HIGH) { Serial.println("Connecting"); digitalWrite(wifiled, HIGH); // Load WiFi while (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); delay(10000); } Serial.println("Connected"); server.begin(); // Calculate Minutes Seated dattime = pretime / 60.0; // Truncate dattime = (int) dattime; // Calculate Percent Seated runpert = millis(); // Convert to Seconds runpert = runpert / 1000.0; // Convert to Minutes runpert = runpert / 60.0; // Convert to Percent runpert = dattime / runpert; // Truncate runpert = (int) runpert; // Update ThingSpeak String sitfinal = String(sitdown, DEC); String timefinal = String(dattime, DEC); String runfinal = String(runpert, DEC); updateThingSpeak("field1=" + sitfinal + "&field2=" + timefinal + "&field3=" + runfinal); delay(3000); // Reset Data sitdown = 0; pretime = 0; dattime = 0; runpert = 0; } else { // No WIFI digitalWrite(wifiled, LOW); // Read Sensor sensorstate = analogRead(sensor); // Sitting? if (sensorstate > sensorstart) { // Delay For 5 Seconds To Confirm Sit if (mainstate == 0) { delay(5000); mainstate = 1; goto escape; } else if (mainstate == 1) { // Add A Sit sitdown = sitdown + 1; // Run While Sitting To Track Time // 1 Second Per Loop while (sensorstate > sensorstart) { sensorstate = analogRead(sensor); pretime = pretime + 1; delay(1000); } // Reset State mainstate = 0; } } } delay(1000); digitalWrite(activeled, LOW); delay(1000); escape: } // Calibrate While Standing void calibrate() { for (int x = 0; x < 10; x++) { ssr = analogRead(sensor); sensorstart = sensorstart + ssr; delay(100); digitalWrite(activeled, HIGH); } // sensorstart Equals Average Standing Value sensorstart = sensorstart / 10; // Add Leniency sensorstart = sensorstart + 200; digitalWrite(activeled, LOW); } // ThingSpeak void updateThingSpeak(String tsData) { if (client.connect(thingSpeakAddress, 80)) { client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: " + APIKey + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(tsData.length()); client.print("\n\n"); client.print(tsData); lastConnectionTime = millis(); } } Archive https://hackaday.io/project/25152-iot-sit-counter https://thingspeak.com/channels/281292 22:1:15 84-017
5:03:38 191 019
@pkvi
"...may not meet professional standards."