Motiverende plank

Daniël RDaniël R
5 min read

Ik heb een probleem ik heb geen ruimte meer bij me wasbak ik heb teveel spullen. Als ik iets wil pakken gooi ik vaker wel dan niet alles om wat nooit goed helpt voor mijn ochtendhumeur. Om dit op te lossen had ik naar de Ikea kunnen gaan en een klein plankje kopen waar ik mijn spullen op kon leggen maar waarom zou ik dat doen als ik thuis een 3D-printer heb staan en een engineer ben. Omdat ik het saai vond om alleen een plank te ontwerpen heb ik ervoor gekozen om er een scherm in te bouwen zodat ik elke ochtend door op een knop te drukken een motiverende quote te zien zou krijgen.

Het plan

Het idee is simpel design een plank die groot genoeg is voor meerdere spullen met onder een verdieping een klein bakje waar alle elektronica weggestopt kan worden. Dan via de achterkant lopen de draden naar het scherm en de knop die mooi weggewerkt is aan de bovenkant van de plank. Aan de onderkant van de plank wil ik hangers en sieradenbakjes maken die je erin en uit kan schuiven zodat je ze kan aanpassen aan je behoeftes.

Design

Omdat de de plank te groot is om in een keer te printen wordt het opgedeeld in meerdere delen die in elkaar geschoven kunnen worden om het eindresultaat te krijgen. Om de plank mooi te houden zijn alle plekken waar de delen in elkaar worden geschoven weggewerkt achter de planken zodat ze niet te zien zijn.

Om sieraden of handdoeken op te hangen heb ik aan de onderkant 3 hangers toegevoegd die je op dezelfde manier kan los en vastmaken.

Om de grote hoeveelheid draden weg te werken die je nodig hebt om een LCD scherm aan te sturen is er aan de achterkant een goot gemaakt van de plek waar alle elektronica zit tot aan het scherm. Dit zorgt ervoor dat de plank goed tegen de muur aan past.

Zoals in de foto hierboven te zien is zit de elektronica netjes weggewerkt in een bakje onder het bovenste plankje. Deze kan met schroeven worden losgeschroefd en zit vast met speciale threaded inserts die je in je 3d prints kan toevoegen met warmte.

Elektronica

Het aansturen van een LCD scherm is niet al te moeilijk er zijn library’s die dit kunnen doen wat ervoor zorgt dat de code erg simpel is. De hardware is lastiger er zijn namelijk 2 manieren om een LCD scherm aan te sturen dit kan namelijk via I2C hiervoor heb je een best groot extra component nodig dat in mijn ontwerp niet zou passen dus heb ik het via de andere manier moeten doen. Deze manier is om alle kabels zelf aan de Arduino te solderen en zorgt ervoor dat er van het scherm 12 kabels naar de Arduino lopen plus de 2 kabels van de knop en 2 van de batterij betekend dat dat er 16 kabels naar de Arduino lopen.

Om dit allemaal aan te sturen is er een simpele code geschreven met een paar belangrijke onderdelen.

  • Het aansturen van de LCD.

  • Het debouncen van de knop.

  • Het kiezen van een random quote.

  • Alles uitzetten.

Het aansturen van de LCD is erg makkelijk en gebeurt door het scherm te initialiseren en daarna met de library aan te sturen.

lcd.setCursor(0, 0);
lcd.print(quotes[q][0]);
lcd.setCursor(0, 1);
lcd.print(quotes[q][1]);

Een belangrijk onderdeel als je een knop gebruikt is het debouncen van de knop. Als je een knop indrukt dan kan het signaal knipperen wat betekend dat het programma een keer drukken kan opvangen dat de knop soms wel 100 keer ingedrukt wordt. Om dat op te lossen wordt er een langere tijd gekeken of de knop wordt ingedrukt zodat het programma zeker weet dat het de bedoeling was.

int reading = digitalRead(buttonPin);
Serial.println(reading);
// debounce
if (reading != lastButtonState) {
  lastDebounceTime = millis();
}

if ((millis() - lastDebounceTime) > debounceDelay) {
  // knop-status is stabiel
  if (reading == LOW && !lcdActive) {

Het kiezen van een random quote gaat door het aanmaken van een character array van quotes die door een random number generator gekozen worden. Op dit moment heb ik chatgpt een paar generieke quotes laten bedenken maar dit kan natuurlijk alles zijn wat je wilt.

const char* quotes[][2] = {
  {"Keep going!", "You got this :)"},
  {"Believe in", "yourself!"},
  {"Never give", "up!"},
  {"Stay positive", "Work hard"},
  {"Dream big!", "Act now!"},
  {"Success is", "a journey."},
  {"Be brave,", "take risks."},
  {"Focus on", "what matters."},
  {"Progress,", "not perfection."},
  {"Stay strong!", "Keep moving."},
  {"Your limit", "is only you."},
  {"Every day is", "a new chance."},
  {"Think big,", "start small."},
  {"Make it", "happen!"},
  {"Keep learning", "Keep growing"}
};

const int numQuotes = sizeof(quotes) / sizeof(quotes[0]);

Als laatste onderdeel moet zoveel mogelijk elektronica uitgezet worden zodat de batterij zo lang mogelijk meegaat dat gaat door alle power pins uit te zetten.

if (lcdActive && (millis() - lcdStartTime >= lcdDuration)) {
    lcdActive = false;
    lcd.clear();
    digitalWrite(backlightPin, LOW); // backlight uit
  }

Eindresultaat

Na lang printen en solderen is het eindresultaat een handige plank waar veel spullen op passen en die mij elke ochtend een inspirerende quote geeft.

Verbeterpunten

Om de plank nog beter te maken zijn er een paar punten die ik de volgende keer wil toevoegen.

  • Het gebruik van een ESP32 met deep sleep mode zodat na het gebruik in de ochtend de hele microcontroller uitgezet kan worden om de batterijduur met meer dan 300x te verhogen.

  • Andere informatie op het scherm zoals de tijd en het weerbericht. misschien zelfs kledingkeuzes.

0
Subscribe to my newsletter

Read articles from Daniël R directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Daniël R
Daniël R