The Image Box

by Timo_S in Circuits > Arduino

258 Views, 1 Favorites, 0 Comments

The Image Box

image (7).png
image (1).png
image (2).png
image (3).png

Wat is het concept?

Voor het ITTT-project (If This Then That) heb ik een ontwerp gemaakt dat de ImageBox heet. De ImageBox is een driehoekige doos met aan alle drie de zijden een decoratief frame waarin een afbeelding staat. Vervolgens kun je door op een knop te drukken de afbeeldingen naar een ander frame verplaatsen. Hierdoor wordt de afbeelding in een andere context geplaatst en kan deze een andere betekenis krijgen. Met de ImageBox kun je in totaal 9 verschillende combinaties maken.

Ik zocht als eerste naar een manier om een afbeelding te vervormen en een nieuwe context te geven. Ik wilde ook iets maken dat vergelijkbaar was met het effect dat een view-master op mij heeft, namelijk een soort verrassingsgevoel. Het leek mij leuk om elk plaatje telkens in een andere situatie (paneel) te kunnen plaatsen om een nieuw perspectief te vinden of er een nieuw verhaal bij te bedenken. Ten slotte leek het me in het concept erg leuk dat iedereen het naar eigen wens kon aanpassen. Je kunt er je eigen draai aan geven door de plaatjes in de ImageBox aan te passen. Als je zelf de frames wilt ontwerpen, kan dat ook als je beschikt over software waarin je vectorafbeeldingen kunt tekenen.


Een aantal Iteraties

Iteratie 1:

Toen het project begon, was ik eerst bezig met het bedenken van een idee dat goed genoeg aansloot op het ITTT-project. Na een aantal ideeën te hebben overwogen, kwam ik uit bij dit concept van de ImageBox. De eerste iteratie in de afbeelding hieronder was een snelle schets om het idee vast te leggen. In de eerste iteratie was mijn concept nog een soort bord. Het had toen nog maar één frame en twee afbeeldingen, vergelijkbaar met een reclamebord.



Iteratie 2:

Na iteratie 1 was ik ervan overtuigd dat ik dit concept kon verbeteren en interessanter kon maken. Bij de tweede iteratie kwam ik al dichterbij het uiteindelijke concept. Ik dacht dat het leuker zou zijn als er meer afwisseling was in de afbeeldingen. Daarvoor moesten er dus meer plaatsen zijn om meerdere afbeeldingen achter elkaar te plaatsen, en daarom besloot ik meerdere assen te gebruiken. Hieruit ontstond de driehoeksvorm die het uiteindelijke concept heeft.



Iteratie 3:

In deze iteratie ging ik kijken welke onderdelen ik nodig had om iteratie 2 te realiseren. Al snel kwam ik er echter achter dat de onderdelen die ik dacht nodig te hebben niet zouden werken of onnodig waren. Ik had namelijk in gedachten om drie servo motoren te gebruiken. Toen ik erachter kwam dat deze niet 360 graden konden draaien, besloot ik over te stappen op het gebruik van een stepper motor. Ook drie motors bleek ik niet meer nodig te hebben, en dus koos ik maar één motor te gebruiken. (De afbeelding hieronder laatzien dat ik nog met de Servo aan het uitproberen was.)


Iteratie 4:

Tijdens deze iteratie bleek het werken met de de zwakke Stepper motor toch erg uitdagend. De constructie met tandwielen en assen in elke hoek van de box, bleek de motor niet te trekken. Na heel wat opties af te hebben gewogen en uit te hebben geprobeerd, ben ik tot het uiteindelijke ontwerp gekomen dat geen tandwielen en assen gebruikt. Je kun deze nu maken met volgende stappen.


Hoe ik het heb gemaakt

Ik heb de onderdelen online besteld. De box heb ik gelazer cut uit platen. Ik heb alle onderdelen op hun plaats gelijmd met een lijmpistool. Ik koos er op een laat moment nog voor om één van mijn panelen te beschilderen met plakkaat verf. Het is niet nodig maar ik zou het aanraden omdat het een leuk effect geeft en de Box verder personaliseert. In de stap voor stap uitleg zal ik in meer detail gaan.

Supplies

Voor de Arduino-Setup van dit project heb je de volgende onderdelen nodig:

- Arduino Uno 1X

- Stepper Motor 28BYJ-48 1X

- ULN2003 Motor Driver Module 1X

- Button module 1X (not a regulare button)

- Wires with male end female heads 10X

- Batery with to power Arduino

- Visuino Software

Connecting Arduino Parts

image (4).png

Wat je als eerste moet doen, is de onderdelen aan elkaar bevestigen. De keuze is aan jou of je de draden waar mogelijk aan het component wilt solderen. Dit is echter niet gemakkelijk zonder soldeerervaring en vergroot de kans dat je de onderdelen onbruikbaar maakt. Gelukkig zijn, afgezien van de Arduino Uno, de meeste onderdelen niet erg duur. Volg de stappen nauwkeurig, anders werkt de opstelling mogelijk niet goed met de code. Verbind de onderdelen als volgt:

Box Building

image (5).png

Vervolgens ga je je Box lazercutten je kan de box. Ik heb heb de volgende site gebruikt voor mijn driehoekige Box:

Make A Box: Generate Laser Cutter Templates for Enclosures!

Natuurlijk kun je ook een box maken met meer dan drie zijden, maar niet minder. Let bij het genereren van deze Box goed op de afmetingen. Ten eerste moet er genoeg ruimte zijn voor je elektronica. Als je onderdelen niet passen, moet je een geheel nieuwe box maken. Ten tweede pas je de grootte van onderdelen, zoals de frames en afbeeldingen, aan op de grootte van de box. Ik zou aanraden om een box te maken met een hoogte van 26 cm en de zijvlakken een breedte van 22 cm te geven, zodat de afmetingen van de frames hiermee overeenkomen. Deze frames zullen dus een vierkant van 22 cm² zijn. Dit is slechts een richtlijn waar je soms bewust van kunt afwijken om het frame hier en daar wat uit te laten steken. Je kunt ook gebruikmaken van de onderstaande frames, maar deze moeten nog worden omgezet naar een formaat dat de lasercutter kan gebruiken.


Visuino

Voor de code van dit project moest ik een manier vinden om de motor in één richting te laten draaien, maar ook een specifieke hoeveelheid rotatie te realiseren bij elke klik van de knop. Ik ontdekte een methode die gebruikmaakt van het programma Visuino. Met deze methode kun je de standaard 360 graden rotatie van een Stepper motor vergroten tot elke gewenste hoeveelheid. Met Visuino kun je code genereren op basis van de toegevoegde componenten en de gewenste functionaliteit. Het gegenereerde codefragment werkt echter niet zelfstandig, maar vereist een Visuino-library. Om een werkende code te krijgen, volg de volgende video aandachtig:

Move a stepper motor to an exact position - YouTube


Als alles goed gelukt is komt je uit op een gegenereerde code zoals deze. De regels die zijn uitgecomment geven een bondige uitleg van wat de regel code doet of betekent:


//----------------------------------------------


//


// Sketch gegenereerd door Visuino


// www.visuino.com


// Versie 8.0.0.78


//


//------------------ Broncode --------------------


//


// Stepper code 1.visuino


//


//----------------------------------------------




// Nodige bibliotheken toevoegen

#include <OpenWire.h>

#include <Mitov.h>

#include <Mitov_Button.h>

#include <Mitov_Counter.h>

#include <Mitov_BinaryGenerators.h>

#include <Mitov_Stepper.h>


// Het gebruikte Arduino-board definiëren (in dit geval Arduino Uno)

#define VISUINO_ARDUINO_UNO


// Lidvariabelen voor gedeelde componenten

namespace ComponentVariabelen

{

class

{

public:

bool Waarde1 : 1;

bool Waarde2 : 1;

bool Waarde3 : 1;

bool Waarde4 : 1;

uint32_t Waarde5 : 31;

bool Waarde6 : 1;

bool Waarde7 : 1;

uint32_t Waarde8 : 4;

bool Waarde9 : 1;

bool Waarde10 : 1;

} Bitvelden;


// Getter- en setterfuncties definiëren voor elke gedeelde variabele

class Variabele1

{

public:

inline static bool KrijgWaarde() { return Bitvelden.Waarde1; }

inline static void ZetWaarde(bool AWaarde) { Bitvelden.Waarde1 = AWaarde; }

};


// ... (Variabele2 tot Variabele10 volgen hetzelfde patroon)

};


// Constanten definiëren die specifiek zijn voor het gebruikte Arduino-board

namespace VisuinoConstanten

{

class FloatWaarde0

{

public:

inline static constexpr float KrijgWaarde() { return 200; }

};


// ... (FloatWaarde1 en andere constanten volgen hetzelfde patroon)

};


// Pin-call-declaraties

namespace PinOproepen

{

class PinOproepOntvangen0

{

public:

void Informeer(void *_Data);

};


// ... (PinOproepOntvangen1 tot PinOproepOntvangen3 volgen hetzelfde patroon)

};


// Arduino-boarddeclaraties

namespace BoardDeclaraties

{

// Een specifiek type digitale uitvoerkanaal voor Arduino definiëren (in dit geval Kanaal 2)

namespace Types

{

typedef Mitov::ArduinoDigitalOutputChannel<

Mitov::ConstantProperty<22, bool, false>, // IsAnalog

Mitov::ConstantProperty<24, bool, false>, // IsCombinedInOut

Mitov::ConstantProperty<21, bool, false>, // IsOpenDrain

Mitov::ConstantProperty<26, bool, false>, // IsOutput

Mitov::ConstantProperty<20, bool, false>, // IsPullDown

Mitov::ConstantProperty<5, bool, false>, // IsPullUp

Mitov::ConstantProperty<23, bool, false>, // IsRawInput

Mitov::DigitalPin_EmbeddedPinImplementation<6, ::PinOproepen::PinO


Als deze code op de Arduino Uno is geüpload zal je motor bij elke klik een specifieke hoeveelheid roteren. De rotatie hoeveelheid hangt weer af van het formaat van je rol met afbeeldingen, dus sla dit bestand goed op. Als laatste stap ga je namelijk terug naar de waardes van je rotatie om ze aan te passen op jouw box. In mijn code heb ik een rotatie van 4100, maar de kan is zeker aanwezig dat jouw apparaat en andere waarde nodig heeft.

Preparing the Box

image (7).png
image (8).png
image (9).png
IMG-5290.jpg
Arduino werkende image Box

Als je de onderdelen voor de Box hebt, is het tijd om ze gereed te maken voor het huisvesten van je Arduino-component. Hiervoor moet je terug naar de lazercutter om een aantal onderdelen uit te snijden.

  • Als eerste moet je openingen snijden in de zijkanten van je box die groot genoeg zijn om de afbeelding te kunnen zien draaien. De grootte van deze openingen hangt af van het frame dat je er overheen gaat plaatsen. Probeer ongeveer dezelfde grootte aan te houden als de openingen in je frames. Je kunt de openingen ook handmatig uitzagen (dat heb ik gedaan), maar ik kan me voorstellen dat een lasersnijder nauwkeuriger is.


  • Op de bovenkant van je Box komt een knop die je moet kunnen indrukken. Je hebt dus een gat nodig waar de knop in past. Je kunt dit gat eenvoudig boren, maar ook lasersnijden is een mogelijke optie.


Als laatste heb je een platform nodig om de motor met de rol afbeeldingen op te plaatsen. Ik heb mijn platform gemaakt van een tweede bovenkant van de box. Als je de randen ervan afsnijdt, past het platform in de box.

De box is expres iets hoger dan de frames, waardoor er binnenin de box ruimte overblijft om alle componenten te plaatsen. Behalve de motor, die komt op een apart platformpje precies boven de andere onderdelen. In het tussenplatform moet een klein gat worden gemaakt voor de draadjes die naar de motor en de knop lopen. Ik heb een gleuf gemaakt voor de draadjes naar de motor, zoals te zien is in de bovenstaande afbeelding. Ik raad ook aan om een gat te maken in één van de hoeken van de box, zodat de draadjes die naar de knop lopen niet in de weg zitten en netjes langs de randen kunnen worden weggewerkt.

Als laatste stap plaats je de afbeeldingsrol op de Stepper motor. Plaats alle onderdelen op dezelfde manier als te zien is in de bovenstaande afbeelding. Sluit de batterij aan op de Arduino en sluit de box af door alle onderdelen vast te lijmen, behalve één paneel zodat je nog bij de batterij kunt. Als alles goed is gegaan, zal de box er ongeveer uitzien zoals op de afbeelding hierboven.



Hier is de link naar de werkende ImageBox:

https://youtu.be/0rBxWymt3Zw