Bath Mat Fluffer Bot


Arduino Uno
(2) DC Geared Motors
L298N Driver
IR Sensor Module
(2) 3.7 Lithium Batteries
Qi Wireless Charger Module
(3) Addressable LEDs
Ultrasonic Sensor Module
9G Servo


  1. // bath mat fluffer bot
  2. // pkvi
  3. #include "FastLED.h"
  4. #define NUM_LEDS 5
  5. #define LED_TYPE WS2812B
  6. #define COLOR_ORDER GRB
  7. CRGB leds[NUM_LEDS];
  8. #include <Servo.h>
  9. Servo wiper;
  10. // pins
  11. const int ena = 2;
  12. const int in1 = 3;
  13. const int in2 = 4;
  14. const int in3 = 5;
  15. const int in4 = 6;
  16. const int enb = 7;
  17. const int ult = 8;
  18. const int led = 9;
  19. #define PIN 10
  20. const int irs = 11;
  21. const int ser = 12;
  22. // var
  23. const int wing_in = 5;
  24. const int wing_out = 180;
  25. const int forward_in = 100;
  26. const int left_turn = 300;
  27. const int forward_mark = 100;
  28. void setup() {
  29. Serial.begin(9600);
  30. pinMode(ena, OUTPUT);
  31. pinMode(in1, OUTPUT);
  32. pinMode(in2, OUTPUT);
  33. pinMode(in3, OUTPUT);
  34. pinMode(in4, OUTPUT);
  35. pinMode(enb, OUTPUT);
  36. digitalWrite(in1, LOW);
  37. digitalWrite(in2, LOW);
  38. digitalWrite(in3, LOW);
  39. digitalWrite(in4, LOW);
  40. pinMode(irs, INPUT);
  41. wiper.attach(ser);
  42. wiper.write(wing_in);
  43. FastLED.addLeds<LED_TYPE, PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  44. pinMode(led, OUTPUT);
  45. for (int x = 0; x < 10; x++) {
  46. digitalWrite(led, HIGH);
  47. delay(500);
  48. digitalWrite(led, LOW);
  49. delay(500);
  50. }
  51. }
  52. void loop() {
  53. long duration, cm;
  54. pinMode(ult, OUTPUT);
  55. digitalWrite(ult, LOW);
  56. delayMicroseconds(2);
  57. digitalWrite(ult, HIGH);
  58. delayMicroseconds(5);
  59. digitalWrite(ult, LOW);
  60. pinMode(ult, INPUT);
  61. duration = pulseIn(ult, HIGH);
  62. cm = mtc(duration);
  63. // if active delay (5) mins
  64. if (cm < 250) {
  65. delay(1000 * 60 * 5);
  66. // check if occupied
  67. long duration, cm;
  68. pinMode(ult, OUTPUT);
  69. digitalWrite(ult, LOW);
  70. delayMicroseconds(2);
  71. digitalWrite(ult, HIGH);
  72. delayMicroseconds(5);
  73. digitalWrite(ult, LOW);
  74. pinMode(ult, INPUT);
  75. duration = pulseIn(ult, HIGH);
  76. cm = mtc(duration);
  77. if (cm > 250) {
  78. fluff();
  79. }
  80. }
  81. delay(500);
  82. }
  83. long mtc(long microseconds) {
  84. return microseconds / 29 / 2;
  85. }
  86. void fluff() {
  87. // turn on lights
  88. neoshow(0, 0, 255, 200);
  89. // forward
  90. analogWrite(ena, 180);
  91. analogWrite(enb, 180);
  92. // run until sensor on
  93. while (digitalRead(irs) == LOW) {
  94. digitalWrite(in1, LOW);
  95. digitalWrite(in2, HIGH);
  96. digitalWrite(in3, HIGH);
  97. digitalWrite(in4, LOW);
  98. }
  99. // run mat until sensor off
  100. while (digitalRead(irs) == HIGH) {
  101. digitalWrite(in1, LOW);
  102. digitalWrite(in2, HIGH);
  103. digitalWrite(in3, HIGH);
  104. digitalWrite(in4, LOW);
  105. }
  106. // stop
  107. digitalWrite(in1, LOW);
  108. digitalWrite(in2, LOW);
  109. digitalWrite(in3, LOW);
  110. digitalWrite(in4, LOW);
  111. // turn 180 degrees
  112. // until sensor on
  113. while (digitalRead(irs) == LOW) {
  114. digitalWrite(in1, LOW);
  115. digitalWrite(in2, HIGH);
  116. digitalWrite(in3, LOW);
  117. digitalWrite(in4, LOW);
  118. }
  119. // deploy arm
  120. for (int p = wing_in; p <= wing_out; p++) {
  121. wiper.write(p);
  122. delay(10);
  123. }
  124. // run mat until sensor off
  125. while (digitalRead(irs) == HIGH) {
  126. digitalWrite(in1, LOW);
  127. digitalWrite(in2, HIGH);
  128. digitalWrite(in3, HIGH);
  129. digitalWrite(in4, LOW);
  130. }
  131. // stop
  132. digitalWrite(in1, LOW);
  133. digitalWrite(in2, LOW);
  134. digitalWrite(in3, LOW);
  135. digitalWrite(in4, LOW);
  136. // turn 180 degrees
  137. // until sensor on
  138. while (digitalRead(irs) == LOW) {
  139. digitalWrite(in1, LOW);
  140. digitalWrite(in2, LOW);
  141. digitalWrite(in3, HIGH);
  142. digitalWrite(in4, LOW);
  143. }
  144. // retract arm
  145. for (int p = wing_out; p >= wing_in; p--) {
  146. wiper.write(p);
  147. delay(10);
  148. }
  149. // run mat until sensor off
  150. while (digitalRead(irs) == HIGH) {
  151. digitalWrite(in1, LOW);
  152. digitalWrite(in2, HIGH);
  153. digitalWrite(in3, HIGH);
  154. digitalWrite(in4, LOW);
  155. }
  156. // stop
  157. digitalWrite(in1, LOW);
  158. digitalWrite(in2, LOW);
  159. digitalWrite(in3, LOW);
  160. digitalWrite(in4, LOW);
  161. // turn 180 degrees
  162. // until sensor on
  163. while (digitalRead(irs) == LOW) {
  164. digitalWrite(in1, LOW);
  165. digitalWrite(in2, HIGH);
  166. digitalWrite(in3, LOW);
  167. digitalWrite(in4, LOW);
  168. }
  169. // deploy arm
  170. for (int p = wing_in; p <= wing_out; p++) {
  171. wiper.write(p);
  172. delay(10);
  173. }
  174. // run mat until sensor off
  175. while (digitalRead(irs) == HIGH) {
  176. digitalWrite(in1, LOW);
  177. digitalWrite(in2, HIGH);
  178. digitalWrite(in3, HIGH);
  179. digitalWrite(in4, LOW);
  180. }
  181. // retract arm
  182. for (int p = wing_out; p >= wing_in; p--) {
  183. wiper.write(p);
  184. delay(10);
  185. }
  186. // run forward
  187. for (int t = 0; t <= forward_in; t++) {
  188. digitalWrite(in1, LOW);
  189. digitalWrite(in2, HIGH);
  190. digitalWrite(in3, HIGH);
  191. digitalWrite(in4, LOW);
  192. }
  193. // run turn
  194. for (int t = 0; t <= left_turn; t++) {
  195. digitalWrite(in1, LOW);
  196. digitalWrite(in2, HIGH);
  197. digitalWrite(in3, LOW);
  198. digitalWrite(in4, LOW);
  199. }
  200. // run to mark
  201. for (int t = 0; t <= forward_mark; t++) {
  202. digitalWrite(in1, LOW);
  203. digitalWrite(in2, HIGH);
  204. digitalWrite(in3, HIGH);
  205. digitalWrite(in4, LOW);
  206. }
  207. neoshow(0, 0, 255, 200);
  208. digitalWrite(in1, LOW);
  209. digitalWrite(in2, LOW);
  210. digitalWrite(in3, LOW);
  211. digitalWrite(in4, LOW);
  212. for (int x = 0; x < 10; x++) {
  213. digitalWrite(led, HIGH);
  214. delay(500);
  215. digitalWrite(led, LOW);
  216. delay(500);
  217. }
  218. }
  219. void neoshow(int r, int g, int b, int brightness) {
  220. FastLED.setBrightness(brightness);
  221. for (int i = 0; i < NUM_LEDS; i++ )
  222. {
  223. leds[i] = CRGB(r, g, b);
  224. }
  225. FastLED.show();
  226. }
  227. void showStrip() {
  228. #ifdef ADAFRUIT_NEOPIXEL_H
  229. // NeoPixel
  230. strip.show();
  231. #endif
  232. #ifndef ADAFRUIT_NEOPIXEL_H
  233. // FastLED
  234. FastLED.show();
  235. #endif
  236. }
  237. void setPixel(int Pixel, byte red, byte green, byte blue) {
  238. #ifdef ADAFRUIT_NEOPIXEL_H
  239. // NeoPixel
  240. strip.setPixelColor(Pixel, strip.Color(red, green, blue));
  241. #endif
  242. #ifndef ADAFRUIT_NEOPIXEL_H
  243. // FastLED
  244. leds[Pixel].r = red;
  245. leds[Pixel].g = green;
  246. leds[Pixel].b = blue;
  247. #endif
  248. }
  249. void setAll(byte red, byte green, byte blue) {
  250. for (int i = 0; i < NUM_LEDS; i++ ) {
  251. setPixel(i, red, green, blue);
  252. }
  253. showStrip();
  254. }

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