IoT Sit Counter


1. NodeMCU ESP-12E
2. (2) LEDs
3. (4) 1K Resistor
4. Push Button
5. Slide Switch
6. 10K Pot


  1. // IoT Sit Counter
  2. // pkvi
  3. // NodeMCU ESP-12E 1.0
  4. #include <ESP8266WiFi.h>
  5. // WIFI Network Access
  6. const char* ssid = "XXXXXX";
  7. const char* password = "XXXXXXX";
  8. WiFiServer server(80);
  9. // ThingSpeak Access
  10. char thingSpeakAddress[] = "api.thingspeak.com";
  11. String APIKey = "XXXXXXXXXXX"; // API
  12. const int updateThingSpeakInterval = 10 * 1000; // Interval
  13. long lastConnectionTime = 0;
  14. boolean lastConnected = false;
  15. WiFiClient client;
  16. // LEDs
  17. int activeled = 13;
  18. int wifiled = 12;
  19. // Sensor
  20. int sensor = A0;
  21. int ssr = 0;
  22. int sensorstart = 0;
  23. int senres = 0;
  24. int sensorstate = 0;
  25. // Button
  26. int button = 14;
  27. int buttstate;
  28. // Stats
  29. int sitdown = 0;
  30. int pretime = 0;
  31. float dattime;
  32. float runpert;
  33. // States
  34. int mainstate = 0;
  35. void setup() {
  36. Serial.begin(9600);
  37. pinMode(button, INPUT);
  38. pinMode(activeled, OUTPUT);
  39. pinMode(wifiled, OUTPUT);
  40. digitalWrite(activeled, LOW);
  41. digitalWrite(wifiled, LOW);
  42. calibrate();
  43. }
  44. void loop() {
  45. digitalWrite(activeled, HIGH);
  46. // WIFI Button Pressed?
  47. buttstate = digitalRead(button);
  48. // WIFI Yes or No?
  49. if (buttstate == HIGH) {
  50. Serial.println("Connecting");
  51. digitalWrite(wifiled, HIGH);
  52. // Load WiFi
  53. while (WiFi.status() != WL_CONNECTED) {
  54. WiFi.begin(ssid, password);
  55. delay(10000);
  56. }
  57. Serial.println("Connected");
  58. server.begin();
  59. // Calculate Minutes Seated
  60. dattime = pretime / 60.0;
  61. // Truncate
  62. dattime = (int) dattime;
  63. // Calculate Percent Seated
  64. runpert = millis();
  65. // Convert to Seconds
  66. runpert = runpert / 1000.0;
  67. // Convert to Minutes
  68. runpert = runpert / 60.0;
  69. // Convert to Percent
  70. runpert = dattime / runpert;
  71. // Truncate
  72. runpert = (int) runpert;
  73. // Update ThingSpeak
  74. String sitfinal = String(sitdown, DEC);
  75. String timefinal = String(dattime, DEC);
  76. String runfinal = String(runpert, DEC);
  77. updateThingSpeak("field1=" + sitfinal + "&field2=" +
  78. timefinal + "&field3=" + runfinal);
  79. delay(3000);
  80. // Reset Data
  81. sitdown = 0;
  82. pretime = 0;
  83. dattime = 0;
  84. runpert = 0;
  85. } else {
  86. // No WIFI
  87. digitalWrite(wifiled, LOW);
  88. // Read Sensor
  89. sensorstate = analogRead(sensor);
  90. // Sitting?
  91. if (sensorstate > sensorstart) {
  92. // Delay For 5 Seconds To Confirm Sit
  93. if (mainstate == 0) {
  94. delay(5000);
  95. mainstate = 1;
  96. goto escape;
  97. } else if (mainstate == 1) {
  98. // Add A Sit
  99. sitdown = sitdown + 1;
  100. // Run While Sitting To Track Time
  101. // 1 Second Per Loop
  102. while (sensorstate > sensorstart) {
  103. sensorstate = analogRead(sensor);
  104. pretime = pretime + 1;
  105. delay(1000);
  106. }
  107. // Reset State
  108. mainstate = 0;
  109. }
  110. }
  111. }
  112. delay(1000);
  113. digitalWrite(activeled, LOW);
  114. delay(1000);
  115. escape:
  116. }
  117. // Calibrate While Standing
  118. void calibrate() {
  119. for (int x = 0; x < 10; x++) {
  120. ssr = analogRead(sensor);
  121. sensorstart = sensorstart + ssr;
  122. delay(100);
  123. digitalWrite(activeled, HIGH);
  124. }
  125. // sensorstart Equals Average Standing Value
  126. sensorstart = sensorstart / 10;
  127. // Add Leniency
  128. sensorstart = sensorstart + 200;
  129. digitalWrite(activeled, LOW);
  130. }
  131. // ThingSpeak
  132. void updateThingSpeak(String tsData) {
  133. if (client.connect(thingSpeakAddress, 80)) {
  134. client.print("POST /update HTTP/1.1\n");
  135. client.print("Host: api.thingspeak.com\n");
  136. client.print("Connection: close\n");
  137. client.print("X-THINGSPEAKAPIKEY: " + APIKey + "\n");
  138. client.print("Content-Type: application/x-www-form-urlencoded\n");
  139. client.print("Content-Length: ");
  140. client.print(tsData.length());
  141. client.print("\n\n");
  142. client.print(tsData);
  143. lastConnectionTime = millis();
  144. }
  145. }

Menu
Index
Engineering
Entertainment
Literature
Miscellaneous
Contact
Search
tiktok.com/@pkvi.xyz
buymeacoffee.com/pkvi
scored.co/u/-pkvi-
Miter
Why Ayh?
Miter
@pkvi
"...may not meet professional standards."
13 miters
122 tenons
Subscribe