Bath Mat Fluffer Bot

files.catbox.moe/9o8yih.mp4

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. // vgmlr
  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. }
Update(s)-
1. ptmr | 343025 [Changelog]
10:22 343 025
Dev-
1. TVShow (227) 'CSA'
2. Wedge (Miter) 1.0.0
3. TVShow (228) 'APT'
4. TVProgram (83) 'BXT'
11:51 339 025

Menu
Index
Engineering
Entertainment
Literature
Miscellaneous
Contact
Search
tiktok.com/@vgmlr
youtube.com/@vgmlr
Miter
@vgmlr
=SUM(parts)
86 miters
131 tenons
Subscribe
0.00123