Button-combination-puzzle

by Bram_Veldkamp in Circuits > Arduino

256 Views, 1 Favorites, 0 Comments

Button-combination-puzzle

IMG_20220203_174157.jpg
Knoppen Puzzel

Benodigdheden:

Materiaal:

-Arduino Uno + 9v adapter + 2 schroefjes

-Breadboard

-Plaatmateriaal van 4mm dikte. Ik gebruik MDF omdat dit hout niet erg buigbaar is bij deze dikte.

-1 plaatje (zwart) kunststof

-Houtlijm

-4 Tactiele buttons (12x12mm)

-2 RGB Ledjes (10mm doorsnee)

-Voldoende bedrading (2 per button, 4 per Ledlamp, ongeveer 5/6 extra)

-Weerstandjes (4x 220Ohm, 2x 10/12K Ohm)

Overig:

-Adobe Illustrator

-Lasersnijder

Stap 1: Plaatmateriaal Klaarmaken En Lasersnijden

IMG_20220128_164413.jpg
IMG_20220128_164403.jpg
IMG_20220203_142725.jpg

Voordat we de technische kant van dit project opgaan, zorgen we er eerst voor dat we straks een mooi kistje hebben. Ik laat het hout via een lasersnijder uitsnijden. Deze machine is erg precies. Het is hierom ook belangrijk dat de machine precies weet waar hij moet gaan snijden. Dit geef je door aan het apparaat door via een Illustrator document (opgeslagen als DXF) de kaders en lijnen te tekenen. Zie de foto's voor mijn tekeningen.

Voor- en achterkant

Omdat de materiaaldikte 4mm is, maak ik de uitsparingen ook 4mm dik. Hierdoor past alles straks mooi in elkaar. Ik begin met het maken van de voorkant, deze is 250x140mm. Ik teken hiervoor een rechthoek. Vervolgens maak ik een kleine rechthoek (bijvoorbeeld 30x4mm). Ik zorg ervoor dat ik deze netjes tegen een zijkant aanleg, en dat ik deze vervolgens (met de functie bij pathfinder) samensmelt met de vorm. Dit rechthoekje kan je knippen en plakken om op die manier meerdere uitsparingen te creëren. De uiteindelijke maat van de voorkant is nu 258x148mm. In dit geval zijn de afmetingen en aansluitingspunten van de voorkant hetzelfde als de achterkant. Deze vorm kan je dus kopiëren en plakken zodat er twee vormen worden uitgesneden.

Op de voorkant plak ik straks nog een stuk donker kunststof, maar ik moet er rekening mee houden dat er nog knopjes en lampjes doorheen moeten komen. Hiervoor maak ik vierkante (knopjes 20x20mm) en ronde (8mm doorsnee) vormen. Deze worden straks uitgesneden door de snijder. Op de achterkant moet nog een rechthoek komen. Deze wordt namelijk weggesneden, zodat de achterkant open blijft. Hierdoor kunnen we altijd bij de techniek komen. De maat van deze rechthoek is 195x100mm. Deze sleep je mooi naar het midden van de achterkant.

LET OP: bij deze laatste paar stapjes moet je de vorm niet samensmelten. De getekende vormen zullen dan verdwijnen.


Zijkanten

Ik ga nu verder met de zijkanten. Hierbij werken we hetzelfde als met de voorkant: we maken een rechthoek, plakken daar kleine rechthoekjes aan en smelten de vormen samen tot 1 geheel. We moeten nu echter rekening houden met het feit dat de zijkanten goed moeten aansluiten met de voor- en achterkant.

Ik wil dat mijn kistje straks 133 mm diep wordt, en 148 hoog. Daarom teken ik een rechthoek van 125x140mm. De 8mm die we nu nog missen voeg ik toe door zo aan de weerzijden opnieuw kleine rechthoekjes te maken van 4mm dik. We moeten nu even goed kijken naar de voorkant. Hier hebben we uitsparingen gemaakt. De zijkant moet ook uitsparingen hebben, maar dan precies het tegenovergestelde van de voorkant. Waar er op de voorkant een stukje uitsteekt, moet dat op de zijkant niet uitsteken. Wanneer je de rechthoekjes op de juiste plekken zijn kunnen we deze samen met de grote vorm samensmelten. Als het goed is past dit puzzelstukje nu in de voor- en achterkant. Voeg tot slot nog drie rechthoekjes toe aan de boven- en onderkant van de zijkant. Deze hebben we nodig voor de aansluiting met de bodem en deksel. Deze vorm kunnen we kopiëren en plakken, want we hebben twee zijkanten nodig.

Boven- en onderkant

Het trucje wat we met de zijkanten hebben uitgehaald, doen we nu exact hetzelfde bij de boven- en onderkant. Teken wederom een rechthoek (in mijn geval 250x140mm). Kijk nu goed naar de bovenkant van de voorkant en ook van de zijkant. Weer ga je kijken naar de plekken waar je een rechthoekje van 4mm dik toevoegt. Smelt vervolgens de vormen samen tot één geheel. Kopieer en plak de vorm zodat je een boven- en onderkant hebt. Aan de onderkant voegen we nog een cirkel met een doorsnede van 12mm toe. Hier kan straks de voeding voor de arduino doorheen.

Kunststof voorplaat

Ik wil mijn bakje mooi afwerken met een stuk zwart kunststof. Deze valt straks volledig over de voorkant en bevat de uitsparingen voor de lampjes, knopjes, de romeinse cijfers en de puzzel. De rechthoek hiervoor is dus 258x148mm. De uitsparingen voor de knopjes zijn nu 13x13mm en de uitsparingen voor de lampjes blijven 12mm. De romeinse cijfers hebben een afmeting van 5x20mm. De som (puzzel) kan je typen en met je gewenste lettertype en op de gewenste grootte toevoegen. Kijk wel uit met getallen als 4,6,8,9,0. Omdat deze een gesloten vorm bevatten (een 0 is een cirkel) zullen deze volledig worden weggesneden. Ik heb een klein rechthoekje toegevoegd aan mijn nul, zodat deze vorm niet gesloten is. Wederom met pathfinder samensmelten.


Op dit moment is alle voorbereiding voor het lasersnijden klaar, en kan je dit laten snijden.

De achterkant, bovenkant, onderkant en zijkanten kunnen al verlijmd worden met houtlijm. Hier doen we voorlopig even niks mee.

De voorkant (van MDF) kan eventueel wit worden geverfd. MDF werkt als een spons, dus meteen lakken werkt niet. Zorg ervoor dat je een watergedragen grondverf, of een speciale MDF-grondverf gebruikt om dit netjes te witten.

Stap 2: Technische Aansluiting

IMG-20220203-WA0005.jpeg
IMG_20220203_142445.jpg
IMG_20220203_142431.jpg
IMG_20220203_142436.jpg

Nu volgt de tweede stap, namelijk het aansluiten van alle techniek. Dit is een pittige klus, dus wees nauwkeurig. Voordat je alle draadjes gaat aansluiten, is het slim om de arduino (d.m.v. 2 schroefjes) en het breadboard (plakkertje onderop) vast te maken aan de achterkant van de houten voorkant.

------------------------------------------------------------------------------------------------------------------------------------------------------

RGB-Led

Per RGB-Led gebruik je 4 draadjes. De RGB bevat 4 pinnetjes met elk een eigen functie. De langste moet aangesloten zijn op de GND-input van de arduino. De volgorde van de pinnen is Rood, GND, Groen, Blauw (I|II). Voor het gemak kan je het beste een rode, zwarte, groene en blauwe kabel gebruiken die je aan de juiste pin vast soldeert.

Prik elk kabeltje van het lampje in een aparte rij in het breadboard. Het makkelijkste is om deze een beetje bij elkaar in de buurt te houden. Je kan ze bijvoorbeeld in het eerste gaatje (A) van rij 1, 3, 5 en 7 doen. Vervolgens zorg je dat elk draadje met een kleurfunctie (Rood, Groen & Blauw) een weerstandje van 220Ohm bevat. Dit doe je door op positie B van dezelfde rijen (1B,5B, en 7B) een weerstandje te plaatsen. Het andere uiteinde van de weerstand prik je in op een gaatje in een rij aan de andere kant van het breadboard (bijvoorbeeld 1F). Prik nu een kabeltje naast dit weerstandje (op bijvoorbeeld 2F) en prik deze vervolgens in op een digital pin van de arduino. Voor de eerste LED kan je bijvoorbeeld 1,2 en 3 gebruiken, en voor de tweede 5,6 en 7.

We hebben nu alleen nog het kabeltje van de GND over. Deze prikken we in op een nieuwe rij aan de andere kant van het breadboard. Hiernaast prik je nog een kabeltje die je naar de GND van de arduino laat lopen (deze bevind zich boven Digital Pin 13). Je prikt het kabeltje van de GND van de andere LED naast deze twee kabeltjes in, zodat deze rij in 1 keer naar de GND van de arduino loopt (LED 1: 30I, LED2: 30H en de kabel naar GND op 30J).

Op deze manier zijn de RGB-Led's goed aangesloten.

------------------------------------------------------------------------------------------------------------------------------------------------------

Knoppen

Per tactiele button gebruik je 2 draadjes. Zorg ervoor dat deze schuin tegenover elkaar worden gesoldeerd aan de knoppen. Het ene draadje is plus (+) en de andere min (-). Prik van elke knop 1 draadje in de plus(+)-rij van het breadboard. Het andere draadje plaats je op een willekeurige plek in het breadboard (bijvoorbeeld 10A). Hiernaast (10B) zet je een nieuw draadje. Deze laat je naar een Digital Input op de arduino lopen (Knop 1: 9, Knop 2: 10, Knop 3: 11, Knop 4: 12). Naast dit draadje plaats je nog een weerstandje (12K Ohm op 5C). Het andere uiteinde prik je in op een plekje in de min(-)-rij.

Herhaal deze stap voor alle alle vier de knoppen en zorg ervoor dat elke knop een eigen rij heeft op het breadboard.

Door nu een draadje van de plus(+)-rij naar de arduino te laten lopen, zorgt het breadboard ervoor dat dit voor alle ingeprikte draadjes van de knoppen geldt. Plaats een draadje van een willekeurige plek op de plus(+)-rij, en prik deze bij de arduino in op de 3.3v plek (andere kant dan de Digital Pins). Hierdoor zorg je ervoor de de pluskant altijd 3.3volt ontvangt. De min-kant vereist ook nog een kabel. Deze laat je lopen naar de GND-functie die net onder de 3.3v is te vinden.

------------------------------------------------------------------------------------------------------------------------------------------------------

Arduino coderen:

Nu alles goed is ingeprikt, moeten we ervoor zorgen dat de arduino snapt wat hij moet doen. Hiervoor is een code nodig. Je kan deze code gebruiken voor jouw project. Een paar handige dingen om te weten:

-const Int: hier geef je aan in welke Digital Pin jouw element zit. Bijvoorbeeld 'Const Int Button1 = 9;' want de eerste knop zit in pin 9 op de arduino. Bij de Led's zeg je 'Const Int led1red = 1;', want de rode functie van de eerste ledlamp zit in pin 1.

-int ...state: hiermee geef je aan wat de status is van elke knop op het moment van opstarten van de arduino. De knoppen beginnen in dit geval allemaal vanaf 0, dus 'int Button1state = 0;' of 'int Button4state = 0;'

-pinMode: Hierbij geef je aan of een element input of output is. Zo is een lampje output en een knopje input. Bijvoorbeeld: 'pinMode(button1, INPUT);' of 'pinMode(led2blue, OUTPUT);'

Ik zal het je makkelijk maken, want dit is allemaal ingewikkelde taal. De onderstaande code kan je kopiëren naar het programma ARDUINO IDE. Hiermee kan je jouw arduino coderen. Koppel je arduino aan de pc, en zorg ervoor dat je de code upload naar de arduino.

LET OP: Ik heb voor deze code alle Digital Pins zoals hierboven beschreven gebruikt. Zorg ervoor dat je deze dus ook op de juiste plekken inprikt, of pas de const Int aan naar de goede Digital Pin.

CODE:

const int button1 = 9;
const int button2 = 10;
const int button3 = 11;
const int button4 = 12;

const int led1red = 1;
const int led1green = 2;
const int led1blue = 3;

const int led2red = 5;
const int led2green = 6;
const int led2blue = 7;

int button1state = 0;
int button2state = 0;
int button3state = 0;
int button4state = 0;

int codeSolved = 0;

void setup() {
// put your setup code here, to run once:
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);

pinMode(led1red, OUTPUT);
pinMode(led1green, OUTPUT);
pinMode(led1blue, OUTPUT);

pinMode(led2red, OUTPUT);
pinMode(led2green, OUTPUT);
pinMode(led2blue, OUTPUT);

}void loop()
{
// put your main code here, to run repeatedly:
button1state = digitalRead(button1);
button2state = digitalRead(button2);
button3state = digitalRead(button3);
button4state = digitalRead(button4);

if (codeSolved == 0 && button2state == 1)
{
digitalWrite(led1green, HIGH);
digitalWrite(led2green, HIGH);
digitalWrite(led2blue, HIGH);
delay(1000);
digitalWrite(led1green, LOW);
digitalWrite(led2green, LOW);
digitalWrite(led2blue, LOW);
codeSolved += 1;
}
else if (codeSolved == 1 && button1state == 1)

{
digitalWrite(led1green, HIGH);
digitalWrite(led2green, HIGH);
digitalWrite(led2blue, HIGH);
delay(1000);
digitalWrite(led1green, LOW);
digitalWrite(led2green, LOW);
digitalWrite(led2blue, LOW);
codeSolved += 1;
}
else if (codeSolved == 2 && button3state == 1)
{
digitalWrite(led1green, HIGH);
digitalWrite(led2green, HIGH);
digitalWrite(led2blue, HIGH);
delay(1000);
digitalWrite(led1green, LOW);
digitalWrite(led2green, LOW);
digitalWrite(led2blue, LOW);
codeSolved += 1;
}
else if (codeSolved == 3 && button4state == 1)
{
digitalWrite(led1green, HIGH);
digitalWrite(led2green, HIGH);
digitalWrite(led2blue, HIGH);
delay(1000);
digitalWrite(led1green, LOW);
digitalWrite(led2green, LOW);
digitalWrite(led2blue, LOW);
codeSolved += 1;
}
else if (button1state == 1 || button2state == 1 || button3state == 1 || button4state == 1)
{
digitalWrite(led2red, HIGH);
delay(5000);
digitalWrite(led2red, LOW);
codeSolved = 0;
}
if (codeSolved == 4)
{
digitalWrite(led1green, HIGH);
digitalWrite(led2green, HIGH);
delay(5000);
digitalWrite(led1green, LOW);
digitalWrite(led2green, LOW);
codeSolved = 0;
}

}