Pdanisman
Üye
- Katılım
- 13 Ocak 2022
- Mesajlar
- 21
- Puanları
- 1
- Yaş
- 35
Ben meb e bağlı bilim ve saat merkezinde rehberlik servisi görevlisi psikolojik danışmanım. Merak ve ilgimden ve bulunduğum okuldan dolayı arduino kodlama ve robotik alanında öğrenmeler yapmam gerekiyor. Hayatımda hep proje tabanlı öğrenmeler yapmışımdır. Yani önce bir proje amaçlayıp sonra yoluma çıkan engelleri aşarken öğrenmek!
Burada bu serüven ile alakalı tüm süreci fırsat buldukça yazacağım. Fırsat buldukça okur ve yardımcı olursanız sevinirim.
1-Araştırma...
Projeye kedi anatomisi ve yürüyüş şeklini inceleyerek başladım.
üst bacak ve baldır boyutları ön ve arka ayaklarda farklı. yürüyüş şekli ise incelediğim makalelere göre yavaş hızlı ve zıplayarak çeşitli şekillerde olabiliyor, bu hız farklılıklarını oluşturmak için kimi zaman çapraz ayakları kimi zaman yan ayakları kimi zamanda ön ayakları senkronize kullanıyorlar.
. yaygın inanış sağ ön ve sol arkanın aynı anda hareketi olsa da. iki ayağın yerden kesilmesi ile robotun dengesini sağlayamayacağımdan eminim. bu nedenle sadece bir ayağın yere temasının kesilmesi doğru tercih. + ağırlık merkezi gövdenin tam ortası olmalı yoksa tek ayak bile yerden kesilse düşecek.
https://dergipark.org.tr/en/download/article-file/816206
ilgili makalenin linkidir. Bu yazıda robotların yapımına benim yöntemle başlanmış ama baya baya yavaş ilerledikleri için zıplar pozisyonun taklidine geçilmiş diye anladım. neyse biz işimize bakalım.
2-tasarıma geçelim:
İzlediğim robot görüntülerinde gördüğüm kadarıyla bacakların boyları ön arka farketmeksizin aynıydı. birazda üşendim. tek bacak tasarlayıp sağ ve sol için simetriğini aldım. 3d yazıcıda önce tek bacağı bir basıp bakalım. genel olarak dirsek ve üst bacak var sadece. ayak bileğini avare olarak tasarladım. ağırlık merkezi öne doğru olduğundan her pozisyonda ayağın tabanı yere doğru bakacak. (umarım)
3- Tek bacağın hareketi.
Bacağın hareketi nasıl çok odaklanmadım bu aşamada. sonuçta sadece bir bacağı 3d yazıcıda bastım.
arduino uno + mg90s motorlarını kullanmaya karar verdim metal dişli ve küçük bir motordu. tasarımda da bunu düşünerek bu motorlara uygun yer açmıştım zaten.
Kodlamada chatgpt yi kullanıyorum. kodlama mantığım var ama yapay zeka işleri hakikaten kolaylaştırıyor. https://chat.openai.com/chat
kodlamada mantık şöyle biz motora bir açı değeri veriyoruz. motor o açıya gidiyor. Bu nedenle motorları bacak parçalarına bağlarken hangi açıda bağladığımızı bilmek önemli. Eğer motor o an 25 derece açıdaysa ve biz 50 derecelik bir açıyla bağlarsak biz 50 dereceye git kodunu verdiğimizde 50 ye değil 75 dereceye gider ve işimize yaramaz. Bu yüzden önce motorlar bağlı değilken 90 dereceye git komutunu veriyorum. sonra yere dik pozisyonda bacakları birleştirdim.
sonra yürüyüş kod denemesi yaptım. Buraların fotoğrafı kod kaydı yok ama
ilk konumu belirledim öncelikle. dizler kırık üst bacak hafif geri. şu en üstteki kedi yürüyüş resmindeki gibi. Bu pozisyonda açılar takriben. üst motor için 135 alt motor için 45 derece.
150 derecelere gidecek. sonra alt motor 30 dereceye gidecek. (böylece bacak iyice toplanacak.)
sonra üst motor 45 dereceye giderken alt motor 90 dereceye ilerleyecek. (böylece öne doğru uzanmış bir bacak pozisyonu oluşacak. sonrada motorlar ilk konuma ilerleyecek.) (kod elimde yok ama bu metni chat gpt ye bi atayım bakalım ne yazacak. kod uygun ise buraya yazarım. denemediğim için hatalar olabilir. Aynen kullanacaksanız dikkat etmeniz gerek.)
Bu aşamada for döngüsünü bilmiyordum ve ben kodu yazarken motorların direk belirlediğim açıya hareket etmesini istemiştim. hepsi aynı anda salisede istediğim açıda oluyordu.(bu tabi istenmeyecek bir durum. bu hızda hareket edince zıplamak gibi olur.) yavaş yavaş istenen açıya dönmesi gerekliydi. buda ancak for döngüsüyle oluyormuş. bunun dez avantajıda her motorun tek tek istenilen hareketi yapması.
yada her for döngüsü için istenilen açılara gidecek şekilde bir denklem kurmamız gerekecek. çünkü bir döngüden çıkmadan diğerine girmiyor kod satırı. ama tek for döngüsünde farklı açılara gitmek de pek mümkün değil gibi neyse şuan bilgim buna yetiyor. ona ilerde bakarız.
4. Aşama.
Tüm bacakları bastım. ana gövdeyi basmadım. ana gövdenin basımı 32 saati buluyor ne olur ne olmaz şimdilik gövde yerine bir karton kullanacağım.
servo motor olarak her bacağa 2 adet motor bağlayacağımdan 8 adet motor ve arduinoya 8 adet giriş gerekli. ilerde kuyruk kafa falanda ekleyeceğimizi düşünürsek arduinonun girişleri bu kadar motora yetmeyecek. bu yüzden PCA 9685 adında bir motor sürücüsü kullanacağım. 16 tane motoru sürebiliyormuş.
https://pdf.direnc.net/upload/16-channel-pwm-servo-driver.pdf buda datasheet i
bu sürücü kart için 5v elektrik lazım. bunun için iki adet lion pil aldım
Gerekli servolar
breadboard
ve kontrol için bir Ir Remote kontrol yani basit bir kumanda aldım.
NOT:.(servosürücüsü için alınan 3.7 den iki tanesi LİON pil 7.4v ediyor. burada bilen birisi diye düşündüğüm birilerinden fikir almıştım. kartın regülatörlü olduğunu düşünüp uygun demişti ama kart regülatörsüz. ilerde denerken 3 motorum zarar gördüğünden biliyorum. en uygunu 5v Lipo pil imiş. Şu aşamada lipo pile de ayrı para vermek istemediğimden lion pillerimi paralel bağladım. düşük voltaj yüksek amper iş gördü. şuan paralel bağlı lion pilleri kullanıyorum 3.7v ile çalışıyor galiba uygun w değerini çekiyor umarım kart zarar görmez.)
5. aşama kodlama ve basit hareket denemeleri olacak..
Burada bu serüven ile alakalı tüm süreci fırsat buldukça yazacağım. Fırsat buldukça okur ve yardımcı olursanız sevinirim.
1-Araştırma...
Projeye kedi anatomisi ve yürüyüş şeklini inceleyerek başladım.
üst bacak ve baldır boyutları ön ve arka ayaklarda farklı. yürüyüş şekli ise incelediğim makalelere göre yavaş hızlı ve zıplayarak çeşitli şekillerde olabiliyor, bu hız farklılıklarını oluşturmak için kimi zaman çapraz ayakları kimi zaman yan ayakları kimi zamanda ön ayakları senkronize kullanıyorlar.
. yaygın inanış sağ ön ve sol arkanın aynı anda hareketi olsa da. iki ayağın yerden kesilmesi ile robotun dengesini sağlayamayacağımdan eminim. bu nedenle sadece bir ayağın yere temasının kesilmesi doğru tercih. + ağırlık merkezi gövdenin tam ortası olmalı yoksa tek ayak bile yerden kesilse düşecek.
https://dergipark.org.tr/en/download/article-file/816206
ilgili makalenin linkidir. Bu yazıda robotların yapımına benim yöntemle başlanmış ama baya baya yavaş ilerledikleri için zıplar pozisyonun taklidine geçilmiş diye anladım. neyse biz işimize bakalım.
2-tasarıma geçelim:
İzlediğim robot görüntülerinde gördüğüm kadarıyla bacakların boyları ön arka farketmeksizin aynıydı. birazda üşendim. tek bacak tasarlayıp sağ ve sol için simetriğini aldım. 3d yazıcıda önce tek bacağı bir basıp bakalım. genel olarak dirsek ve üst bacak var sadece. ayak bileğini avare olarak tasarladım. ağırlık merkezi öne doğru olduğundan her pozisyonda ayağın tabanı yere doğru bakacak. (umarım)
3- Tek bacağın hareketi.
Bacağın hareketi nasıl çok odaklanmadım bu aşamada. sonuçta sadece bir bacağı 3d yazıcıda bastım.
arduino uno + mg90s motorlarını kullanmaya karar verdim metal dişli ve küçük bir motordu. tasarımda da bunu düşünerek bu motorlara uygun yer açmıştım zaten.
Kodlamada chatgpt yi kullanıyorum. kodlama mantığım var ama yapay zeka işleri hakikaten kolaylaştırıyor. https://chat.openai.com/chat
kodlamada mantık şöyle biz motora bir açı değeri veriyoruz. motor o açıya gidiyor. Bu nedenle motorları bacak parçalarına bağlarken hangi açıda bağladığımızı bilmek önemli. Eğer motor o an 25 derece açıdaysa ve biz 50 derecelik bir açıyla bağlarsak biz 50 dereceye git kodunu verdiğimizde 50 ye değil 75 dereceye gider ve işimize yaramaz. Bu yüzden önce motorlar bağlı değilken 90 dereceye git komutunu veriyorum. sonra yere dik pozisyonda bacakları birleştirdim.
#include <Servo.h>
Servo servoMotor1;
Servo servoMotor2;
void setup() {
servoMotor1.attach(9); // servoMotor1 sinyal kablosu 9 numaralı pine bağlı
servoMotor2.attach(10); // servoMotor2 sinyal kablosu 10 numaralı pine bağlı
}
void loop() {
servoMotor1.write(90); // servoMotor1 90 derece açıya ayarlanır
servoMotor2.write(90); // servoMotor2 90 derece açıya ayarlanır
delay(1000); // 1 saniye beklenir
}
sonra yürüyüş kod denemesi yaptım. Buraların fotoğrafı kod kaydı yok ama
ilk konumu belirledim öncelikle. dizler kırık üst bacak hafif geri. şu en üstteki kedi yürüyüş resmindeki gibi. Bu pozisyonda açılar takriben. üst motor için 135 alt motor için 45 derece.
150 derecelere gidecek. sonra alt motor 30 dereceye gidecek. (böylece bacak iyice toplanacak.)
sonra üst motor 45 dereceye giderken alt motor 90 dereceye ilerleyecek. (böylece öne doğru uzanmış bir bacak pozisyonu oluşacak. sonrada motorlar ilk konuma ilerleyecek.) (kod elimde yok ama bu metni chat gpt ye bi atayım bakalım ne yazacak. kod uygun ise buraya yazarım. denemediğim için hatalar olabilir. Aynen kullanacaksanız dikkat etmeniz gerek.)
#include <Servo.h>
Servo servoMotorUst;
Servo servoMotorAlt;
void setup() {
servoMotorUst.attach(9); // servoMotorUst sinyal kablosu 9 numaralı pine bağlı
servoMotorAlt.attach(10); // servoMotorAlt sinyal kablosu 10 numaralı pine bağlı }
void loop() { // Üst motor 135 derece açıya ayarlanır
servoMotorUst.write(135);
delay(10); // Alt motor 45 derece açıya ayarlanır
servoMotorAlt.write(45);
delay(10);
delay(1000); // 1 saniye beklenir
// Alt motor 30 derece açıya ayarlanır
for (int i = servoMotorAlt.read(); i >= 30; i--) {
servoMotorAlt.write(i); delay(10); }
delay(1000);
// Üst motor 150 derece açıya doğru hareket eder
for (int i = 135; i <= 150; i++) {
servoMotorUst.write(i);
delay(10); }
delay(1000); // 1 saniye beklenir
// Üst motor 45 derece açıya doğru hareket eder
for (int i = 150; i >= 45; i--) {
servoMotorUst.write(i);
delay(10); }
delay(1000); // 1 saniye beklenir
// Alt motor 90 derece açıya ayarlanır
for (int i = 30; i <= 90; i++) {
servoMotorAlt.write(i); delay(10); }
delay(1000);
// Üst motor 135 derece açıya doğru hareket eder
for (int i = 45; i <= 135; i++) {
servoMotorUst.write(i);
delay(10); }
delay(1000); // 1 saniye beklenir
// Alt motor 45 derece açıya ayarlanır
for (int i = 90; i >= 45; i--) {
servoMotorAlt.write(i); delay(10); }
delay(1000);
Bu aşamada for döngüsünü bilmiyordum ve ben kodu yazarken motorların direk belirlediğim açıya hareket etmesini istemiştim. hepsi aynı anda salisede istediğim açıda oluyordu.(bu tabi istenmeyecek bir durum. bu hızda hareket edince zıplamak gibi olur.) yavaş yavaş istenen açıya dönmesi gerekliydi. buda ancak for döngüsüyle oluyormuş. bunun dez avantajıda her motorun tek tek istenilen hareketi yapması.
yada her for döngüsü için istenilen açılara gidecek şekilde bir denklem kurmamız gerekecek. çünkü bir döngüden çıkmadan diğerine girmiyor kod satırı. ama tek for döngüsünde farklı açılara gitmek de pek mümkün değil gibi neyse şuan bilgim buna yetiyor. ona ilerde bakarız.
4. Aşama.
Tüm bacakları bastım. ana gövdeyi basmadım. ana gövdenin basımı 32 saati buluyor ne olur ne olmaz şimdilik gövde yerine bir karton kullanacağım.
servo motor olarak her bacağa 2 adet motor bağlayacağımdan 8 adet motor ve arduinoya 8 adet giriş gerekli. ilerde kuyruk kafa falanda ekleyeceğimizi düşünürsek arduinonun girişleri bu kadar motora yetmeyecek. bu yüzden PCA 9685 adında bir motor sürücüsü kullanacağım. 16 tane motoru sürebiliyormuş.
https://pdf.direnc.net/upload/16-channel-pwm-servo-driver.pdf buda datasheet i
bu sürücü kart için 5v elektrik lazım. bunun için iki adet lion pil aldım
Gerekli servolar
breadboard
ve kontrol için bir Ir Remote kontrol yani basit bir kumanda aldım.
NOT:.(servosürücüsü için alınan 3.7 den iki tanesi LİON pil 7.4v ediyor. burada bilen birisi diye düşündüğüm birilerinden fikir almıştım. kartın regülatörlü olduğunu düşünüp uygun demişti ama kart regülatörsüz. ilerde denerken 3 motorum zarar gördüğünden biliyorum. en uygunu 5v Lipo pil imiş. Şu aşamada lipo pile de ayrı para vermek istemediğimden lion pillerimi paralel bağladım. düşük voltaj yüksek amper iş gördü. şuan paralel bağlı lion pilleri kullanıyorum 3.7v ile çalışıyor galiba uygun w değerini çekiyor umarım kart zarar görmez.)
5. aşama kodlama ve basit hareket denemeleri olacak..
Son düzenleme: