Robotik
OKUDUĞUNUZ KONU
Arduino Android Kontrollü Örümcek Robot Yapımı
160

Arduino Android Kontrollü Örümcek Robot Yapımı

Yazar : Alper Gencan29 Aralık 2016

Herkese merhaba. Uzun bir aradan sonra yazmaya devam ediyorum. Bu yazımda sizlere yapmış olduğum örümcek robottan bahsedeceğim. Hep yapmak istediğim projelerden biriydi ama motorlar maliyetli olduğu için bir türlü yapamıyordum. Şimdi yapma imkanı buldum ve sizlerle paylaşmak istedim.

İşe öncelikle malzemeleri temin etmekle başladım. Resimde görüldüğü gibi örümcek robot 4 bacaklı ve her bacakta 3 adet servo sg90 bulunmakta.

Malzemeleri Satın Al

Bu projenin malzemelerini tek sepette satın alabilirsiniz.Malzemeler demonte olarak gönderilir. “Satın Almak İçin Yukarıda Butona Basınız”

Malzemeler:

NOT-1: Kaynak gösterdiğim yerde bütün 3d parçalar bulunmaktadır. Ancak “s_hold ” isimli parça biraz ayarsız olmuş. Sorun şu ki parça servonun hareketini sağlıyor eklem gibi. Ancak parçanın silindir kısmı girmesi gereken yere girmiyor yani çaplar aynı gibi. Bende bu parçanın çapını Solid’de düşürerek yeniden yaptım bu sayede servo rahat hareket ediyor. Genede isteyen istediğini basabilir. Kendi parçam dosya içerisindedir.

Basılması Gereken Parçalar:

  • 1 x body_d.stl
  • 1 x body_u.stl
  • 2 x coxa_l.stl
  • 2 x coxa_r.stl
  • 2 x tibia_l.stl
  • 2 x tibia_r.stl
  • 4 x femur_1.stl
  • 8 x s_hold.stl

Şimdi bütün plastik parçaları bastıktan sonra montaja geçiyoruz.Yapmanız gereken şey öncelikle servo motorları girmesi gereken yerlere sokarken servonun kablosuna zarar vermemek için servonun altında bulunan 4 adet vidayı çıkarın ve kapağı kaldırın. Servoyu yerine yerleştirdikten sonra tekrar kapağı takarak vidalayın.

NOT-2: Servo motorların üst plastik kısımlarını vidalamayın henüz. Servo motorları yerine takarken verdiğim kaynakları takip ederek yapınız ve motorların ne tarafa dönük olduğuna dikkat edin.

Motorların bacak sırasına göre bağlanması gerekmektedir. Bacak sırasına göre motorlar numaralandırılmıştır. Aynı zamanda Arduino kodu içerisinde hangi motorun hangi pine bağlanması gerektiği yazmaktadır.

Montaj bittikten sonra motorların açılarının ayarlanması için bir ayar kodu bulunmaktadir. Servoların üst plastik parçaları bu test kodu yüklendikten sonra vidalanması gerekmektedir. Burada dikkat etmeniz gereken verdiğim kaynakta gösterdiği gibi parçaların konumları ve hizaları çok önemli olabildiğince simetrik yapmaya çalışın ve ondan sonra servo motorların üst plastik parçasını vidalayın.

Servoların Ayar Kodu :

 http://www.instructables.com/id/DIY-Spider-RobotQuad-robot-Quadruped/step11/Locate-the-initial-position-for-legs/

Ayar kodundan sonra servoları da vidaladıysanız işlem tamamdır. Artık asıl kodu yükleyebilirsiniz.

Arduino Kodu: 

http://www.instructables.com/id/DIY-Spider-RobotQuad-robot-Quadruped/step13/It-is-showtime/

/* Includes ------------------------------------------------------------------*/
#include <Servo.h> //to define and control servos
#include <FlexiTimer2.h>//to set a timer to manage all servos
/* Servos --------------------------------------------------------------------*/
//define 12 servos for 4 legs
Servo servo[4][3];
//define servos' ports
const int servo_pin[4][3] = { {2, 3, 4}, {5, 6, 7}, {8, 9, 10}, {11, 12, 13} };
/* Size of the robot ---------------------------------------------------------*/
const float length_a = 55;
const float length_b = 77.5;
const float length_c = 27.5;
const float length_side = 71;
const float z_absolute = -28;
/* Constants for movement ----------------------------------------------------*/
const float z_default = -50, z_up = -30, z_boot = z_absolute;
const float x_default = 62, x_offset = 0;
const float y_start = 0, y_step = 40;
/* variables for movement ----------------------------------------------------*/
volatile float site_now[4][3]; //real-time coordinates of the end of each leg
volatile float site_expect[4][3]; //expected coordinates of the end of each leg
float temp_speed[4][3]; //each axis' speed, needs to be recalculated before each movement
float move_speed; //movement speed
float speed_multiple = 1; //movement speed multiple
const float spot_turn_speed = 4;
const float leg_move_speed = 8;
const float body_move_speed = 3;
const float stand_seat_speed = 1;
volatile int rest_counter; //+1/0.02s, for automatic rest
//functions' parameter
const float KEEP = 255;
//define PI for calculation
const float pi = 3.1415926;
/* Constants for turn --------------------------------------------------------*/
//temp length
const float temp_a = sqrt(pow(2 * x_default + length_side, 2) + pow(y_step, 2));
const float temp_b = 2 * (y_start + y_step) + length_side;
const float temp_c = sqrt(pow(2 * x_default + length_side, 2) + pow(2 * y_start + y_step + length_side, 2));
const float temp_alpha = acos((pow(temp_a, 2) + pow(temp_b, 2) - pow(temp_c, 2)) / 2 / temp_a / temp_b);
//site for turn
const float turn_x1 = (temp_a - length_side) / 2;
const float turn_y1 = y_start + y_step / 2;
const float turn_x0 = turn_x1 - temp_b * cos(temp_alpha);
const float turn_y0 = temp_b * sin(temp_alpha) - turn_y1 - length_side;
/* ---------------------------------------------------------------------------*/

/*
- setup function
---------------------------------------------------------------------------*/
void setup()
{
//start serial for debug
Serial.begin(115200);
Serial.println("Robot starts initialization");
//initialize default parameter
set_site(0, x_default - x_offset, y_start + y_step, z_boot);
set_site(1, x_default - x_offset, y_start + y_step, z_boot);
set_site(2, x_default + x_offset, y_start, z_boot);
set_site(3, x_default + x_offset, y_start, z_boot);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
site_now[i][j] = site_expect[i][j];
}
}
//start servo service
FlexiTimer2::set(20, servo_service);
FlexiTimer2::start();
Serial.println("Servo service started");
//initialize servos
servo_attach();
Serial.println("Servos initialized");
Serial.println("Robot initialization Complete");
}
void servo_attach(void)
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
servo[i][j].attach(servo_pin[i][j]);
delay(100);
}
}
}

void servo_detach(void)
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
servo[i][j].detach();
delay(100);
}
}
}
/*
- loop function
---------------------------------------------------------------------------*/
void loop()
{
Serial.println("Stand");
stand();
delay(2000);
Serial.println("Step forward");
step_forward(5);
delay(2000);
Serial.println("Step back");
step_back(5);
delay(2000);
Serial.println("Turn left");
turn_left(5);
delay(2000);
Serial.println("Turn right");
turn_right(5);
delay(2000);
Serial.println("Hand wave");
hand_wave(3);
delay(2000);
Serial.println("Hand wave");
hand_shake(3);
delay(2000);
Serial.println("Sit");
sit();
delay(5000);
}

/*
- sit
- blocking function
---------------------------------------------------------------------------*/
void sit(void)
{
move_speed = stand_seat_speed;
for (int leg = 0; leg < 4; leg++)
{
set_site(leg, KEEP, KEEP, z_boot);
}
wait_all_reach();
}

/*
- stand
- blocking function
---------------------------------------------------------------------------*/
void stand(void)
{
move_speed = stand_seat_speed;
for (int leg = 0; leg < 4; leg++) { set_site(leg, KEEP, KEEP, z_default); } wait_all_reach(); } /* - spot turn to left - blocking function - parameter step steps wanted to turn ---------------------------------------------------------------------------*/ void turn_left(unsigned int step) { move_speed = spot_turn_speed; while (step-- > 0)
{
if (site_now[3][1] == y_start)
{
//leg 3&1 move
set_site(3, x_default + x_offset, y_start, z_up);
wait_all_reach();

set_site(0, turn_x1 - x_offset, turn_y1, z_default);
set_site(1, turn_x0 - x_offset, turn_y0, z_default);
set_site(2, turn_x1 + x_offset, turn_y1, z_default);
set_site(3, turn_x0 + x_offset, turn_y0, z_up);
wait_all_reach();

set_site(3, turn_x0 + x_offset, turn_y0, z_default);
wait_all_reach();

set_site(0, turn_x1 + x_offset, turn_y1, z_default);
set_site(1, turn_x0 + x_offset, turn_y0, z_default);
set_site(2, turn_x1 - x_offset, turn_y1, z_default);
set_site(3, turn_x0 - x_offset, turn_y0, z_default);
wait_all_reach();

set_site(1, turn_x0 + x_offset, turn_y0, z_up);
wait_all_reach();

set_site(0, x_default + x_offset, y_start, z_default);
set_site(1, x_default + x_offset, y_start, z_up);
set_site(2, x_default - x_offset, y_start + y_step, z_default);
set_site(3, x_default - x_offset, y_start + y_step, z_default);
wait_all_reach();

set_site(1, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
else
{
//leg 0&2 move
set_site(0, x_default + x_offset, y_start, z_up);
wait_all_reach();

set_site(0, turn_x0 + x_offset, turn_y0, z_up);
set_site(1, turn_x1 + x_offset, turn_y1, z_default);
set_site(2, turn_x0 - x_offset, turn_y0, z_default);
set_site(3, turn_x1 - x_offset, turn_y1, z_default);
wait_all_reach();

set_site(0, turn_x0 + x_offset, turn_y0, z_default);
wait_all_reach();

set_site(0, turn_x0 - x_offset, turn_y0, z_default);
set_site(1, turn_x1 - x_offset, turn_y1, z_default);
set_site(2, turn_x0 + x_offset, turn_y0, z_default);
set_site(3, turn_x1 + x_offset, turn_y1, z_default);
wait_all_reach();

set_site(2, turn_x0 + x_offset, turn_y0, z_up);
wait_all_reach();

set_site(0, x_default - x_offset, y_start + y_step, z_default);
set_site(1, x_default - x_offset, y_start + y_step, z_default);
set_site(2, x_default + x_offset, y_start, z_up);
set_site(3, x_default + x_offset, y_start, z_default);
wait_all_reach();

set_site(2, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
}
}

/*
- spot turn to right
- blocking function
- parameter step steps wanted to turn
---------------------------------------------------------------------------*/
void turn_right(unsigned int step)
{
move_speed = spot_turn_speed;
while (step-- > 0)
{
if (site_now[2][1] == y_start)
{
//leg 2&0 move
set_site(2, x_default + x_offset, y_start, z_up);
wait_all_reach();

set_site(0, turn_x0 - x_offset, turn_y0, z_default);
set_site(1, turn_x1 - x_offset, turn_y1, z_default);
set_site(2, turn_x0 + x_offset, turn_y0, z_up);
set_site(3, turn_x1 + x_offset, turn_y1, z_default);
wait_all_reach();

set_site(2, turn_x0 + x_offset, turn_y0, z_default);
wait_all_reach();

set_site(0, turn_x0 + x_offset, turn_y0, z_default);
set_site(1, turn_x1 + x_offset, turn_y1, z_default);
set_site(2, turn_x0 - x_offset, turn_y0, z_default);
set_site(3, turn_x1 - x_offset, turn_y1, z_default);
wait_all_reach();

set_site(0, turn_x0 + x_offset, turn_y0, z_up);
wait_all_reach();

set_site(0, x_default + x_offset, y_start, z_up);
set_site(1, x_default + x_offset, y_start, z_default);
set_site(2, x_default - x_offset, y_start + y_step, z_default);
set_site(3, x_default - x_offset, y_start + y_step, z_default);
wait_all_reach();

set_site(0, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
else
{
//leg 1&3 move
set_site(1, x_default + x_offset, y_start, z_up);
wait_all_reach();

set_site(0, turn_x1 + x_offset, turn_y1, z_default);
set_site(1, turn_x0 + x_offset, turn_y0, z_up);
set_site(2, turn_x1 - x_offset, turn_y1, z_default);
set_site(3, turn_x0 - x_offset, turn_y0, z_default);
wait_all_reach();

set_site(1, turn_x0 + x_offset, turn_y0, z_default);
wait_all_reach();

set_site(0, turn_x1 - x_offset, turn_y1, z_default);
set_site(1, turn_x0 - x_offset, turn_y0, z_default);
set_site(2, turn_x1 + x_offset, turn_y1, z_default);
set_site(3, turn_x0 + x_offset, turn_y0, z_default);
wait_all_reach();

set_site(3, turn_x0 + x_offset, turn_y0, z_up);
wait_all_reach();

set_site(0, x_default - x_offset, y_start + y_step, z_default);
set_site(1, x_default - x_offset, y_start + y_step, z_default);
set_site(2, x_default + x_offset, y_start, z_default);
set_site(3, x_default + x_offset, y_start, z_up);
wait_all_reach();

set_site(3, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
}
}

/*
- go forward
- blocking function
- parameter step steps wanted to go
---------------------------------------------------------------------------*/
void step_forward(unsigned int step)
{
move_speed = leg_move_speed;
while (step-- > 0)
{
if (site_now[2][1] == y_start)
{
//leg 2&1 move
set_site(2, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(2, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(2, x_default + x_offset, y_start + 2 * y_step, z_default);
wait_all_reach();

move_speed = body_move_speed;

set_site(0, x_default + x_offset, y_start, z_default);
set_site(1, x_default + x_offset, y_start + 2 * y_step, z_default);
set_site(2, x_default - x_offset, y_start + y_step, z_default);
set_site(3, x_default - x_offset, y_start + y_step, z_default);
wait_all_reach();

move_speed = leg_move_speed;

set_site(1, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(1, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(1, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
else
{
//leg 0&3 move
set_site(0, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(0, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(0, x_default + x_offset, y_start + 2 * y_step, z_default);
wait_all_reach();

move_speed = body_move_speed;

set_site(0, x_default - x_offset, y_start + y_step, z_default);
set_site(1, x_default - x_offset, y_start + y_step, z_default);
set_site(2, x_default + x_offset, y_start, z_default);
set_site(3, x_default + x_offset, y_start + 2 * y_step, z_default);
wait_all_reach();

move_speed = leg_move_speed;

set_site(3, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(3, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(3, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
}
}

/*
- go back
- blocking function
- parameter step steps wanted to go
---------------------------------------------------------------------------*/
void step_back(unsigned int step)
{
move_speed = leg_move_speed;
while (step-- > 0)
{
if (site_now[3][1] == y_start)
{
//leg 3&0 move
set_site(3, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(3, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(3, x_default + x_offset, y_start + 2 * y_step, z_default);
wait_all_reach();

move_speed = body_move_speed;

set_site(0, x_default + x_offset, y_start + 2 * y_step, z_default);
set_site(1, x_default + x_offset, y_start, z_default);
set_site(2, x_default - x_offset, y_start + y_step, z_default);
set_site(3, x_default - x_offset, y_start + y_step, z_default);
wait_all_reach();

move_speed = leg_move_speed;

set_site(0, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(0, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(0, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
else
{
//leg 1&2 move
set_site(1, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(1, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(1, x_default + x_offset, y_start + 2 * y_step, z_default);
wait_all_reach();

move_speed = body_move_speed;

set_site(0, x_default - x_offset, y_start + y_step, z_default);
set_site(1, x_default - x_offset, y_start + y_step, z_default);
set_site(2, x_default + x_offset, y_start + 2 * y_step, z_default);
set_site(3, x_default + x_offset, y_start, z_default);
wait_all_reach();

move_speed = leg_move_speed;

set_site(2, x_default + x_offset, y_start + 2 * y_step, z_up);
wait_all_reach();
set_site(2, x_default + x_offset, y_start, z_up);
wait_all_reach();
set_site(2, x_default + x_offset, y_start, z_default);
wait_all_reach();
}
}
}

// add by RegisHsu

void body_left(int i)
{
set_site(0, site_now[0][0] + i, KEEP, KEEP);
set_site(1, site_now[1][0] + i, KEEP, KEEP);
set_site(2, site_now[2][0] - i, KEEP, KEEP);
set_site(3, site_now[3][0] - i, KEEP, KEEP);
wait_all_reach();
}

void body_right(int i)
{
set_site(0, site_now[0][0] - i, KEEP, KEEP);
set_site(1, site_now[1][0] - i, KEEP, KEEP);
set_site(2, site_now[2][0] + i, KEEP, KEEP);
set_site(3, site_now[3][0] + i, KEEP, KEEP);
wait_all_reach();
}

void hand_wave(int i)
{
float x_tmp;
float y_tmp;
float z_tmp;
move_speed = 1;
if (site_now[3][1] == y_start)
{
body_right(15);
x_tmp = site_now[2][0];
y_tmp = site_now[2][1];
z_tmp = site_now[2][2];
move_speed = body_move_speed;
for (int j = 0; j < i; j++)
{
set_site(2, turn_x1, turn_y1, 50);
wait_all_reach();
set_site(2, turn_x0, turn_y0, 50);
wait_all_reach();
}
set_site(2, x_tmp, y_tmp, z_tmp);
wait_all_reach();
move_speed = 1;
body_left(15);
}
else
{
body_left(15);
x_tmp = site_now[0][0];
y_tmp = site_now[0][1];
z_tmp = site_now[0][2];
move_speed = body_move_speed;
for (int j = 0; j < i; j++)
{
set_site(0, turn_x1, turn_y1, 50);
wait_all_reach();
set_site(0, turn_x0, turn_y0, 50);
wait_all_reach();
}
set_site(0, x_tmp, y_tmp, z_tmp);
wait_all_reach();
move_speed = 1;
body_right(15);
}
}

void hand_shake(int i)
{
float x_tmp;
float y_tmp;
float z_tmp;
move_speed = 1;
if (site_now[3][1] == y_start)
{
body_right(15);
x_tmp = site_now[2][0];
y_tmp = site_now[2][1];
z_tmp = site_now[2][2];
move_speed = body_move_speed;
for (int j = 0; j < i; j++)
{
set_site(2, x_default - 30, y_start + 2 * y_step, 55);
wait_all_reach();
set_site(2, x_default - 30, y_start + 2 * y_step, 10);
wait_all_reach();
}
set_site(2, x_tmp, y_tmp, z_tmp);
wait_all_reach();
move_speed = 1;
body_left(15);
}
else
{
body_left(15);
x_tmp = site_now[0][0];
y_tmp = site_now[0][1];
z_tmp = site_now[0][2];
move_speed = body_move_speed;
for (int j = 0; j < i; j++)
{
set_site(0, x_default - 30, y_start + 2 * y_step, 55);
wait_all_reach();
set_site(0, x_default - 30, y_start + 2 * y_step, 10);
wait_all_reach();
}
set_site(0, x_tmp, y_tmp, z_tmp);
wait_all_reach();
move_speed = 1;
body_right(15);
}
}

/*
- microservos service /timer interrupt function/50Hz
- when set site expected,this function move the end point to it in a straight line
- temp_speed[4][3] should be set before set expect site,it make sure the end point
move in a straight line,and decide move speed.
---------------------------------------------------------------------------*/
void servo_service(void)
{
sei();
static float alpha, beta, gamma;

for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++) { if (abs(site_now[i][j] - site_expect[i][j]) >= abs(temp_speed[i][j]))
site_now[i][j] += temp_speed[i][j];
else
site_now[i][j] = site_expect[i][j];
}

cartesian_to_polar(alpha, beta, gamma, site_now[i][0], site_now[i][1], site_now[i][2]);
polar_to_servo(i, alpha, beta, gamma);
}

rest_counter++;
}

/*
- set one of end points' expect site
- this founction will set temp_speed[4][3] at same time
- non - blocking function
---------------------------------------------------------------------------*/
void set_site(int leg, float x, float y, float z)
{
float length_x = 0, length_y = 0, length_z = 0;

if (x != KEEP)
length_x = x - site_now[leg][0];
if (y != KEEP)
length_y = y - site_now[leg][1];
if (z != KEEP)
length_z = z - site_now[leg][2];

float length = sqrt(pow(length_x, 2) + pow(length_y, 2) + pow(length_z, 2));

temp_speed[leg][0] = length_x / length * move_speed * speed_multiple;
temp_speed[leg][1] = length_y / length * move_speed * speed_multiple;
temp_speed[leg][2] = length_z / length * move_speed * speed_multiple;

if (x != KEEP)
site_expect[leg][0] = x;
if (y != KEEP)
site_expect[leg][1] = y;
if (z != KEEP)
site_expect[leg][2] = z;
}

/*
- wait one of end points move to expect site
- blocking function
---------------------------------------------------------------------------*/
void wait_reach(int leg)
{
while (1)
if (site_now[leg][0] == site_expect[leg][0])
if (site_now[leg][1] == site_expect[leg][1])
if (site_now[leg][2] == site_expect[leg][2])
break;
}

/*
- wait all of end points move to expect site
- blocking function
---------------------------------------------------------------------------*/
void wait_all_reach(void)
{
for (int i = 0; i < 4; i++) wait_reach(i); } /* - trans site from cartesian to polar - mathematical model 2/2 ---------------------------------------------------------------------------*/ void cartesian_to_polar(volatile float &alpha, volatile float &beta, volatile float &gamma, volatile float x, volatile float y, volatile float z) { //calculate w-z degree float v, w; w = (x >= 0 ? 1 : -1) * (sqrt(pow(x, 2) + pow(y, 2)));
v = w - length_c;
alpha = atan2(z, v) + acos((pow(length_a, 2) - pow(length_b, 2) + pow(v, 2) + pow(z, 2)) / 2 / length_a / sqrt(pow(v, 2) + pow(z, 2)));
beta = acos((pow(length_a, 2) + pow(length_b, 2) - pow(v, 2) - pow(z, 2)) / 2 / length_a / length_b);
//calculate x-y-z degree
gamma = (w >= 0) ? atan2(y, x) : atan2(-y, -x);
//trans degree pi->180
alpha = alpha / pi * 180;
beta = beta / pi * 180;
gamma = gamma / pi * 180;
}

/*
- trans site from polar to microservos
- mathematical model map to fact
- the errors saved in eeprom will be add
---------------------------------------------------------------------------*/
void polar_to_servo(int leg, float alpha, float beta, float gamma)
{
if (leg == 0)
{
alpha = 90 - alpha;
beta = beta;
gamma += 90;
}
else if (leg == 1)
{
alpha += 90;
beta = 180 - beta;
gamma = 90 - gamma;
}
else if (leg == 2)
{
alpha += 90;
beta = 180 - beta;
gamma = 90 - gamma;
}
else if (leg == 3)
{
alpha = 90 - alpha;
beta = beta;
gamma += 90;
}

servo[leg][0].write(alpha);
servo[leg][1].write(beta);
servo[leg][2].write(gamma);
} 

Yazar kodda robotun hareketlerini sonsuz döngü olarak ayarlamış. Yani linkte gösterdiğim hareketleri sürekli tekrarlıyor. Kendiniz kodu düzenleyebilirsiniz. Ben kendime göre yeniden düzenledim ve bir android uygulaması hazırladım. Bu sayede istenilen hareketi telefonunuzdan yaptırabilirsiniz.

Robotun kaynağı :

http://www.thingiverse.com/thing:1009659

http://www.instructables.com/id/DIY-Spider-RobotQuad-robot-Quadruped/step1/Test-the-main-board/

Bluetooth Bağlantısı:

Sensör Shield üzerinde bulunan COM kısmına bluetooth modülünüzün pinleri bağlanıcaktır.Bağlantı pinleri:

Arduino     Bluetooth

RX————-TX

TX————-RX

VCC———–VCC

GND———-GND

 

Android Uygulaması:

İndirme dosyasının içerisinde bulunan Spider.apk dosyasını telefonunuzun herhangi bir klasörüne atarak telefonunuzdan dosyayı açtığınızda uygulama yüklenecektir.Eğer bilinmeyen kaynaklara izin ver uyarısı çıkarsa ayarlar kısmından izin verirseniz uygulama sorunsuz yüklenecektir.

Proje Dosyası İndirme Linki: (3D Parçalar dahil değil)

https://yadi.sk/d/y4WuEOeD35XrEb

Herkese Merhaba

Genel Bilgilendirme:
Öncelikle projeye gösterilen ilgi için teşekkür ederim. Elimden geldiğince herkese yardımcı olmaya çalıştım.

* Robot için 3.7v lipo pil kullanmanızı tavsiye ediyorum.Projeyi yaparken bende 7.4v olduğu için onunla denemiştim ama 3.7v da gayet hesapllı ve stabil çalıştırıyor sorunsuz.Direk sensor shielde bağladığınızda robotun çalışması lazım.Arduino için ayrıca beslemeye gerek yok.Eğer çalışmazsa sensor shield sorunlludur. Şahsen sıfır aldığım 3 shieldden 2 si bozuk çıktı.
* Kodun derlenmesinde oluşan hatalar için şunları söyleyim. Öncelikle bluetooth bağlı değilken kodu yükleyin.Bağlıyken kod yüklenmez.Bağlıyken denediyseniz bluetooth çıkarın sonra arduinoyu çıkarıp tekrar takın öyle yükleyin. Birde sensor shield i arduinodan kaldırıp öyle yüklemenizi öneririm.

Son olarak projenin videosunu çekmiştim.Buradan izleyebilirsiniz:

SİZCE NASIL OLMUŞ?
Beğendim
80%
İlginç
8%
Eh İşte
4%
Anlamadım
6%
Kötü
1%
Berbat
2%
YAZAR HAKKINDA
Alper Gencan
Alper Gencan
Karabük Üniversitesi Elektrik Elektronik Mühendisliği mezunuyum. Ankara'da Best Grup Savunma Sanayi firmasında Ar-Ge mühendisi olarak çalışmaktayım. Üniversite hayatıma kadar amatörce olan elektrik elektronik uğraşım okul hayatım ile bir adım öne taşınmış oldu. Daha çok kontrol sistemleri ve robot projeleri ile uğraşmaktayım.
160 YORUMLAR
1 2 3
  • ahmet uğurlu
    ahmet uğurlu
    31 Aralık 2016 at 00:21

    hocam linkini verdiğiniz kod ile sitedeki kod aynı değil linkini verdiğiniz kod derlerken hata veriyor yardımcı olursanız sevinirim

    • Murat Duran
      31 Aralık 2016 at 11:04

      FlexiTimer2 kütüphanesini ekledinizmi ?

    • Alper Gencan
      Alper Gencan
      2 Ocak 2017 at 09:11

      Merhaba Ahmet. Sitedeki kod ile linkteki kod orjinal yazarın kendi kodudur. Bu sitede yazan kodları aynen kopyala yapıştır yaparsan derlenmektedir.Kodda herhangi bir hata yok.Kendi kodum indirme dosyasının içinde “yenikod” isimli dosyanın içinde.Eğer sende verdiği hatayı yazarsan yardımcı olabiliriz”

  • daghan
    7 Ocak 2017 at 15:38

    öncelikle değerli paylaşımlarınız ve emekleriniz için teşekkür ederim.
    Arduino ile Bluetooth modüldeki Rx ve Tx çaprazlıyor muyuz.

  • Ahmet Ferda
    15 Ocak 2017 at 20:08

    Paylaşımınız için teşekkürler.Projeyi yapma niyetim var. Dosyaları indirdim ve inceledim.Fakat bu apk dosyasındaki Bluetooth mac adresini nasıl güncelleyeceğiz. Appinventorda mı yaptınız bilmiyorum ama..Eğerki Appinventorda yaptıysanız *.aia proje dosyasını ekleyebilir misiniz?Ya da hangi programda yaptıysanız farketmez. Yardımcı olursanız çok sevinirim. Destekleriniz için teşekkür ederim.

    • Alper Gencan
      Alper Gencan
      18 Ocak 2017 at 11:59

      Merhaba Ahmet. Android uygulamasında bağlan butonuna bastığında önceden eşleştirilmiş cihazlar listelenir. Yani uygulamada kayıtlı bir mac yok herkes kullanabilir. Daha önce hc-05 yada hc-06 yı telefonun ile eşleştirme yapmadıysanız uygulamada gözükmez.

  • redgen ce
    8 Şubat 2017 at 09:30

    Güç kaynağı olarak ne kullanıldı bu sipeder robot için,9v Pil mi,USB kablosu ile yoksa pc ye baglı ordan mı alıyor??

  • Mehmet Can
    8 Şubat 2017 at 14:17

    sg90 ucuz fakat kalitesiz bunun yerine mg90s gibi veya farklı bir motor önerebilir misiniz?

    • Alper Gencan
      Alper Gencan
      9 Şubat 2017 at 14:19

      Maddi durum sıkıntınız yok ise mg995 tavsiye ederim ama şase uyumlu değil bu robot için. http://www.thingiverse.com da mg995 ile yapılan örümcekler mevcut onları inceleyebilirsin. tanesi yaklaşık 35-50TL civarı.

      • Mehmet Can
        10 Şubat 2017 at 19:41

        O kadarı fazla gelir gibi mg90s bu projeye uyumlu değil midir? Ölçüleri düzenleyebilir miyiz?

      • Mehmet Can
        10 Şubat 2017 at 19:46

        O kadarı fazla gelir. Mg90s bu proje için uyumlu değil midir? Peojeyi düzenleyemez miyiz. sg90 da ucuz ve kalitesiz geliyor. Titreme yapıyor diye duydum. Bir sorun olur mu acaba.

  • Bülent
    17 Şubat 2017 at 12:25

    Hocam bu projeniz maliyeti ne kadar oldu. Öğrenci insan yapabilirmi

  • Emre Can Engin
    22 Şubat 2017 at 11:56

    Linkte 3D parçaları satın almayı bulamadım. 3D parçaları nasıl temin edebiliriz

  • mahmut cantaş
    22 Şubat 2017 at 18:19

    https://www.adafruit.com/product/1143 bununla da denedim,1 amper 6 volt çalıştırmadı. plastik dişli olanla çalışıyor. metal dişli için nasıl bir güç kaynağı kullanmalıyım?

  • Burak Coşar
    27 Şubat 2017 at 12:07

    Merhaba, güç kaynağını nerden verdiniz ve ne kullandınız? Arduinodan ya da shield üzerinden verince motorlar azıcık zorlanmada reset atıyor. Nasıl bir çözüm sunabilirsiniz? Li-po pil kullanıyorsanız eğer onun dışında nasıl besleriz?

    • Alper Gencan
      Alper Gencan
      28 Şubat 2017 at 09:11

      Merhaba ben 7.4v lipo pil kullandım.Lipo yu sensor shield e bağlanması en sağlıklı olanıdır.Benim sesnor shield in güç giriş kısmı sorunlu olduğu için arduino üzerinden vermiştim. Ama tavsiye etmiyorum lipoyu sensor shield in güç girişine verdiğinizde kartın ledinin yanması lazım yanarsa çalışıyordur kart.Arduinoyu çalıştırmak için 9v pil kullanabilirsiniz

  • serdar şahin
    27 Şubat 2017 at 12:12

    hocam devrenin bağlantı şeması varmı elinizde görsel olarak motorların pinleri için ayrıca teşekkür ederim bu çalışman için geçen yılda robot kolunu yapmıştık .

    • Alper Gencan
      Alper Gencan
      28 Şubat 2017 at 09:14

      Merhaba servo pinleri yukarıdaki örümcek resminin üzerinde numaralı olarak bulunmaktadır. Bacakların konumlarına dikkat ederek servo motorları sensor shield üzerindeki pinlere sırasına göre bağlıycaksınız.Bunun dışındada şematik birşey yok zaten 🙂

  • kadir akyol
    27 Şubat 2017 at 21:56

    hocam biz bu projeyi yapmaya çalışıyoruz lakin Error compiling for board Arduino/Genuino Uno. bu hatayı veriyor . çözümü için çok uğraştım fakat bir sonuç alamadım. ve diğer arkadaşın dediği gibi bağlantı şemasını paylaşır mısınız ayrıca sg90 motorları mini olarak satın alsak sıkıntı olur mu ?

    • Alper Gencan
      Alper Gencan
      6 Mart 2017 at 15:59

      Merrhaba kodda herhangi bir sıkıntı olmaması lazım.Dilerseniz kodu bana mail atın birde ben deneyim. 2. resimdeki numaralar motorun hangi pine bağlanması gerektiğini ifade etmektedir onun haricinde birde bluetooth bağlantısı var oda rx tx zaten başka bir bağlantı yok

      • Müjdat Bilici
        8 Mart 2017 at 21:55

        Merhaba biz de bu projei yapmaya çalışıyorum bende de Error compiling for board Arduino/Genuino Uno hatasını veriyor bunu nasıl düzeltecem?

  • mehmet kazıcı
    24 Mart 2017 at 16:10

    hocam proje için ellerinize sağlık uğraşmışsınız teşekkürler. bir sorum olacak malzemeler içinde protoshield var hc-05 modülünü sensor shielde bağlamışsınız. acaba ikiside kullanılıyor mu? kaynak linkindeki malzemeler daha karışık çıkamadm işin içinden 🙂 yardımcı olursanız sevinirim 🙂

    • Alper Gencan
      Alper Gencan
      25 Mart 2017 at 09:44

      merhaba haklısınız hocam 🙂 malzeme listesinde yanlışlık ile prototypeshield yazmışım o sensorshield olucak. resmini koymuştum zaten sensor shield in ama malzeme listesinde yanlış yazmışım.

  • Mustafa
    26 Mart 2017 at 16:18

    Kardesim parcalar satiliyomu

  • Ziya Erdoğan
    29 Mart 2017 at 20:31

    Merhaba hocam, parçaları birleştirmek için nasıl vida kullanmamız gerekiyor ?

    • Alper Gencan
      Alper Gencan
      30 Mart 2017 at 10:17

      Servo paketinden çıkan vidalar yeterli oluyor hocam robot için ölçülerini bende bilmiyorum vidaların

    • Alper Gencan
      Alper Gencan
      30 Mart 2017 at 10:18

      vidayı sadece servo motor kısmında kullanıyorsunuz zaten parçalar birbirlerine geçmeli şekilde

    • Alper Gencan
      Alper Gencan
      1 Nisan 2017 at 11:07

      3.7v lipo kullanabillirsiniz http://www.robotistan.com/1s-37v-li-po

      • Ahmet F.
        1 Nisan 2017 at 18:58

        “Alper Gencan28 ŞUBAT 2017 AT 09:11
        Merhaba ben 7.4v lipo pil kullandım.Lipo yu sensor shield e bağlanması en sağlıklı olanıdır.Benim sesnor shield in güç giriş kısmı sorunlu olduğu için arduino üzerinden vermiştim. Ama tavsiye etmiyorum lipoyu sensor shield in güç girişine verdiğinizde kartın ledinin yanması lazım yanarsa çalışıyordur kart.Arduinoyu çalıştırmak için 9v pil kullanabilirsiniz”

        Yukarıdaki yorumunuzda 7.4 V lipo pil kullandığınızı yazmışsınız. Biraz kafam karıştı açıkçası . 7.4 V lipo pil mi yoksa 3.7 v luk lipo pil mi kullanacağız.?İlginiz için teşekkür ederim.

        • Alper Gencan
          Alper Gencan
          4 Nisan 2017 at 12:17

          Haklısınız o zamanlar 3.7 lipo pilim olmadığı için 7.4v kullanmıştım. Daha sonra 3.7v alıp kullandım 3.7v yeterli ve dengeli

  • buğra
    2 Nisan 2017 at 11:43

    Arduino:1.8.1 (Windows 8.1), Kart:”Arduino/Genuino Uno”

    Çalışmanız programın 5576 bayt (17 %) saklama alanını kullandı. Maksimum 32256 bayt.
    Global değişkenler belleğin 557 byte kadarını (27%) kullanıyor. Yerel değişkenler için 1491 byte yer kalıyor. En fazla 2048 byte kullanılabilir.
    avrdude: ser_open(): can’t open device “\\.\COM1”: Sistem belirtilen dosyayı bulamıyor.

    D:\Program Files (x86)\Arduino\libraries\examples içerisinde geçersiz kütüphane bulundu: D:\Program Files (x86)\Arduino\libraries\examples
    D:\Users\Buğra\Documents\Arduino\libraries\sketch_mar11a içerisinde geçersiz kütüphane bulundu: D:\Users\Buğra\Documents\Arduino\libraries\sketch_mar11a
    D:\Program Files (x86)\Arduino\libraries\examples içerisinde geçersiz kütüphane bulundu: D:\Program Files (x86)\Arduino\libraries\examples
    D:\Users\Buğra\Documents\Arduino\libraries\sketch_mar11a içerisinde geçersiz kütüphane bulundu: D:\Users\Buğra\Documents\Arduino\libraries\sketch_mar11a

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    hocam bu hatayı veriyor

    • Alper Gencan
      Alper Gencan
      4 Nisan 2017 at 12:19

      Bilgisayarınızda kodda kullanılan kütüphanelerin olduğundan emin olun. Ayrıca com port doğru seçtiğinizden emin olun. Bluetooth takılı değilken kod yükleyin takılı iken kod yüklenmez

  • 5 Nisan 2017 at 11:16

    Merhabalar alper öncelikle çok güzel bir proje ben bunun gibi 5 veya 6 kit yapmak istiyorum devlet okullarından gelen çocuklara eğitim amaçlı öğretiyoruz sosyal sorumluluk projesi bunu Scratch ile bağdaştırıp çocuklara kodlama basitleştirmeye çalışıyoruz bizde arduino nano ve nano shield var ultrasonik sensörler da var bunlarla yapabilirmiyiz şimdiden teşekkürler.

    • Alper Gencan
      Alper Gencan
      6 Nisan 2017 at 17:27

      Merhaba tacettin kodu nano için derleyip kullanabilirsiniz diye düşünüyorum

  • Cumhur Torun
    6 Nisan 2017 at 14:09

    Merhaba,

    robotu yaptık ve kodu yükledik. Sensör shiled üzerinden 7,4 2s lipo pil ile besledik. fakat arduino üzerindeki voltaj regülatörü ve 8-5 numaralı motorlar ısınıyor. pili çekmesek voltaj regülatörü yanacak sanırım.

    ne olabilir sebebi?

    • Alper Gencan
      Alper Gencan
      6 Nisan 2017 at 17:29

      Merhaba kısa devre veya kablo teması olup olmadığına dikkat edin ve 3.7v lipo ile deneyebilirsiniz.

  • Alper Gencan
    Alper Gencan
    6 Nisan 2017 at 17:40

    Herkese Merhaba

    Genel Bilgilendirme:
    Öncelikle projeye gösterilen ilgi için teşekkür ederim. Elimden geldiğince herkese yardımcı olmaya çalıştım. Yazıyı düzenleme gibi birşey olmadığı için yorum olarak belirtmek istedim.

    * Robot için 3.7v lipo pil kullanmanızı tavsiye ediyorum.Projeyi yaparken bende 7.4v olduğu için onunla denemiştim ama 3.7v da gayet hesapllı ve stabil çalıştırıyor sorunsuz.Direk sensor shielde bağladığınızda robotun çalışması lazım.Arduino için ayrıca beslemeye gerek yok.Eğer çalışmazsa sensor shield sorunlludur. Şahsen sıfır aldığım 3 shieldden 2 si bozuk çıktı.
    * Kodun derlenmesinde oluşan hatalar için şunları söyleyim. Öncelikle bluetooth bağlı değilken kodu yükleyin.Bağlıyken kod yüklenmez.Bağlıyken denediyseniz bluetooth çıkarın sonra arduinoyu çıkarıp tekrar takın öyle yükleyin. Birde sensor shield i arduinodan kaldırıp öyle yüklemenizi öneririm.

    Son olarak projenin videosunu çekmiştim.Buradan izleyebilirsiniz: https://www.youtube.com/watch?v=u6vea1SzQ3E

  • Fatih Kara
    7 Nisan 2017 at 10:49

    Hocam iyi günler bu servo kod ayarları demişsiniz onu nasıl yapacağız hangi kart üzerinde

    • Alper Gencan
      Alper Gencan
      12 Nisan 2017 at 10:26

      Merhaba. Öncelikle servoların beyaz plastiklerini takmamanız gerekiyor. Bacakları takıp kabloları bağladıktan sonra arduino içerisine ayar kodunu yüklemeniz gerekiyor. Bu ayar kodu ile servo açıları ilk konumları için ayarlanmış oluyor. Kodu yükledikten sonra bacakları yukarıda 3. resimdeki gibi (kırmızı şeritli resim) konuma getirip servo plastiklerini vidalamanız gerekiyor. Vidaladıktan sonra diğer arduino kodunu yükleyip bluetooth ile kontrol edebilirsiniz. Dosyaları güncelledim güncel dosyaları kulanın llütfen https://yadi.sk/d/06iylhdx3GtNZW

  • Elrond22
    Elrond22
    10 Nisan 2017 at 22:01

    Merhaba Hocam,

    Servoların konumlarını nasıl ayarlanıyor birazdaha detaylı bilgi alabilirmiyim ?

  • Alper Gencan
    Alper Gencan
    12 Nisan 2017 at 10:22

    Dosyayı güncelledim buradan indirebilirsiniz: https://yadi.sk/d/06iylhdx3GtNZW

  • Ahmet F.
    13 Nisan 2017 at 14:44

    Alper Bey 3.7V Lipo pil için balanslı şarj aleti tavsiye eder misiniz? İnternette olanlara bakıyorum 7.4 v ve 11.1 V için diye yazıyor ürün detaylarında. Yardımcı olursanız sevinirim. İyi Çalışmalar..

  • kagan esmeray
    17 Nisan 2017 at 06:56

    lipo pil kaç amper olacak bilgi verir misiniz

    • Alper Gencan
      Alper Gencan
      17 Nisan 2017 at 12:54

      3.7v lipo kullanabilirsiniz. kapasitesi(mah) ne kadar çok olursa o kadar uzun süre kullanırsınız

  • kagan esmeray
    17 Nisan 2017 at 07:00

    iyi günler paylaşımınz çok yararlı size teşekkür ederim lipo pil kaç amper olacak bilgi verir misiniz ve servo motorlar shild neresine bağlanacak ve örümceğin parcalarını nerden temin edebiliriz detaylı bilgi verirseniz sevinirim

    • Alper Gencan
      Alper Gencan
      17 Nisan 2017 at 12:56

      Teşekkürler.Yukarıda resimde servolar numaralı bir şekilde var o numaralar shield üzerinde takmanız gereken pin numaralarıdır aynı zamanda. Örümceğin plastik (.stl) dosyaları yukarıda kaynak gösterdiğim yerden temin edip basabilirsiniz. Benim basmam için mail atabilirsiniz

  • kagan esmeray
    17 Nisan 2017 at 15:49

    ilginiz için çok teşekkürler ben bastırmak istiyorum da mail adresinizi alanilir miyim ve fiyat verebilir misiniz ve lipo pil için amper kulllanım süresi nedir

  • kagan esmeray
    19 Nisan 2017 at 04:55

    alper bey mail adresiniz?

  • Asım Büyükyüce
    19 Nisan 2017 at 15:42

    Proje Dosyası İndirme Linki: (3D Parçalar dahil değil)

    https://yadi.sk/d/y4WuEOeD35XrEb
    Nasıl ulaşabilirim hocam

  • daghan
    20 Nisan 2017 at 09:16

    Merhaba Alper Bey

    robotu yaptım ama robot kendiliğinden hareket ediyor. enerji verdiğim an, bluetooth bağlantısı olmadan çalışmaya başlıyor.

    • 24 Nisan 2017 at 23:00

      Aynı sorun bende de var hocam,sanırsam sensor shielde sıkıntı var gibi duruyor

    • Alper Gencan
      Alper Gencan
      28 Nisan 2017 at 09:35

      Merhaba herşeyi düzgün yaptıysanız eğer en son benim kodu yükledikten sonra o şekilde çalışması imkansız. Doğru kodu yüklediğinize eminmisiniz

      • Elrond22
        Elrond22
        30 Nisan 2017 at 01:27

        Aynı sorunu bende yaşıyorum lütfen yardım edin.

      • Elrond22
        Elrond22
        3 Mayıs 2017 at 01:54

        Yardım yok mu ?
        Tüm kodları denedim robot kendiliğinden hareket ediyor ve kontrol edemiyorum.

        • Alper Gencan
          Alper Gencan
          9 Mayıs 2017 at 09:22

          Hocam kendiliğinden gitmesi imkansız nerede hata yaptığınızı bilemiyorum. bluetooth ile komut gelmeden hareket etmez.

          • Alper Gencan
            Alper Gencan
            9 Mayıs 2017 at 09:23

            Doğru kodu yüklediğinizden emin olun. Yazarın kendi sitesinden kodu yüklediyseniz kendi kendine gider. ben bluetooth ile yaptığımdan veri gelmeden kendi kendine gitmez

  • sungur taş
    2 Mayıs 2017 at 10:16

    iyi günler hocam portta com 1 ve com 2 gözüküyor sadece hangisini seçmeliyiz?

  • sungur taş
    2 Mayıs 2017 at 10:21

    Arduino:1.6.5 (Windows 8.1), Kart:”Arduino/Genuino Uno”

    Çalışmanız programın 450 bayt (1 %) saklama alanını kullandı. Maksimum 32.256 bayt.

    Global variables use 9 bytes (0%) of dynamic memory, leaving 2.039 bytes for local variables. Maximum is 2.048 bytes.

    avrdude: ser_open(): can’t open device “\\.\COM2”: Erişim engellendi.

    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.

    Rapor daha fazla veri içermeli
    “Derleme sırasında ayrıntılı çıktı göster”
    Dosya > Tercihler’de etkinleştirilmiş.
    karta yükleme yaparken bu hata veriliyor

    • Alper Gencan
      Alper Gencan
      9 Mayıs 2017 at 09:21

      arduino hangi portta ise o portu seçmelisiniz.

      • Sungur taş
        14 Mayıs 2017 at 11:21

        Bluetooth ve Android dosya arasında bağlantı kurulmuyor kurulduğu zamanda proje bilgisayara bağlı iken fonksiyonlara cevap vermiyor

        • Alper Gencan
          Alper Gencan
          15 Mayıs 2017 at 09:52

          Ne demek istediğinizi tam anlayamadım. Robotu bilgisayardan güç vererek zaten çalıştıramazsınız. Android uygulamasını (.apk uzantılı) telefonunuza yükleyin. Telefonunuzun bluetooth ayarlarına girerek bluetooth cihazı ile eşleştirme yapın. Sonra yüklenen uygulamayı açarak bluetooth bağlanabilirsiniz.

          • sungur taş
            18 Mayıs 2017 at 19:46

            herşey tam yeni kodu yükledikten sonra robot farklı haraketler yapmaya çalışıyor bluetooth kontrolü sağlanmıyor

  • Mücahit Ağaç
    11 Mayıs 2017 at 22:56

    Merhaba. Hocam biz örümcek robot projesini yaparken bi sıkıntı çıkıyor yardımcı olursanız sevinirim ;

    Pilden gelen gücü sensör shilde verdiğimiz zaman ışık yamıyor motorlar çalışmıyor yani güç gelmiyor.

    Pili arduinoya taktığım zaman sesnör shilde takılı olan motorlar çalışmıyor.

    2 tane farklı sensör shild denedim sonuç aynı.

    Pilden gelen gücü kabloyu uzatıp hem arduinoya hem sensör shilde versem sıkıntı olurmu pil 7.4v

    Önerebileceğiniz bi çözüm varmı ??

  • ahmet
    15 Mayıs 2017 at 18:59

    programınızı kaldırmışsınız :/

  • Burak DEDE
    16 Mayıs 2017 at 15:32

    Kolay gelsin, arkadaşlar 3d parçaları çıkartacağımız bir dosya var mı? Göremedim.

YORUM YAP