Akıllı Telefon Kontrolü ile DIY Arduino Robot Kol Yapımı; Bu derste, özel olarak oluşturulmuş bir Android uygulaması kullanılarak kablosuz olarak kontrol edilip programlanabilen bir Arduino Robot Kolunun nasıl yapıldığını öğreneceğiz. Robot kollarını kontrol etmek için kendi Android uygulamamızı geliştirmeye, robot parçalarını tasarlamaya ve 3D yazdırmaya, elektronik bileşenleri birleştirmeye ve Arduino’yu programlamaya başlayarak, size tüm yapım sürecini göstereceğim.

Uygulamadaki sürgüleri kullanarak her servonun veya robot kolunun ekseninin hareketini manuel olarak kontrol edebiliriz. Ayrıca “Kaydet” düğmesini kullanarak her bir pozisyonu veya adımı kaydedebiliriz ve ardından robot kolu bu adımları otomatik olarak çalıştırabilir ve tekrarlayabilir. Aynı düğme ile otomatik işlemi duraklatabilir, tüm adımları sıfırlayabilir veya silebiliriz, böylece yenilerini kaydedebiliriz.

Arduino Robot Kol 3D Modeli

Başlangıçta, Robot Kolunu Solidworks 3D modelleme yazılımını kullanarak tasarladım. Kolun 5 serbestlik derecesi vardır.

İlk 3 eksen için, bel, omuz ve dirsek için MG996R servolarını ve diğer 2 eksen için bilek rulosunu ve bilek adımını ve kıskaç olarak daha küçük SG90 mikro servolarını kullandım.

Aşağıda ve 3D modelini indirebilirsiniz.

Solidworks:

Arduino Robot Arm 3D Model Solidworks Files

STEP file:

Arduino Robot Arm 3D Model STEP File

STL files for 3D Printing:

Arduino Robot Arm STL Files

Robot Kolunun 3B Baskısı

Arduino robot kolu için tüm parçaları 3D olarak bastırdım. Denemeden önce, makaralı tekerleklerin yeterince sıkı olup olmadıklarını kontrol etmeniz önerilir ve eğer değilse, eksantrik somunları bunları sıkmak için kullanabilirsiniz. Ve işte bu, 3B baskı yatağınızı seviyelttikten sonra, 3B yaratmalarınızı gerçeğe dönüştürmeye hazırsınız.

Arduino Robot Kolunun tüm parçalarını birkaç saatte hazır.

Robot Kolunun Montajı

Tamam, bulayın robot kolunu monte edilebilir hazırız. İlk servo motorunu pakete yerleştirmekte vidaları yerleştirerek yerleştirmekte tabanla başladım. Servonun çıkış milinde yuvarlak bir korna cevtası tespit ettim.

Üstüne üst kısmı yerleştirip iki vida kullanarak sabitledim.

Burada yine önce servoya, ardından yuvarlak kornayı bir sonraki kısma geçirir ve daha sonra çıkış milindeki cıvatayı kullanarak birbirlerine tutturulur.

Burada, omuz ekseninde bir çeşit yay içermenin iyi bir fikir olduğunu ya da benim durumumda servoya yardımcı olmak için bir lastik bant kullandığımı fark edebiliriz çünkü bu servo kolun geri kalanının bütün ağırlığını taşıyor yük olarak.

Benzer şekilde robot kolunun kalanını da birleştirmeye devam ettim. Kıskaç mekanizmasına gelince, montaj için bazı 4 milimetre cıvata ve somun kullandım.

Sonunda kıskaç mekanizmasını son servoya taktım ve Arduino robot kolu tamamlandı.

Arduino Robot Kol Devresi Şeması

Bir sonraki aşama elektroniği bağlamak. Bu projenin devre şeması aslında oldukça basittir. Akıllı telefonla iletişim kurmak için sadece bir Arduino panosuna ve bir HC-05 Bluetooth modülüne ihtiyacımız var. Altı servo motorun kontrol pinleri, Arduino kartının altı dijital pinine bağlanır.

Servoları çalıştırmak için 5V’a ihtiyacımız var, ancak bunun harici bir güç kaynağından gelmesi gerekiyor, çünkü Arduino, hepsinin çekebileceği akım miktarını idare edemiyor. Güç kaynağının en az 2 A akım alabilmesi gerekir. Böylece her şeyi bir araya getirdikten sonra Arduino’yu programlamaya geçebilir ve Android uygulamasını yapabiliriz.

Gereken bileşenleri aşağıdaki bağlantılar,

  • MG996R Servo Motor
  • SG90 Micro Servo Motor
  • HC-05 Bluetooth Module
  • Arduino Board
  • 5V 2A DC Power Supply

Arduino Robot Kol Kodu

Kod biraz daha uzun olduğu için, daha iyi anlaşılması için, programın kaynak kodunu bölümlerin açıklamalarıyla birlikte bölümlere koyacağım. Ve bu yazının sonunda kaynak kodun tamamını göndereceğim.

Bu yüzden önce Bluetooth modülünün seri iletişimi için servo kütüphanesinin yanı sıra SoftwareSerial kütüphanesini de eklememiz gerekir. Bu kitaplıkların her ikisi de Arduino IDE’ye eklenmiştir, dolayısıyla bunları harici olarak yüklemeniz gerekmez. Daha sonra altı servoyu, HC-05 Bluetooth modülünü ve servoların mevcut ve önceki pozisyonlarını saklamak için bazı değişkenleri ve ayrıca pozisyonları veya otomatik mod için basamakları depolamak için bazı değişkenleri tanımlamamız gerekir.

#include <SoftwareSerial.h>
#include <Servo.h>
Servo servo01;
Servo servo02;
Servo servo03;
Servo servo04;
Servo servo05;
Servo servo06;
SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX)
int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position
int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position
int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps
int speedDelay = 20;
int index = 0;
String dataIn = "";

Kurulum bölümünde servoları ve Bluetooth modülünü başlatmalı ve robot kolunu ilk konumuna getirmeliyiz. Bunu, servoyu 0 ila 180 derece arasında herhangi bir konuma basitçe hareket ettiren write () işlevini kullanarak yapıyoruz.

void setup() {
  servo01.attach(5);
  servo02.attach(6);
  servo03.attach(7);
  servo04.attach(8);
  servo05.attach(9);
  servo06.attach(10);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  // Robot arm initial position
  servo1PPos = 90;
  servo01.write(servo1PPos);
  servo2PPos = 150;
  servo02.write(servo2PPos);
  servo3PPos = 35;
  servo03.write(servo3PPos);
  servo4PPos = 140;
  servo04.write(servo4PPos);
  servo5PPos = 85;
  servo05.write(servo5PPos);
  servo6PPos = 80;
  servo06.write(servo6PPos);
}

Sonra, döngü bölümünde, Bluetooth.available () işlevini kullanarak, Smartphone’dan gelen herhangi bir veri olup olmadığını sürekli olarak kontrol ederiz. Değer doğruysa, readString () işlevini kullanarak verileri bir dizge olarak okuruz, bunları dataIn değişkenine depolar. Gelen verilere bağlı olarak robot koluna ne yapacağımızı söyleyeceğiz.

// Check for incoming data
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();  // Read the data as string

Arduino Robot Kol Kontrolü Android Uygulaması

Şimdi Android uygulamasına bakalım ve Arduino’ya ne tür veriler gönderdiğini görelim.

Uygulamayı MIT App Inventor çevrimiçi uygulamasını kullanarak yaptım ve işte nasıl çalıştığını. En üstte, akıllı telefonu HC-05 Bluetooth modülüne bağlamak için iki düğmemiz var. Sonra sol tarafta robot kolunun bir resmi var ve sağ tarafta da servoları kontrol etmek için altı kaydırıcı ve hız kontrolü için bir kaydırıcı var.

Her kaydırıcı, robot kol bağlantılarına uygun farklı başlangıç, minimum ve maksimum değerlere sahiptir. Uygulamanın altında, robot kolunu otomatik olarak çalışacak şekilde programlayabilmemiz için SAVE, RUN ve RESET adlı üç düğmemiz var. Ayrıca kaydettiğimiz adım sayısını gösteren bir etiket de var. Bununla birlikte, MIT App Inventor kullanarak bu gibi uygulamaların nasıl oluşturulacağı hakkında daha fazla ayrıntı için, bununla ilgili diğer ayrıntılı eğitimimi kontrol edebilirsiniz.

Tamam, şimdi programı veya uygulamanın arkasındaki blokları görelim. İlk önce, sol tarafta akıllı telefonu Bluetooth modülüne bağlamak için bloklar bulunuyor.

Ardından servo pozisyon kontrolü için sürgü bloklarına ve robot kolunu programlamak için düğmeler bloklarına sahibiz. Bu yüzden, kaydırıcının konumunu değiştirirsek, Bluetooth işlevini kullanarak .SendText, Arduino’ya bir metin göndeririz. Bu metin, kaydırıcının geçerli değerinin yanı sıra hangi kaydırıcının değiştirildiğini gösteren bir önekten oluşur.

İşte yukarıda belirtilen MIT App Inventor projesinin bir indirme dosyası ve akıllı telefonunuza kurulmaya hazır Android Uygulaması:

Arduino Robot Arm Control MIT App Inventor Project Dosyası

İNDİR

Arduino Robot Arm Control Android App Dosyası

İNDİR

Bu nedenle, Arduino’da, startWith () işlevini kullanarak her gelen verinin önekini kontrol ederiz ve böylece ne yapacağımızı biliriz. Örneğin, önek “s1” ise, bir numaralı servoyu taşımamız gerektiğini biliyoruz. Substring () işlevini kullanarak kalan metni alırız veya bu konum değeridir, onu tam sayıya dönüştürür ve değeri servoyu bu konuma taşımak için kullanırız.

// If "Waist" slider has changed value - Move Servo 1 to position
    if (dataIn.startsWith("s1")) {
      String dataInS = dataIn.substring(2, dataIn.length()); // Extract only the number. E.g. from "s1120" to "120"
      servo1Pos = dataInS.toInt();  // Convert the string into integer

Burada basitçe write () işlevini çağırabiliriz ve servo o konuma gidecektir, ancak bu şekilde servo robot kolu için çok fazla olan maksimum hızında çalışacaktır. Bunun yerine, servoların hızını kontrol etmemiz gerekiyor, bu yüzden her yineleme arasında bir gecikme süresi uygulayarak servoyu kademeli olarak önceki konumdan mevcut konuma taşımak için bazı FOR halkaları kullandım. Gecikme süresini değiştirerek servonun hızını değiştirebilirsiniz.

// We use for loops so we can control the speed of the servo
      // If previous position is bigger then current position
      if (servo1PPos > servo1Pos) {
        for ( int j = servo1PPos; j >= servo1Pos; j--) {   // Run servo down
          servo01.write(j);
          delay(20);    // defines the speed at which the servo rotates
        }
      }
      // If previous position is smaller then current position
      if (servo1PPos < servo1Pos) {
        for ( int j = servo1PPos; j <= servo1Pos; j++) {   // Run servo up
          servo01.write(j);
          delay(20);
        }
      }
      servo1PPos = servo1Pos;   // set current position as previous position
    }

Robot kolunun her bir eksenini sürmek için aynı yöntem kullanılır.

Altlarında KAYDET düğmesidir. KAYDET düğmesine basarsak, her servo motorun konumu bir dizide saklanır. Her basışta indeks artar, böylece dizi adım adım doldurulur.

// If button "SAVE" is pressed
    if (dataIn.startsWith("SAVE")) {
      servo01SP[index] = servo1PPos;  // save position into the array
      servo02SP[index] = servo2PPos;
      servo03SP[index] = servo3PPos;
      servo04SP[index] = servo4PPos;
      servo05SP[index] = servo5PPos;
      servo06SP[index] = servo6PPos;
      index++;                        // Increase the array index
    }

Ardından RUN butonuna basarsak kayıtlı adımları çalıştıran runervo () özel fonksiyonunu çağırırız. Bu fonksiyona bir göz atalım. İşte burada RESET butonuna basana kadar kaydedilen adımları tekrar tekrar çalıştırıyoruz. FOR döngüsünü kullanarak dizilerde depolanan tüm konumları gözden geçiririz ve aynı zamanda akıllı telefondan gelen veri olup olmadığını kontrol ederiz. Bu veriler robotu duraklatan ÇALIŞMA / DURAKLATMA butonu olabilir ve tekrar tıklandığında otomatik hareketlerle devam eder. Ayrıca, hız kaydırıcı konumunu değiştirirsek, bu değeri aşağıdaki FOR döngülerindeki her yineleme arasındaki gecikme süresini değiştirmek için kullanırız, bu da servo motorların hızını kontrol eder.

// Automatic mode custom function - run the saved steps
void runservo() {
  while (dataIn != "RESET") {   // Run the steps over and over again until "RESET" button is pressed
    for (int i = 0; i <= index - 2; i++) {  // Run through all steps(index)
      if (Bluetooth.available() > 0) {      // Check for incomding data
        dataIn = Bluetooth.readString();
        if ( dataIn == "PAUSE") {           // If button "PAUSE" is pressed
          while (dataIn != "RUN") {         // Wait until "RUN" is pressed again
            if (Bluetooth.available() > 0) {
              dataIn = Bluetooth.readString();
              if ( dataIn == "RESET") {     
                break;
              }
            }
          }
        }
        // If SPEED slider is changed
        if (dataIn.startsWith("ss")) {
          String dataInS = dataIn.substring(2, dataIn.length());
          speedDelay = dataInS.toInt(); // Change servo speed (delay time)
        }
      }
      // Servo 1
      if (servo01SP[i] == servo01SP[i + 1]) {
      }
      if (servo01SP[i] > servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      if (servo01SP[i] < servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {
          servo01.write(j);
          delay(speedDelay);
        }
      }

Bu IF ifadeleri ve FOR döngülerinde daha önce açıklandığı gibi, servoları bir sonraki pozisyonlarına taşırız. Son olarak RESET butonuna basarsak, dizilerdeki tüm verileri sıfıra indiririz ve ayrıca endeksi sıfıra ayarlarız, böylece robot kolunu yeni hareketlerle yeniden programlayabiliriz.

// If button "RESET" is pressed
    if ( dataIn == "RESET") {
      memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0
      memset(servo02SP, 0, sizeof(servo02SP));
      memset(servo03SP, 0, sizeof(servo03SP));
      memset(servo04SP, 0, sizeof(servo04SP));
      memset(servo05SP, 0, sizeof(servo05SP));
      memset(servo06SP, 0, sizeof(servo06SP));
      index = 0;  // Index to 0
    }

İşte bu, şimdi robot kolla eğlenebilir ve biraz eğlenebiliriz.

İşte Arduino Robot Kolunun tam kodu:

/*        
       DIY Arduino Robot Arm Smartphone Control  
        by Dejan, www.HowToMechatronics.com  
*/
#include <SoftwareSerial.h>
#include <Servo.h>
Servo servo01;
Servo servo02;
Servo servo03;
Servo servo04;
Servo servo05;
Servo servo06;
SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX)
int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position
int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position
int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps
int speedDelay = 20;
int index = 0;
String dataIn = "";
void setup() {
  servo01.attach(5);
  servo02.attach(6);
  servo03.attach(7);
  servo04.attach(8);
  servo05.attach(9);
  servo06.attach(10);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  // Robot arm initial position
  servo1PPos = 90;
  servo01.write(servo1PPos);
  servo2PPos = 150;
  servo02.write(servo2PPos);
  servo3PPos = 35;
  servo03.write(servo3PPos);
  servo4PPos = 140;
  servo04.write(servo4PPos);
  servo5PPos = 85;
  servo05.write(servo5PPos);
  servo6PPos = 80;
  servo06.write(servo6PPos);
}
void loop() {
  // Check for incoming data
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();  // Read the data as string
    
    // If "Waist" slider has changed value - Move Servo 1 to position
    if (dataIn.startsWith("s1")) {
      String dataInS = dataIn.substring(2, dataIn.length()); // Extract only the number. E.g. from "s1120" to "120"
      servo1Pos = dataInS.toInt();  // Convert the string into integer
      // We use for loops so we can control the speed of the servo
      // If previous position is bigger then current position
      if (servo1PPos > servo1Pos) {
        for ( int j = servo1PPos; j >= servo1Pos; j--) {   // Run servo down
          servo01.write(j);
          delay(20);    // defines the speed at which the servo rotates
        }
      }
      // If previous position is smaller then current position
      if (servo1PPos < servo1Pos) {
        for ( int j = servo1PPos; j <= servo1Pos; j++) {   // Run servo up
          servo01.write(j);
          delay(20);
        }
      }
      servo1PPos = servo1Pos;   // set current position as previous position
    }
    
    // Move Servo 2
    if (dataIn.startsWith("s2")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo2Pos = dataInS.toInt();
      if (servo2PPos > servo2Pos) {
        for ( int j = servo2PPos; j >= servo2Pos; j--) {
          servo02.write(j);
          delay(50);
        }
      }
      if (servo2PPos < servo2Pos) {
        for ( int j = servo2PPos; j <= servo2Pos; j++) {
          servo02.write(j);
          delay(50);
        }
      }
      servo2PPos = servo2Pos;
    }
    // Move Servo 3
    if (dataIn.startsWith("s3")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo3Pos = dataInS.toInt();
      if (servo3PPos > servo3Pos) {
        for ( int j = servo3PPos; j >= servo3Pos; j--) {
          servo03.write(j);
          delay(30);
        }
      }
      if (servo3PPos < servo3Pos) {
        for ( int j = servo3PPos; j <= servo3Pos; j++) {
          servo03.write(j);
          delay(30);
        }
      }
      servo3PPos = servo3Pos;
    }
    // Move Servo 4
    if (dataIn.startsWith("s4")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo4Pos = dataInS.toInt();
      if (servo4PPos > servo4Pos) {
        for ( int j = servo4PPos; j >= servo4Pos; j--) {
          servo04.write(j);
          delay(30);
        }
      }
      if (servo4PPos < servo4Pos) {
        for ( int j = servo4PPos; j <= servo4Pos; j++) {
          servo04.write(j);
          delay(30);
        }
      }
      servo4PPos = servo4Pos;
    }
    // Move Servo 5
    if (dataIn.startsWith("s5")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo5Pos = dataInS.toInt();
      if (servo5PPos > servo5Pos) {
        for ( int j = servo5PPos; j >= servo5Pos; j--) {
          servo05.write(j);
          delay(30);
        }
      }
      if (servo5PPos < servo5Pos) {
        for ( int j = servo5PPos; j <= servo5Pos; j++) {
          servo05.write(j);
          delay(30);
        }
      }
      servo5PPos = servo5Pos;
    }
    // Move Servo 6
    if (dataIn.startsWith("s6")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo6Pos = dataInS.toInt();
      if (servo6PPos > servo6Pos) {
        for ( int j = servo6PPos; j >= servo6Pos; j--) {
          servo06.write(j);
          delay(30);
        }
      }
      if (servo6PPos < servo6Pos) {
        for ( int j = servo6PPos; j <= servo6Pos; j++) {
          servo06.write(j);
          delay(30);
        }
      }
      servo6PPos = servo6Pos; 
    }
    // If button "SAVE" is pressed
    if (dataIn.startsWith("SAVE")) {
      servo01SP[index] = servo1PPos;  // save position into the array
      servo02SP[index] = servo2PPos;
      servo03SP[index] = servo3PPos;
      servo04SP[index] = servo4PPos;
      servo05SP[index] = servo5PPos;
      servo06SP[index] = servo6PPos;
      index++;                        // Increase the array index
    }
    // If button "RUN" is pressed
    if (dataIn.startsWith("RUN")) {
      runservo();  // Automatic mode - run the saved steps 
    }
    // If button "RESET" is pressed
    if ( dataIn == "RESET") {
      memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0
      memset(servo02SP, 0, sizeof(servo02SP));
      memset(servo03SP, 0, sizeof(servo03SP));
      memset(servo04SP, 0, sizeof(servo04SP));
      memset(servo05SP, 0, sizeof(servo05SP));
      memset(servo06SP, 0, sizeof(servo06SP));
      index = 0;  // Index to 0
    }
  }
}
// Automatic mode custom function - run the saved steps
void runservo() {
  while (dataIn != "RESET") {   // Run the steps over and over again until "RESET" button is pressed
    for (int i = 0; i <= index - 2; i++) {  // Run through all steps(index)
      if (Bluetooth.available() > 0) {      // Check for incomding data
        dataIn = Bluetooth.readString();
        if ( dataIn == "PAUSE") {           // If button "PAUSE" is pressed
          while (dataIn != "RUN") {         // Wait until "RUN" is pressed again
            if (Bluetooth.available() > 0) {
              dataIn = Bluetooth.readString();
              if ( dataIn == "RESET") {     
                break;
              }
            }
          }
        }
        // If speed slider is changed
        if (dataIn.startsWith("ss")) {
          String dataInS = dataIn.substring(2, dataIn.length());
          speedDelay = dataInS.toInt(); // Change servo speed (delay time)
        }
      }
      // Servo 1
      if (servo01SP[i] == servo01SP[i + 1]) {
      }
      if (servo01SP[i] > servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      if (servo01SP[i] < servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      // Servo 2
      if (servo02SP[i] == servo02SP[i + 1]) {
      }
      if (servo02SP[i] > servo02SP[i + 1]) {
        for ( int j = servo02SP[i]; j >= servo02SP[i + 1]; j--) {
          servo02.write(j);
          delay(speedDelay);
        }
      }
      if (servo02SP[i] < servo02SP[i + 1]) {
        for ( int j = servo02SP[i]; j <= servo02SP[i + 1]; j++) {
          servo02.write(j);
          delay(speedDelay);
        }
      }
      // Servo 3
      if (servo03SP[i] == servo03SP[i + 1]) {
      }
      if (servo03SP[i] > servo03SP[i + 1]) {
        for ( int j = servo03SP[i]; j >= servo03SP[i + 1]; j--) {
          servo03.write(j);
          delay(speedDelay);
        }
      }
      if (servo03SP[i] < servo03SP[i + 1]) {
        for ( int j = servo03SP[i]; j <= servo03SP[i + 1]; j++) {
          servo03.write(j);
          delay(speedDelay);
        }
      }
      // Servo 4
      if (servo04SP[i] == servo04SP[i + 1]) {
      }
      if (servo04SP[i] > servo04SP[i + 1]) {
        for ( int j = servo04SP[i]; j >= servo04SP[i + 1]; j--) {
          servo04.write(j);
          delay(speedDelay);
        }
      }
      if (servo04SP[i] < servo04SP[i + 1]) {
        for ( int j = servo04SP[i]; j <= servo04SP[i + 1]; j++) {
          servo04.write(j);
          delay(speedDelay);
        }
      }
      // Servo 5
      if (servo05SP[i] == servo05SP[i + 1]) {
      }
      if (servo05SP[i] > servo05SP[i + 1]) {
        for ( int j = servo05SP[i]; j >= servo05SP[i + 1]; j--) {
          servo05.write(j);
          delay(speedDelay);
        }
      }
      if (servo05SP[i] < servo05SP[i + 1]) {
        for ( int j = servo05SP[i]; j <= servo05SP[i + 1]; j++) {
          servo05.write(j);
          delay(speedDelay);
        }
      }
      // Servo 6
      if (servo06SP[i] == servo06SP[i + 1]) {
      }
      if (servo06SP[i] > servo06SP[i + 1]) {
        for ( int j = servo06SP[i]; j >= servo06SP[i + 1]; j--) {
          servo06.write(j);
          delay(speedDelay);
        }
      }
      if (servo06SP[i] < servo06SP[i + 1]) {
        for ( int j = servo06SP[i]; j <= servo06SP[i + 1]; j++) {
          servo06.write(j);
          delay(speedDelay);
        }
      }
    }
  }
}

Umarım bu videoyu beğenmiş ve yeni bir şeyler öğrenmişsindir. Aşağıdaki yorumlar bölümünde herhangi bir soru sormaktan çekinmeyin ve Arduino Projeler Koleksiyonumu kontrol edin.

iz atölye iletişim

Eğitim kurumlarına özgü atölye çözümleri için uzman ekibimizle iletişime geçin. Atölyelere özel mobilya ve donanım çözümlerinin yanı sıra öğrenci ve eğitmen eğitimleri içinde bizlere ulaşabilirsiniz.
İZ ATÖLYE " iz bırakan eğitim çözümleri "
Telefon: 0545 834 9353
Mail : bilgi@izatolye.com

neden biz

İz Atölye eğitim kurumlarının ihtiyaç ve talepleri doğrultusunda atölye çalışmaları yapmakta ve atölyeler için sarf malzeme temin imkanı sağlamaktadır. Böylelikle çocukların eğitimlerinin önemli bir yanını teşkil etmesi gereken el ve zihin koordinasyonu tam, eksiksiz sağlanmaktadır.Çocukları artık sadece oyuncaklara ya da bilgisayara veya televizyonun karşısına hapsetmek doğru değil. Motor becerilerini geliştirmek, hayal güçlerini kullanmalarını diğer çocuklarla ekip çalışmasını öğretmek için farklı atölye çalışmaları çok faydalı. Atölye çalışmaları sırasında çocukların hayal gücü desteklendiği gibi konsantrasyonlarına da büyük katkı sağlıyor.Ayrıca ince motor becerilerinin gelişmesine, farklı malzemelerle tanışmak, malzemeleri düzenli ve özenli kullanmayı öğrenmeye kadar pek çok farklı katkı sağlıyor. Çocukların, kendi yaş grupları ile yaptıkları çalışmalar hem sosyalleşmelerini sağlıyor hem biriyle yardımlaşmayı öğrenirken ayrıca bir şey üretmenin keyfine de varıyorlar.

atölye çalışmalarının önemi

Atölye Eğitimi, bütünleşik bir yapı içerisinde fen bilimleri, teknoloji, mühendislik ve matematik alanlarını birleştirerek; gençlerin analitik düşünmelerini, farklı öğrenme grupları ile etkileşimler kurmalarını, takım çalışması becerisi kazanmalarını, bildiklerini güncel olaylar ile ilişkilendirmelerini ve ürünlerini girişimci bir ruhla sunmalarını sağlar. Öğrencilerin keşfederek ve uygulayarak öğrenmelerini hedefleyen Atölye Eğitimi ile fen bilimleri, teknoloji, mühendislik ve matematik becerilerini öğrencilere kazandırmak ve düşündüğünü hayata geçirebilen, yenilikçi, yaratıcı bireyler yetiştirmek amaçlanır.
Atölye Eğitimi Neden Önemli;
  • Öğrencileri motive edebilir. Çünkü gerçek hayattan örneklere de uygulanabilir.
  • Çocuklar neden sonuç ilişkisi kurmaya başlarlar.
  • Öğrenciler daha derin, daha detaylı düşünebilirler.
  • Öğrencilerin bireysel çalışma ve takım çalışması becerilerini geliştirir.
  • Atölye Eğitim, ezberci değil sorgulayıcıdır.
  • İletişim becerileri en üst seviyelere çıkabilir.
  • Öğrenciler eleştirel düşünmeyi öğrenirler.
  • Hata yapmanın aslında ne kadar değerli olduklarını görür öğrenciler.
  • Hatalarından ders çıkarıp tecrübeler edinirler.

Bir cevap yazın

WhatsApp 7/24 Destek