Arduino Android Kontrollü Örümcek Robot Yapımı
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.
Malzemeler:
- 12 Adet sg90 servo motor
- Arduino Uno
- Arduino protoshield
- HC-05 veya HC-06 bluetooth modülü
- 3D Parçalar
- Güç kaynağı
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 :
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:
Hocam merhaba ,
Android programını ne ile kodladınız ?
Kodlarını alabilir miyiz ?
hocam kodlama değil o , app inventor 2 diye araştırın.
Servoların kaynak dosyasının nasıl eklendiği ile ilgili birşey yazılmamış rica etsem kaynak dosyalarını da yandexe ekleyebilir misiniz
Merhabalar
3D parçaları birbirine bağlamak için kullanılan vidaları nerden buluyoruz
Merhaba
Örümcek gövde ve bacak parçalarının proje dosyasını paylaşabilir misiniz
proje dosyası linki çalışmıyor paylaşabilir misiniz tekrar
Hocam kiti hazır halde satın alabilmemiz mümkün mü ve ya 3d parçalar için en azından mailleşme şansımız var mı?
Hocam iyi günler 3D kendi çizim parçalarım paylaştım demiştiniz göremedim yardımcı olurmusunuz
Teşekkür ederim.
hocam link kırık ya bidaha atma şansınız varmıdır
indirme linki çalışmıyor deniyor ama hiç oralı olan yok.
Link çalışıyor test edildi
3.7 vlot pil kaç ampere olmalı ? 3D parçaların dosyaları açılmıyor bir de onlara bakar mısınz ?
Merhaba 3d parçaları kaynak gösterdiğim siteden temin edebilirsiniz. 3.7v lipo pilin sabit amper çıkışı olmaz. motorların çalışmasına göre amper değişir. kapasite değeri olur (mah) o da robotu kullanma süreni belirler.
hangi site acaba soyleyebilirmisniz
Hocam merhabalar. Bende buna benzer hatta daha da geliştirilebilir bir örümcek yapmak istiyorum. Ancak önümde büyük bir sorun var. Bu da programlama hakkında çok geniş bir bilgiye sahip olmamam nereden başlamalı ve ne yapmalıyım teşekkürler.
Programlama bilgini en temel projelerden başlayarak geliştirmen daha faydalı olur 🙂
arkadaşlar bana bu projenin yapılmış halde sata bilecek varmı eğer varsa lütfen iletişime gecelim acil
fritzing şeması olan varsa atabilirmi birde pil kaç mAH
mAh değeri robotun çalışma süresini etkiler. bütcenize göre herhangi bir 3.7v lipo kullanabilirsiniz
hocam ellerinize sağlık..3d parçaları paylaşmanız mümkün mü?
okulda bu örneği yapmak istiyoruz..yardımcı olursanız çok sevinirim..kolay gelsin
Merhaba 3d parçalar kaynak gösterdiğim sitede mevcut (https://www.thingiverse.com/thing:1009659)
Hocam elinize saglik. Ayni anda 12 tane servo kullanmak icin motor surucu ye ihriyac var mi. Aciklamada herhangi bir motor surucuden bahsetmemissiniz ama ben yine de sorayım dedim. Fazla akum cekip arduinoya zarar verebilir mi
Motorları sensorshield e bağlamanız yeterli sürücüye gerek yok. Lipo pilinde direk sensorshield e bağlanması gerekiyor.
SG 90 servo motorlarda motor sürücü motorun içinde yer alır
Merhaba, Android kaynak kodları lazım. Yardımcı olursanız sevinirim. 0555 303 95 75 Şimdiden Teşekkürler.
Merhaba yukarıda parça listesine sensor shield yazmıyor ama kullanmışsınız onuda almak gerekiyormu
Hocam servo daki alt vidaları çıkarıp kapağı açın öyle girer demişsiniz ancak kapak tekrar kapanmıyor
hocam, elinize sağlık… bu çalışmaya arduino OV7670 kamera kiti takıp kontrol etmek istiyoruz. Kodlarda ve bağlantılarda yardımcı olabilir misiniz?
hocam bu basılması gereken parçalrın kac cm oldugu yazmıyor
hocam verdiğniz kodu yüklemeye çalıştım ama çok sayıda hata alıyorum 1 hata yı çözüyoru yenisi oluşuyor bir bakarmısınız
Projenizi gerçekleştirdik fonksiyonları tek tek bakıldığında ve robotu havada tuttuğumuzda çalışıyor fakat zemine bıraktığımızda sadece el sallayabiliyor diğer hareketleri yapmaya çalışırken aniden kendini topluyor. güç yetmeme sorunu yaşıyoruz sanırım bunu nasıl çözebiliriz yardımcı olursanız sevinirim.malzemeleri fazla değer verip yakmadan çözmeye çalışıyoruz sorunu.
Merhaba.Bizim projemizdede şöyle bir sorun oldu.Sistemi arduino üzerinden beslediğimizde işemci aşırı ısınıyor ve bir müddet sonra kendini korumaya alıyor, örümcek yığışıp kalıyor.Sistemi sensör shield üzerinden beslediğimizde bu seferde bluetooth telefon ile bağlantı kuruyor fakat örümceği kontrol etmiyor.Bluetoothlu olmayan otonom programı kurduğumuzda örümcek gayet stabil çalışıyor.Sorum sensör shield üzerinden bluetooth ile nasıl kontrolu sağlayacaz?Yada sorun nerede?
güç kaynaı olarak ne kullanmalıyz ? acil yardım
Ebru hocam aynı problem bizdede var. Çözebildinizmi acaba
Aynı arduino örümcek robot bende de mevcut c# kodu olan varsa bana gonderebılır mı?
servo motorların bağlantı şeması nasıl rica etsek şemayı yayınlayabilir misin?
hocam merhaba kod çalışmıyor acaba yardımcı olurmusunuz ?
kodlamada set_site hatası alıyorum yardımcı olabilir misiniz?
Kolay gelsin ben burada kodu yükleyince hata veriyor sizin derlediğiniz kodu gönderebilirmisiniz
Hocam paylaşımınız için teşekkür ederim. Bluetooth modülünü çıkartıp kodun yüklenmesi ikazı önemli gerçekten yoksa kod hata veriyor. Sayenizde cep ten kontrol edilebiliyor atık.
Kac volt lipo kullanıyorsun
Bluetooth kontrollü yapamiyorum portta bluettohu okumuyor cozumunuz varmı
3D parçalar tamam fakat servoların bağlantı şeması veya fritzing şeması falan yok mu kimse ilgilenmiyor??
verdiğiniz robot kaynağındaki adam arduino ile yapmamış hiç bir birleştirme şeması yok yardımcı olurmusunuz?
Arduino ile yapılmış proje, şeması yok evet çünkü shield kullanılıyor. Servoları resimdeki gibi numaralandırıp shield in üzerindeki numaralara göre takmanız yeterli.
hc-05 veya 06 olması kodda farklılık gösterir mi
Hayır göstermez
kod hata scope
Hıcam bu projeyi blootutla ses kontrollü şeklinde yapmak istiyorum kodlamada sıkıntılar var tam olmadı yardımcı olabilir misniz ?
Arduino kodunu aynen olduğu gibi kullanabilirsiniz. Android kısmında Appinventör ile Speech i kullanmalısınız. Speech ile algılanan veriyi bluetooth ile göndermelisiniz. Arduino kodu aynı şekilde gelen veriyi karşılaştırıp robotu çalıştıracaktır.