Herkese merhaba… Bu yazıda sizlerle beraber eggbot yapımını göreceğiz. Eggbot yapımında çok zorluk yaşadığım için sizlere kolaylıklar sağlamak için böyle bir yazı yazmaya karar verdim. Projemizin yapımında göreceğimiz, öğreneceğimiz bir yeni uygulamamızda Inkscape’dir. yumurtanın üzerinde harika bir görsel şölen oluşturacağınız, arkadaşlarınıza ve ailenize verebileceğiniz harika bir hediye olabilir. Haydi projemize başlayalım.
Kullanılan Malzemeler
- 2 Adet Step Motor Ve ULN2003 Step Motor Sürücü Seti
- Arduino UNO
- SG90 Mini Servo Motor
- Dişi-Erkek Jumper Kablo
- Erkek-Erkek Jumper Kablo
- Mini Breadboard
- Minyatür Rulman
Arduino ile EggBot Projesi Nasıl Çalışır?
Projemizin temel amacı pinpon topuna ya da yumurta üzerine çizim yapmaktır. 2 Step motordan bir tanesi yumurtayı kendi etrafında döndürürken 2. step motorumuz servo motorun ve kalemin monteli olduğu kolu sağa ve sola olmak üzere iki yönlü hareket ettirmektedir. 2. step motorumuzun hareket ettirdiği kola montajlı olan servo motorumuz ise kalemin takıldığı kolu yukarı aşağı hareket ettirerek çizeceğimiz görselde çizgiler arası atlamaya yarar. Şimdi ise Inkscape uygulamamızdaki aşamalara geçelim. Uygulamamıza gerekli kütüphaneleri ekledikten sonra uygulamamıza giriş yapıyoruz. Sol üst kısımdan Dosya> template > eggbot adımlarını izliyoruz ve çıkan yeni sekmede istediğimiz görseli çiziyoruz. Üst satırda Etkinlikler > eggbot > eggbot control adımlarını izleyerek çıkan ekranda plot sekmesinde uygula diyerek çiziminizi yapabiliyorsunuz. Aşağıdaki görselde anlattığımız şekilde step ve servo motorlarını görebilirsiniz.
Arduino Kodu
#include "AccelStepper.h" // nice lib from http://www.airspayce.com/mikem/arduino/AccelStepper/
#include "VarSpeedServo.h" // variable speed servo lib https://github.com/netlabtoolkit/VarSpeedServo
#include "SerialCommand.h" //nice lib from Stefan Rado, https://github.com/kroimon/Arduino-SerialCommand
#include <avr/eeprom.h>
#include "button.h"
#define initSting "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.x"
#define BOARD_ULN2003
//#define BOARD_ZAGGO
//#define BOARD_CNCSHIELD
#ifdef BOARD_ULN2003
// Mini Spherebot using 28BYJ-48 Steppers with ULN2003 Drivers
// http://www.thingiverse.com/thing:1461709
#define rotMicrostep 16
#define penMicrostep 16
#define servoPin 13
#define engraverPin 12
#define en1_1 4
#define en2_1 5
#define en3_1 6
#define en4_1 7
#define en1_2 8
#define en2_2 9
#define en3_2 10
#define en4_2 11
// These values work for my 28BYJ-48's, Your's might
// be different and may need adjustment.
#define rotStepsPerRev 4096
#define penStepsUseable 1100
//Buttons (uncomment to enable)
//#define prgButton 2 // PRG button
//#define penToggleButton 12 // pen up/down button
//#define motorsButton 4 // motors enable button
#endif
#define penUpPosEEAddress ((uint16_t *)0)
#define penDownPosEEAddress ((uint16_t *)2)
#define penUpRateEEAddress ((uint16_t *)4)
#define penDownRateEEAddress ((uint16_t *)6)
void setprgButtonState();
void doTogglePen();
void toggleMotors();
void makeComInterface();
void initHardware();
void moveOneStep();
//make Objects
#ifdef BOARD_ULN2003
AccelStepper rotMotor(AccelStepper::HALF4WIRE, en1_1,en3_1,en2_1,en4_1);
AccelStepper penMotor(AccelStepper::HALF4WIRE, en1_2,en3_2,en2_2,en4_2);
//AccelStepper penMotor(AccelStepper::HALF4WIRE, 2,4,3,5, true);
//AccelStepper rotMotor(AccelStepper::HALF4WIRE, 8,10,9,11, true);
#else
AccelStepper rotMotor(1, step1, dir1);
AccelStepper penMotor(1, step2, dir2);
#endif
VarSpeedServo penServo;
SerialCommand SCmd;
//create Buttons
#ifdef prgButton
Button prgButtonToggle(prgButton, setprgButtonState);
#endif
#ifdef penToggleButton
Button penToggle(penToggleButton, doTogglePen);
#endif
#ifdef motorsButton
Button motorsToggle(motorsButton, toggleMotors);
#endif
// Variables... be careful, by messing around here, everything has a reason and crossrelations...
int penMin=0;
int penMax=0;
int penUpPos=5; //can be overwritten from EBB-Command SC
int penDownPos=20; //can be overwritten from EBB-Command SC
int servoRateUp=0;
int servoRateDown=0;
long rotStepError=0;
long penStepError=0;
int penState=penUpPos;
uint32_t nodeCount=0;
unsigned int layer=0;
boolean prgButtonState=0;
uint8_t rotStepCorrection = 16/rotMicrostep ; //devide EBB-Coordinates by this factor to get EGGduino-Steps
uint8_t penStepCorrection = 16/penMicrostep ; //devide EBB-Coordinates by this factor to get EGGduino-Steps
float rotSpeed=0;
float penSpeed=0; // these are local variables for Function SteppermotorMove-Command, but for performance-reasons it will be initialized here
boolean motorsEnabled = 0;
//float rotScale = (float)rotStepsPerRev / 3200.0;
//float penScale = (float)penStepsUseable / 800.0;
void setup() {
Serial.begin(9600);
makeComInterface();
initHardware();
}
void loop() {
moveOneStep();
SCmd.readSerial();
#ifdef penToggleButton
penToggle.check();
#endif
#ifdef motorsButton
motorsToggle.check();
#endif
#ifdef prgButton
prgButtonToggle.check();
#endif
}
Kodumuzu yazdıktan sonra kütüphanelerimizin çalıştığını kontrol edelim. Benim projeyi yaparken karşılaştığım sıkıntılardan biriside kütüphanelerin güncelleme almasından dolayı çalışmamasıydı. Eğer kütüphanelerde bir sıkıntı yaşarsanız güncel sürümlerini yükleyerek tekrar denemenizi tavsiye ederim.
Kütüphanelerinde çalıştığına eminsek eğer ki şimdi sırada devremizi kurmada. Kullanacağımız malzemeleri ilk önce çalışıyor mu diye kontrol ediyoruz. Malzemelerimiz de çalıştığına göre şimdi devremizi kurmaya hazırız.
Devre Şeması
Evet devremizi kurduğumuza göre şimdi sırada 3D çizimlerimizi baskıya vermekte ben kullanmış olduğum baskıları aşağıya link şeklinde bırakıyorum dilerseniz oradan dilerseniz de kendiniz bir çizim yaparak stand yapabilirsiniz.
3D Printer’ımızdan parçaları da aldıysak artık dilediğimizi resmedebiliriz.