Arduino Hovercraft Projesi Çalışma Prensibi
Bir hovercraft'ın temel çalışma prensibi, teknenin bir hava yastığı ile kaldırılmasıdır. Merkez pervane, aracın altına hava üfleyerek yumuşak malzemeden yapılmış eteği şişirir. Etekteki hava basıncı yeterince yüksek olduğunda tekne yükselir. Sürekli olarak iletilen hava, aracın ortasından etekle zemin arasından çıkar, bu da ek bir kaldırma gücü oluşturur ve hovercraft ile yer arasındaki sürtünmeyi azaltır. Kalkış gerçekleştikten sonra, ikinci pervane kullanılarak, hovercraft'ı ileri doğru hareket ettiren bir itme gücü üretilir. İtici pervanenin arka tarafında, hovercraftın yönlendirilmesinde kullanılan basit bir dümen düzeneği vardır.
Hovercraft 3B Baskı
Şimdi de parçaların 3 boyutlu çıktısını almaya başlayalım. Hovercraft'ın gövdesi basılacak en büyük parçadır ve özellikle 30x30cm baskı yatağı bulunan yazıcı ile çıktı alınmalıdır. Uygun ölçülerdeki yerli ve milli 3B yazıcılara bağlantıdan ulaşabilirsiniz. Baskı yapıldıktan sonra, biraz temizlik yapmanız gerekebilir. Hovercraft'ın veya kokpitin ana gövdesi, basılması yaklaşık 18 saat süren en uzun baskısıdır. Kavisli tasarım nedeniyle ve tek, yekpare bir baskı olmasını istediğimiz için, bu baskı için kullanılan ve temizlenmesi gereken birçok destek mevcuttur. Hovercraft'ın gövdesini ters olarak baskıya verirseniz çıkarılması gereken az miktarda destek malzemesi oluşur (-ki diğer türlü çok fazla destek temizlemeyle uğraşabilirsiniz). Çıktıyı aldıktan sonra basılan parça üzerinde bazı ayarlamalar yapmak zorunda kalabiliriz ve bazı malzemeleri merkezi üfleyici mahfazasından keserek etek tutucunun düzgün şekilde sığabilmesi için modifiye edebiliriz. Parçaların yuvarlak alanlarını temizlemek biraz zor olabilir, kolayca düzenlemek için basit bir zımpara kağıdı kullanabilirsiniz. Pervanelerin temizlenmesine gerek yok ve doğrudan 3D yazıcıdan çıktığı şekli ile kullanabilirsiniz.
Hovercraft'ı boyama
Bir sonraki adım 3B basılı parçaları boyamak. İlk kat için çikolata rengi veya bulamazsanız kahverengi kullanabilirsiniz. Tabi farklı renkler de tasarlamak isterseniz dilediğiniz rengi seçebilirsiniz. Bizim kullandığımız renk aslında sadece dekorasyon parçaları olan bazı küçük parçalar için açık kahverengi sprey boyadır. Hovercraft'ın biraz daha pastel görünmesini sağlamak için ilk kat kuruduktan sonra, parçalara iki renk daha ekleyebiliriz. Eskitme görüntüsü vermek için basit bir kağıda rastgele desen kesikleri oluşturun ve bunları farklı renklerde çizgiler ve lekeler yapmak için kullanın. Bunun için açık kahverengi ve siyah renk kullanabilirsiniz.
Arduino Mini RC Hovercraft'ın Montajı
Parçalar kuruduktan sonra montajına geçelim. Dümenleri kontrol eden sg90 servo motoru itici muhafazasına monte ederek başlayalım. Sg90'ı iki M2 cıvata ve somun kullanarak sabitleyin. Sonraki aşama fırçasız drone motoru. 28 mm ve 30 mm uzunluğunda bir çap'a sahip olan D2830 motor muhafaza boşluğuna uyacak şekilde özel olarak tasarlandı. Aynı ölçülerde farklı bir motoru da monte edebilirsiniz. Buraya motoru yerleştirirken ilk önce kabloları açıklıklardan geçirmemiz gerekiyor. Bu biraz uğraştırıcı bir işlem ama yine de kabloları geçirmek zorundayız. Sonra arka bölümde M3 cıvataları kullanarak motoru gövdeye sabitleyelim. Daha sonra, itme muhafazasını, hovercraft'ın ana gövdesiyle birleştirelim. Bu parça geniş bir açıklığa sahiptir, böylece servo ve fırçasız motor kabloları kolaylıkla geçebilir. Dört adet M3 cıvata kullanarak parçaları sıkıca birbirine tutturun. İşlemi bitirdikten sonra, ikinci fırçasız motoru hovercraft gövdesine monte etmeye devam edelim. Burada yine aynı yöntemi kullanacağız. İlk önce telleri açıklıklardan geçirelim daha sonra arka tarafta dört adet M3 cıvatası kullanarak motoru sabitleyelim.
Arduino Hovercraft Yapımı Devre şeması
Elektronik parçalar, alt gövde ile hovercraftın ana gövdesi arasına yerleştirilecektir. Fakat bunu yapmadan önce, devre şemasına bakalım ve her şeyin nasıl bağlanması gerektiğini görelim. Hovercraftın beyni Arduino'dur. Arduino ile iki elektronik hız kontrol cihazını veya ESC'yi kullanarak servo ve iki fırçasız motoru kolayca kontrol edebiliriz. Drone motorlarına güç sağlamak için, yaklaşık 11V güç sağlayan 3S Li-Po pil kullanabiliriz ve Arduino'ya güç sağlamak için ESC'lerin Akü Elimatör Devresi özelliği ile sağladıkları 5V enerjiyi kullanabiliriz. Kablosuz iletişim için NRF24L01 alıcı-verici modülünü kullanalım, eğer güçlendirilmiş bir antenle kullanılırsa açık alanda 700 metreye kadar çekim gücü elde edebiliriz. Nrf24l01'in temel çalışma prensibi, vericinin, Joystick veya potansiyometre verilerini, fırçasız motorların hızını ve konumunu kontrol eden alıcıya göndermesidir. Yukarıdaki devre şemasında bir küçük detay daha var. Doğrudan aküye bağlı iki rezistörden yapılmış basit bir voltaj bölücü eklendi. Voltaj bölücü, 11 volt gerilimi 4 volta düşürür ve 5V Arduino pinleri ile uyumludur. Üst bölümdeki 5mm led ile batarya gerilimini izleyebiliriz. Örneğin bataryanın gerilimi 11 voltun altına düşerse LED yanacaktır ve bizi uyaracaktır. Bileşenleri görseldeki gibi bağlamaya başlayalım. İki ESC'yi tek bir lipo'ya bağlamak için XT60 tipi bir paralel konektör kullanalım. Projeye bir güç düğmesi eklemek için, alttaki görselde görüldüğü gibi kabloyu kesip XT60 konektörü bağlayabilirsiniz. Tekrar bağlantılamak için bir taraf Y ayırıcı kablosuna ve diğer taraf bataryaya bağlanmalıdır. Sonra, ESC'leri ana gövdeye yerleştirelim. Dört M3 cıvata kullanarak iki parçayı birbirine bağlayalım. Lipo pili iç kısımda ön alana yerleştirelim. Daha sonra, bileşenleri Arduino'ya bağlamamız gerekiyor ve bu amaçla Arduino'ya GND ve 5V pinleri olarak hizmet edecek iki pin başlığı daha ekleyelim. Böylece, her şeyi Arduino'ya bağladığımız da, NRF24L01 antenini, gösterge LED'ini ve güç anahtarını kokpitin üst kapağından kolaylıkla geçirebiliriz. Ekstra pin eklemezsek her şeyi kokpite sığdırmamız gerekecek. Anten, güç anahtarı ve led gövde içerisine sığmayıp sıkıntı oluştaracağı için ekstra pin çok işimizi görecektir. Görseldeki proje de arduino uno r3 kullanıldığı için alan sıkıntısı yaşanmış. Nano veya Micro gibi küçük arduino kullanırsak alan genişliği sağlayabiliriz. Anten ve led için üst kapağı kullanabilirsiniz. Dümen sistemini kurmaya geçelim. İlk önce, M2 cıvata ve somun kullanarak servo motora küçük bir bağlantı sağlayalım. Daha sonra ilk dümeni yerine yerleştirip gövdeden geçen 2 mm metal tel kullanarak itme mahfazasına sabitleyelim ve böylece dümen pervane etrafında takılmadan dönebilsin. Aynı şekilde ikinci dümeni de bağlayalım. Sonra, dümen bölümünü hovercraft'ın arka tarafına yerleştirelim. Bir mini drill kullanarak bir delik açalım ve parçayı tek bir vida kullanarak gövdeye sabitleyelim. Bu parçaları her iki tarafa da yerleştirelim. Sonra hovercraft için şişirme eteği üretme aşamasına geçelim. Burada etek tutucunun etrafında delikler olduğunu göreceksiniz. Tüm somunları yerine taktıktan sonra, plastik çöp torbası kullanarak eteği yapmaya başlayalım(çöp torbası biraz kalın olmalı ki zemindeki herhangi bir taş, cam vb. madde torbayı delmesin). İlk önce tutucunun orta kısmına yapıştırıcı uygulayıp plastik torbaya yapıştıralım. Sonra tutucunun çevresini 6 cm kadar geniş şekilde işaretleyelim. Maket bıçağı kullanarak plastik torbayı işaretlediğimiz yerden keselim. Sonra eteği çevirip önceden yapıştırdığımız kısma bir miktar daha yapıştırıcı sürelim. Sonra, torbanın dış kısmının tutucunun üstüne yapıştırılması gerekiyor. Yapıştırıcı kullanarak plastik torbayı dikkatlice sabitleyelim. Sonra, cıvataların geçmesi gereken noktalara denk gelen plastik torba kısımlarına delikler açalım. Etek tutucu, hovercraft'ın gövdesinden sadece 1 mm daha küçüktür, bu nedenle plastik torba ile birlikte gövdeye mükemmel bir şekilde uyar. Eteği gövdeye sabitlemek için M3 cıvatalarını tüm çevresine monteleyelim. Etek için yapılması gereken bir şey daha var. Plastik torbanın orta bölgesini kesmeliyiz ki hava alttan dışarı çıkabilsin. Böylece, havanın büyük bir kısmı doğrudan eteği şişirecek ve fazla hava ortadaki kısımdan dışarı çıkacaktır. Son olarak yapılması gereken, pervaneleri fırçasız motorlara bağlamak. Bunun için fırçasız motorla gelen halkayı kullanıyorum. Pervaneyi motor miline tutturmanın en basit ve etkili yolu budur. Diğer motorumun halkasını kaybettim, bu yüzden doğrudan 3.15mm olan motor şaftına uyacak şekilde pervanenin farklı bir versiyonunu yazdırmak zorunda kaldım. Baskı aslında oldukça iyi çıktı, yapıştırıcı kullanmadan motora mükemmel bir şekilde takıldı ve sabitlendi. İşte bu... Arduino kontrollü mini rc hovercraft'ımız nihayet bitti. Şimdi sırada kodlar var.
Arduino Hovercraft Yapımı Projesi Kodları
/*
Arduino Hovercraft Yapımı
== Receiver Code - ESC and Servo Control =
,www.HayaletVeYap.com
Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define led 10
RF24 radio(8, 9); // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
Servo esc1; // create servo object to control the ESC
Servo esc2;
Servo servo1;
int esc1Value, esc2Value, servo1Value;
// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
byte j1PotX;
byte j1PotY;
byte j1Button;
byte j2PotX;
byte j2PotY;
byte j2Button;
byte pot1;
byte pot2;
byte tSwitch1;
byte tSwitch2;
byte button1;
byte button2;
byte button3;
byte button4;
};
Data_Package data; //Create a variable with the above structure
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.startListening(); // Set the module as receiver
resetData();
esc1.attach(7);
esc2.attach(6);
servo1.attach(5);
pinMode(led, OUTPUT);
}
void loop() {
// Check whether we keep receving data, or we have a connection between the two modules
currentTime = millis();
if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function
}
// Check whether there is data to be received
if (radio.available()) {
radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
lastReceiveTime = millis(); // At this moment we have received the data
}
// Controlling servos
servo1Value = map(data.j2PotX, 0, 255, 0, 50);
servo1.write(servo1Value);
// Controlling brushless motor with ESC
// Lift propeller
esc1Value = map(data.pot1, 0, 255, 1000, 2000); // Map the receiving value form 0 to 255 to 0 1000 to 2000, values used for controlling ESCs
esc1.writeMicroseconds(esc1Value); // Send the PWM control singal to the ESC
// Thrust propeller
esc2Value = constrain(data.j1PotY, 130, 255); // Joysticks stays in middle. So we only need values the upper values from 130 to 255
esc2Value = map(esc2Value, 130, 255, 1000, 2000);
esc2.writeMicroseconds(esc2Value);
// Monitor the battery voltage
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.00 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V i
Serial.println(voltage);
// If voltage is below 11V turn on the LED
if (voltage < 11) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
void resetData() {
// Reset the values when there is no radio connection - Set initial default values
data.j1PotX = 127;
data.j1PotY = 127;
data.j2PotX = 127;
data.j2PotY = 127;
data.j1Button = 1;
data.j2Button = 1;
data.pot1 = 1;
data.pot2 = 1;
data.tSwitch1 = 1;
data.tSwitch2 = 1;
data.button1 = 1;
data.button2 = 1;
data.button3 = 1;
data.button4 = 1;
}
Önemli: İlk önce, radyo iletişimi için RF24 kütüphanesinin yanı sıra hem servo hem de fırçasız motorları kontrol etmek için servo kütüphanesini dahil etmemiz gerekir. Daha sonra, rf ve servoları tanımlamamız gerekir, gelen değişkenleri DIY RC Vericiden depolamak için kullanılan değişkenlerin yapısının yanı sıra aşağıdaki program için bazı değişkenler gerekir. Bu iletişimin nasıl çalıştığı hakkında daha fazla bilgi için bu yazıyı inceleyebilirsiniz. Kurulum bölümünde, radyo iletişimini başlatmamız, servo ve ESC'lerin bağlı olduğu pinleri tanımlamamız gerekir. Döngü bölümünde, vericiden gelen verileri okur ve bu değerleri servo ve fırçasız motorları kontrol etmek için kullanırız. Böylece, 0 - 255 arasında değişen joystick gelen veriler 0 - 50 arasında bir değere dönüştürülür ve bu değerleri servo konumunu kontrol etmek için kullanırız. Aynı yöntemle, ESC'leri kullanarak fırçasız motorları kontrol ediyoruz. 0 ile 255 olarak gelen veriler 1000 ile 2000 arasında bir değere dönüştürülür ve wirteMicroseconds () işlevi kullanılarak bu verileri ESC'ye kontrol sinyali olarak göndeririz. Akü voltajını izlemek için voltaj bölücüsünden gelen analog girişi okuruz ve bazı basit matematik hesaplarla giriş değerlerini akü voltajının gerçek değerine dönüştürürüz. Akü voltajı 11V altına düşerse gösterge LED'ini yanması için kodlarız. Hepsi bu kadar. Daha fazla ayrıntıya ihtiyaç duymanız durumunda muhakkak videoya göz atın. Böylece her şeyin nasıl çalıştığını tam olarak anlayabilirsiniz. Umuyoruz ki bu arduino projesinden memnun kaldınız ve yeni bir şeyler öğrendiniz. Çok daha ilginç arduino projeleri için aşağıdaki bağlantıya mutlaka göz atın. |