Projekt Magic Board 2.0
Obsah
Členové projektu
Lucie Trojanová, Studia nových médií luci.trojanova@gmail.com
Stanislav Maier, obor: Systémové inženýrství a informatika – informatika, smaier@seznam.cz
Ota Kubíček - konzultace
Motivace vzniku projektu a jeho význam
Kreslit umí každý, stačí vzít tužku nebo i klacík a vést rukou tah. V tomto projektu jsem chtěla zjistit, jaké to je kreslit bez toho, abych se dotkla papíru nebo kreslícího náčiní.
Prvotní idea bylo vytvoření drawbota - robota, který by byl ovládaný člověkem na dálku nebo kreslil obrázky zadané v počítači. Vzhledem k omezené časové kapacitě a dostupným prostředkům byl tento nápad převeden na princip vertikálního plotteru, který se používá pro vytvoření kresby, kterou fix umístěný v plotteru „vytiskne“. Magic Board 2.0 však měl nechat uživatele ovládat fixu přímo pohybem svých paží.
Projekt vychází z principu vertikálního plotteru, což zařízení, jehož účelem není tisknout obrázky nadefinované v počítači, ale vytvářet je živě pomocí pohybem zápěstí. Pohyby zápěstím jsou krouživé a plotter umožňuje kreslit pouze jedním tahem, čímž připomíná starou dětskou hračku „magická tabulka“, kde se tvořil obrázek jedním tahem pomocí dvou otočnými kolečky. Je to jednoduchý princip, který lze dále upravovat – ať už změnou kreslícího nástroje tak podkladem. Magic Board 2.0 se tak může stát herní konzolí pro dva, kde mohou dva lidé tvořit jeden obrázek nebo společně vést fixu skrze bludiště.
Použitý materiál a software
Arduino, Tinkerkit, 2x servomotor, 2x akcelerometr, 2x kabel (1m) k akcelerometrům, 2x prodlužující třivodičové kabely od servomotorů k Arduinu, USB kabel, notebook
Kreslící plocha: Dřevěná deska, 2x kovový úhelník, pěnová oboustranná lepicí páska, lihový fix, kancelářský kolík, černá lepenka, silonový vlasec, 6x stahovací elektrikářská páska (4x na upevnění motorů, 2x na umístění Arduina na černou lepenku)
2x Naviják: černá lepenka, papírová tuba od alobalu, tavící pistole, „křížový“ nástavec ze servomotorů
50 cm provázku na svislé zavěšení kreslící desky
Odkazy na knihovnu arduina a vlastní zdrojový kód
Na rozpohybování motorů byl do Příkladu „Servo“ zadán příkaz z knihovny pro Tinkerkit: Motory jsou označeny jako „Servo TKContinuousRotationServo“ a „Servo TKContinuousRotationServo_2“
Kód pro koordinaci akcelerometrů a servomotorů:
Reads two analog input pins; a T000020 Accelerometer Module with the x-axis connected to I0 pin
the y-axis connected to the I1 pin, uses the result to set the brightness of two T010111 LED Module connected on O0 and O1. Also prints the results to the serial monitor. http://www.tinkerkit.com/accelerometer/ created on Dec 2011 by Federico Vanzati modified in Jul 2013 by Matteo Loglio
This example code is in the public domain. */
// include the TinkerKit library
- include <TinkerKit.h>
TKAccelerometer accelerometer(I0, I1); // creating the object 'accelerometer' that belongs to the 'TKAccelerometer' class
// and giving the values to the desired input pins
//TKAccelerometer accelerometer(I0, I1, I2); //if you connected also the Z axis, you
//can declare it with three pins and use //functions like readZ() and readZinG().
- include <Servo.h>
Servo TKContinuousRotationServo; // create servo object to control a servo
Servo TKContinuousRotationServo_2; // a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
//TKLed xLed(O0), yLed(O1); // creating the objects 'xLed' & 'yLed' that both belongs to the 'TKLed' class
// and giving the values to the desired output pins
int xAxisValue = 0; // a variable to store theaccelerometer's x value int yAxisValue = 0; // a variable to store theaccelerometer's y value
void setup() {
// initialize serial communications at 9600 bps Serial.begin(9600); TKContinuousRotationServo.attach(O1); TKContinuousRotationServo_2.attach(O2); // attaches the servo on pin 9 to the servo object
}
void loop() {
// read the both joystick axis values: xAxisValue = accelerometer.readX(); yAxisValue = accelerometer.readY();
// set the leds brightness
// xLed.brightness(xAxisValue); // yLed.brightness(yAxisValue);
TKContinuousRotationServo.write(map(xAxisValue, 0, 1000, 0, 180));
delay(25); TKContinuousRotationServo_2.write(map(yAxisValue, 0, 1000, 0, 180)); // tell servo to go to position in variable 'pos' delay(25); Serial.print("servoX = " );
Serial.println(map(xAxisValue, 0, 1000, 0, 180));
Serial.print("servoY = " );
Serial.println(map(yAxisValue, 0, 1000, 0, 180)); // print the results to the serial monitor: Serial.print("Accelerometer X = " ); Serial.println(xAxisValue); Serial.print("\t Accelerometer Y = " ); Serial.println(yAxisValue);
// wait 10 milliseconds before the next loop delay(10);
}
Popis vývoje a konečné verze vlastního produktu
Nejprve bylo potřeba pomocí rozpohybovat a následně je sladit s akcelerometry. K tomu posloužila knihovna pro modul TinkerKit, která byla k dispozici online, jak pro ovládání motorů, tak pro ovládání akcelerometrů. Kód bylo potřeba upravit tak, aby pozice akcelerometrů správně pohybovala motory.
Zpočátku jsme měli při testování pohybu motorů zapojené oba akcelerometry do osy „X“. Servomotory se ale nepohybovaly správně, a tak bylo potřeba změnit zapojení do „Y“. Změněním zapojení do jiné osy jsme zajistili koordinaci pohybu rukou a motoru, tedy že při svislé poloze akcelerometrů se motory nehýbaly a při naklonění obou akcelerometrů doprava se oba motory točily doprava.
Na dřevěnou desku byly v rozích umístěny oba servomotory a ve spodní části uprostřed na černé lepence upevněno Arduino. Motory byly ukotveny pomocí kovových úhelníků a připevněny pomocí oboustranné pěnové lepicí pásky a každý byl zajištěn dvěma elektrikářskými stahovacími páskami. Propojení mezi servomotory a Arduinem umožnily dva prodlužovací třívodičové kabely.
Kreslící nástroj byl sestaven z vlasce, kancelářského kolíku (inspirace zde: http://www.open-electronics.org/a-low-fi-arduino-powered-vertical-plotter/) a lihového fixu. Na vlasec byly umístěny elektrikářské svorky – z důvodu stabilizace fixy, a aby nedošlo k poškození motorů – měly zajistit, aby se po přiblížení kreslícího nástroje motory vypnuly. V praxi se ukázalo, že stačí pouze pro stabilizaci.