ITTT: Hasan Sarlli - Arduino Animatie Schijf
by iforgotmydiskord in Circuits > Arduino
196 Views, 0 Favorites, 0 Comments
ITTT: Hasan Sarlli - Arduino Animatie Schijf
Voor mijn ITTT heb ik gekozen om mijn eigen versie van een aanpasbare fenakistoscoop te maken in arduino. Een traditionele fenakistocoop werkt door middel van een draaiende schijf en een spiegel, maar in mijn versie gaan we de spiegel vervangen door een flitsende LED strip(dit levert voor een soortgelijke animatie effect voor de kijker). Het enige nadeel hier van is dat je het in een donkere kamer moet bekijken, maar uiteindelijk levert het wel een sterkere optische illusie.
Supplies
ELECTRONICA
2 Arduino's (Kan met 1 arduino mits je code aanpast)
12V 2A Power supply
5V Power supply of Step down converter
DC Breakout
Stepper motor (Nema 17 42BYGHM809, andere motors kunnen ook want het ligt aan de gewicht van je animatie schijven)
A4988 Stepper Motor Driver
LED strip (WS2812B)
Female / Male jumper kabels
2 potentiometers (10KOhm in mijn geval)
2 Breadboards (kan met 1 breadboard)
2 100uF capacitors
Multimeter (optional)
PROJECT CASE
Foam boards, A3 formaat
Duct tape / Plakband
Snijmat
Box cutter of hobbymes
Geodriehoek / liniaal.
Drawing pins / Needles (optional, for structural support)
Stap 1: Bekabeling
Stap 2: Libraries
Voor we beginnen wil ik een opmerking maken over mijn gebruik van 2 arduino's: Ik kwam er te laat achter dat het niet handig is om met een delay te werken als je 2 processen tegelijkertijd moet runnen op de Arduino, dit is omdat de arduino bij elke delay alles stop zet (dus ook dingen van andere loops). Ik kwam hier wat te laat achter en had geen tijd meer om mijn gehele code opnieuw te gaan schrijven, als je wat meer tijd & verstand hebt van Arduino (vooral van de Blinkwithoutdelay example sketch) kan je een versie maken dat maar gebruik maakt van 1 Arduino.
Voor mijn project gaan we maar gebruik maken van één externe library: FastLED. Dit is een library dat gebruikt wordt om makkelijk een grote hoeveelheid LEDs te kunnen besturen. Je kan FastLED makkelijk downloaden via de library manager in Arduino of zelf het zelf importeren door het via Github te downloaden. wanneer we een project beginnen kunnen we FastLED makkelijk gebruiken door een kleine stukje code te gebruiken.
Step 3: Code
Stepper motor code, door gebruik te maken van delayMicroseconds gebonden aan een potentiometer kunnen we de snelheid van onze motor besturen. De direction & step pins kunnen veranderd worden gebaseerd op welke pins je zelf hebt gebruikt. Maximum & minimum snelheid kan ook aangepast worden door gebruik te maken van de constrained input.
// Connections to A4988
const int dirPin = 2; // Direction
const int stepPin = 3; // Step
// Motor steps per rotation
const int STEPS_PER_REV = 200;
void setup()
{
// Setup the pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
motorControls();
}
void motorControls()
{
int input = analogRead (A0); // Read data from Analog 0, potentiometer
int constrainedInput = constrain(input,200, 3500); // Constrain the input for a minimum and maximum number, used here with the potentiometer
// Set motor direction
digitalWrite(dirPin,LOW);
// Stepper Motor Speed
for(int x = 0; x < STEPS_PER_REV; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(constrainedInput);
digitalWrite(stepPin,LOW);
delayMicroseconds(constrainedInput);
}
}
We gebruiken een soortgelijk stuk code om de snelheid van onze LED flitsen te besturen. Eerst define je hoeveel LEDs je hebt en welke pin je gebruikt. Snelheid van de flitsen kan beïnvloed worden door met de constrained input te gaan spelen.
#include "FastLED.h"
#define DATA_PIN 7 // Define which pin is used for the data line
#define NUM_LEDS 22 // Define the amount of LEDS in your strip
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2812B, DATA_PIN,GRB>(leds, NUM_LEDS);
}
void loop() {
int input = analogRead (A0); // Read data from Analog 0, potentiometer
int constrainedInput = constrain(input,60, 300); // Constrain the input to a min and max value
fill_solid(leds, 22, CRGB(128,128,128)); // CRGB set to 50% brightness with this value, can change at will or bind to another potentiometer
FastLED.show(); // Use this to show the led
delay(constrainedInput);
FastLED.clear(); // Turns off all LEDs
FastLED.show();
delay(constrainedInput);
}
Stap 5: Test It
Nu we klaar zijn met onze code kunnen we eindelijk gebruik maken van een animatie schijf, de settings moet je gaan aanpassen gebaseerd op de hoeveelheid frames op je schijf. (Video flitst zwaar, dus een warning).
Stap 6: Case Cut Out
Voordat ik met mijn case begon had ik eerst een 3D model gemaakt om te kijken hoe mijn doos in elkaar zou zitten. Ik heb gebruik gemaakt van finger joints om mijn doos makkelijk aan elkaar te kunnen snappen, dit zorgt er wel voor dat je vrij precies moet zijn met de stukken dat je afsnijd. De afmetingen moet je later wel gaan aanpassen voor je eigen benodigheden. Maar mijn uiteindelijke cut outs waren als volgt:
2 * 27*10 (1CM aan links & rechts gebruikt om andere cut outs aan elkaar te pinnen).
2 * 27*10 met een gat van 0.5 * 23CM op 1CM en 3.5CM, hier worden extra platen in geschoven voor de stepper motor en een bodem (en kabels, als je de gaten wat groter maakt op bepaalde punten).
1 27*27*0.5CM Plaat voor de deksel met een 1*1 gat voor de stepper motor.
1 25*25*0.5CM Plaat voor extra support aan de onderkant (snapt makkelijk, kan gelijmd worden).
1 * 23*27*0.5CM plaat voor de bodem.
1 * 10*25*0.5CM plaat als extra platform voor stepper motor (zorgt er voor dat het niet tussen alle andere kabels zit & juiste hoogte heeft om door de bovenkant heen te kunnen gaan).
2 * 3*25*0.5CM platen om aan de zijkanten van de extra platform te zetten, houdt de motor vast tijdens het bewegen.
1 * 27*2*0.5CM extra ondersteuning voor de LEDs, vastgepint aan het deksel
2* 13.5*2*0.5CM extra ondersteuning voor de LEDs, vastgepint aan het deksel
Voor extra support had ik ook gebruik gemaakt van allemaal pins (punaises, naalden etc). Deze kun je makkelijk verwijderen als je ze niet meer nodig hebt en leveren makkelijk wat extra stabilitiet waar het nodig is.