<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>deneyap by şehitkamil bel kız aihl</title>
      <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d</link>
      <description>Cakayla yapıldı</description>
      <language>en-us</language>
      <pubDate>2022-05-22 08:12:52 UTC</pubDate>
      <lastBuildDate>2025-09-26 17:11:53 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>imu kodu </title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2194357066</link>
         <description><![CDATA[<div>&nbsp;#include "deneyap.h"&nbsp;<br>#include "lsm6dsm.h"&nbsp;<br>typedef struct struct_message { float accel_x; float accel_y; float accel_z;&nbsp;<br>&nbsp;}&nbsp;<br>struct_message;&nbsp;<br>LSM6DSM IMU;&nbsp;<br>struct_message imuData;&nbsp;<br>void setup() {&nbsp;<br>Serial.begin(115200);&nbsp;<br>IMU.begin();<br>&nbsp;}&nbsp;<br>void loop() {&nbsp;<br>&nbsp;float accAngleX;&nbsp;<br>float accAngleY;&nbsp;<br>accAngleX = atan(imuData.accel_x / sqrt(pow(imuData.accel_y, 2) + pow(imuData.accel_z, 2)+0.001)) * 180 / PI;<br>&nbsp;accAngleY = atan(-1 * imuData.accel_y / sqrt(pow(imuData.accel_x, 2) + pow(imuData.accel_z, 2)+0.001)) * 180 / PI;&nbsp;<br>Serial.print("accAngleX: "); Serial.println(accAngleX); Serial.print("accAngleY: "); Serial.println(accAngleY);&nbsp;<br>imuData.accel_x = IMU.readFloatAccelX(); Serial.print("accel_x: ");&nbsp;<br>Serial.println(imuData.accel_x);&nbsp;<br>imuData.accel_y = IMU.readFloatAccelY(); Serial.print("accel_y: ");&nbsp;<br>Serial.println(imuData.accel_y); imuData.accel_z = IMU.readFloatAccelZ();&nbsp;<br>Serial.print("accel_z: ");&nbsp;<br>Serial.println(imuData.accel_z); delay(50);&nbsp;<br>}&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-05-22 08:13:47 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2194357066</guid>
      </item>
      <item>
         <title>imu ile servo motor kontrolü</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2194389715</link>
         <description><![CDATA[<div>&nbsp;#include "deneyap.h"&nbsp;<br>#include "lsm6dsm.h"&nbsp;<br>#include "ESP32Servo.h"&nbsp;<br>#define SERVOPIN D0&nbsp;<br>typedef struct struct_message&nbsp;<br>{&nbsp;<br>float accel_x;&nbsp;<br>float accel_y;&nbsp;<br>float accel_z;&nbsp;<br>}&nbsp;<br>struct_message;&nbsp;<br>float angle_x=0.;&nbsp;<br>float angle_y=0.;&nbsp;<br>float angle_z=0.;&nbsp;<br>&nbsp;Servo myservo;&nbsp;<br>int pos=0;&nbsp;<br>int ref_pos=0;&nbsp;<br>LSM6DSM IMU;<br>struct_message imuData;<br>&nbsp;void setup()&nbsp;<br>{&nbsp;<br>IMU.begin();&nbsp;<br>myservo.attach(SERVOPIN);&nbsp;<br>}&nbsp;<br>&nbsp;void loop()&nbsp;<br>{ ref_pos=90;<br>imuData.accel_x = IMU.readFloatAccelX();&nbsp;<br>imuData.accel_y = IMU.readFloatAccelY();&nbsp;<br>imuData.accel_z = IMU.readFloatAccelZ();&nbsp;<br>angle_x = atan(imuData.accel_x / sqrt(pow(imuData.accel_y, 2) + pow(imuData.accel_z, 2)+0.001)) * 180 / PI; pos=angle_x;<br>myservo.write(ref_pos+pos);<br>&nbsp;delay(10);&nbsp;<br>}&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-05-22 09:30:50 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2194389715</guid>
      </item>
      <item>
         <title>Buzzer ve mesafe</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2194430354</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2022-05-22 11:00:18 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2194430354</guid>
      </item>
      <item>
         <title>joystik</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2203305817</link>
         <description><![CDATA[<div>&nbsp;#include "deneyap.h"&nbsp;<br>#define SW_pin D0&nbsp;<br>#define X_pin A0&nbsp;<br>#define Y_pin A1&nbsp;<br>&nbsp;int X_Val, Y_Val, Dig_Val;&nbsp;<br>&nbsp;void setup ()&nbsp;<br>{ Serial.begin(115200); // Seri portun 115200 baudrate hızında başlatılması.&nbsp;<br>pinMode(SW_pin, INPUT_PULLUP); // Switch (anahtar) değişkeni mod’u HIGH’ e ayarlanır. Butona basıldığında LOW değerini alır.&nbsp;<br>digitalWrite(SW_pin, HIGH); // Joystick eksen değişken değerlerinin alınacağı 2 pin’in INPUT (giriş) olarak tanımlanması.&nbsp;<br>pinMode(X_pin, INPUT); pinMode(Y_pin, INPUT);&nbsp;<br>}&nbsp;<br>&nbsp;void loop ()&nbsp;<br>{&nbsp;<br>X_Val = analogRead(X_pin);&nbsp;<br>Y_Val = analogRead(Y_pin);&nbsp;<br>Dig_Val =digitalRead(SW_pin);&nbsp;<br>Serial.print("X_Val: ");&nbsp;<br>Serial.println(X_Val);&nbsp;<br>Serial.print("Y_Val: ");&nbsp;<br>Serial.println(Y_Val);&nbsp;<br>Serial.print("Dig_Val: ");&nbsp;<br>Serial.println(Dig_Val);&nbsp;<br>delay(100);&nbsp;<br>}<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-05-29 07:12:28 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2203305817</guid>
      </item>
      <item>
         <title>joystik ve servo motor</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2203359257</link>
         <description><![CDATA[<div>&nbsp;#include "deneyap.h"&nbsp;<br>#include &nbsp;&lt;ESP32Servo.h&gt;<br>#define SERVOPIN1 D14&nbsp;<br>#define SERVOPIN2 D9&nbsp;<br>Servo myservo1, myservo2; // Servo motorların tanımlanması.&nbsp;<br>int pos = 0;&nbsp;<br>&nbsp;void setup()&nbsp;<br>{&nbsp;<br>myservo1.attach(SERVOPIN1); myservo2.attach(SERVOPIN2);&nbsp;<br>}&nbsp;<br>&nbsp;void loop()&nbsp;<br>&nbsp;{&nbsp;<br>for (pos = 0;&nbsp;<br>pos &lt;= 180;&nbsp;<br>pos += 1)&nbsp;<br>{ // Motorlara pos değerinin yollanması&nbsp;<br>myservo1.write(pos);&nbsp;<br>myservo2.write(pos);&nbsp;<br>delay (10); // Her bir döngüde 10 milisaniye bir gecikme ilave edilmesi.&nbsp;<br>}&nbsp;<br>for (pos = 180; pos &gt;= 0; pos -= 1)&nbsp;<br>{ // Motorlara pos değerinin yollanması&nbsp;<br>myservo1.write(pos);&nbsp;<br>myservo2.write(pos);&nbsp;<br>delay (10); // Her bir döngüde 10 milisaniye bir gecikme ilave edilmesi.&nbsp;<br>}&nbsp;<br>}&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-05-29 09:43:13 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2203359257</guid>
      </item>
      <item>
         <title>joystik ve servo 2</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2211260000</link>
         <description><![CDATA[<div>#include "deneyap.h"<br>#include&nbsp; &lt;ESP32Servo.h&gt;<br>#define SERVOPIN1 D14&nbsp;<br>#define SERVOPIN2 D9&nbsp;<br>#define SW_pin D0&nbsp;<br>#define X_pin A0&nbsp;<br>#define Y_pin A1&nbsp;<br>&nbsp;Servo myservo1, myservo2;&nbsp;<br>&nbsp;int X_Val, Y_Val; // Joystick eksen değişkenleri.&nbsp;<br>int pos1=0, pos2=0; // Motorların pozisyon değişkenleri. int dly = 10; // Genel döngüde ilave edilen gecikme için kullanılan değişken.<br>&nbsp;int stp = 1; // Motorların dönüş açısının değiştirilmesi durumunda her döngüde kullanılan adım değişkeni. Örneğin servo 1 pozitif yöne dönsün istendiğinde her döngüde, Pos1+=stp olacaktır (kod aşağıda).&nbsp;<br>int Dig_Val = 0; // Buton değeri&nbsp;<br>&nbsp;int teta1min=0;&nbsp;<br>int teta1max=180;&nbsp;<br>int teta2min=0;&nbsp;<br>int teta2max=180;&nbsp;<br>void setup()&nbsp;<br>{ // Servo motorların hangi dijital pinlere bağlı olduklarının belirtilmesi.&nbsp;<br>myservo1.attach(SERVOPIN1); myservo2.attach(SERVOPIN2);&nbsp;<br>pinMode(SW_pin, INPUT_PULLUP); // Switch (anahtar) değişkeni mod’u HIGH’ e ayarlanır. Butona basıldığında LOW değerini alır.&nbsp;<br>digitalWrite(SW_pin, HIGH);&nbsp;<br>pinMode(X_pin, INPUT);&nbsp;<br>pinMode(Y_pin, INPUT);&nbsp;<br>}&nbsp;<br>void loop()<br>{&nbsp;<br>X_Val = analogRead(X_pin);&nbsp;<br>Y_Val = analogRead(Y_pin);&nbsp;<br>&nbsp;Dig_Val=digitalRead(SW_pin);&nbsp;<br>&nbsp;if (Dig_Val&lt;1)&nbsp;<br>{&nbsp;<br>if&nbsp;<br>(dly==5) dly=10;&nbsp;<br>else&nbsp;<br>&nbsp; &nbsp;{&nbsp;<br>   if(dly==10) dly=20;<br>&nbsp;else if (dly==20) dly=5;&nbsp;<br>   } delay (500); // Butona basış tespit edildikten sonra 500 ms bir gecikme ilave edilmesi.&nbsp;<br>}&nbsp;<br>&nbsp; if (X_Val&lt;1000 &amp;&amp; pos1&gt;teta1min) pos1-=stp;&nbsp;<br>&nbsp;if (X_Val&gt;3000 &amp;&amp; pos1&lt;teta1max) pos1+=stp;&nbsp;<br>&nbsp;if (Y_Val&lt;1000 &amp;&amp; pos2&gt;teta2min) pos2-=stp;&nbsp;<br>&nbsp;if (Y_Val&gt;3000 &amp;&amp; pos2&lt;teta2max) pos2+=stp;&nbsp;<br>&nbsp;myservo1.write(pos1);<br>&nbsp;myservo2.write(pos2);&nbsp;<br>&nbsp;delay (dly); // bu gecikme işlemi ile motorların dönüş hızları tayin edilir.&nbsp;<br>}&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-06-05 09:31:53 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2211260000</guid>
      </item>
      <item>
         <title>IMU sensörü servo</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2211312797</link>
         <description><![CDATA[<div>// Deneyap, ESP32 ve IMU kütüphanelerinin ve dijital servo pinlerinin tanımlanması<br>#include "deneyap.h"<br>#include &lt;ESP32Servo.h&gt;<br>#include "lsm6dsm.h"<br>#define SERVOPIN1 D14<br>#define SERVOPIN2 D9<br>// Üç boyutlu İvme değişkenlerinin tanımlanması.<br>typedef struct struct_message {<br>&nbsp;float accel_x;<br>&nbsp;float accel_y;<br>&nbsp;float accel_z;<br>} struct_message;<br>LSM6DSM IMU; // Kart üzerindeki ivme ölçerin tanımlanması.<br>struct_message imuData; // İvme ölçer verileri tek bir blok değişken tanımlanması.<br>// Servo motorların tanımlanması<br>Servo myservo1;<br>Servo myservo2;<br>// X ve Y eksenlerindeki ivme değişkenlerinin tanımlanması ve ilk değerlerinin atanması.<br>float accAngleX=0.;<br>float accAngleY=0.;<br>// Motorların dönüş açı değişkenlerinin tanımlanması ve ilk değerlerinin atanması.<br>int pos1 = 90;<br>int pos2 = 90;<br>void setup()&nbsp;<br>{<br>&nbsp;IMU.begin(); // IMU’yu başlat.<br>&nbsp;// Servo motorların hangi dijital pinlere bağlı olduklarının belirtilmesi.<br>&nbsp;myservo1.attach(SERVOPIN1);<br>&nbsp;myservo2.attach(SERVOPIN2);<br>}<br>void loop()<br>{<br>&nbsp;// IMU’dan 3 boyutlu ivme verisi alınması:<br>&nbsp;imuData.accel_x = IMU.readFloatAccelX();<br>&nbsp;imuData.accel_y = IMU.readFloatAccelY();<br>&nbsp;imuData.accel_z = IMU.readFloatAccelZ();&nbsp;<br>// İvme verisinden, X ve Y eğim açılarının trigonometrik olarak belirlenmesi.<br>accAngleX = atan(imuData.accel_x / sqrt(pow(imuData.accel_y, 2) +&nbsp;<br>pow(imuData.accel_z, 2)+0.001)) * 180 / PI;<br>accAngleY = atan(-1 * imuData.accel_y / sqrt(pow(imuData.accel_x, 2) +&nbsp;<br>pow(imuData.accel_z, 2)+0.001)) * 180 / PI;<br>// Motorlara belirlenen X ve Y eğim açılarının uygulanması:<br>&nbsp;pos1=90+int(accAngleX);<br>pos2=90+int(accAngleY);<br>&nbsp;myservo1.write(pos1);<br>&nbsp;myservo2.write(pos2);<br>&nbsp;delay(10); // Genel döngüye 10 milisaniyelik bir gecikme uygulanması.<br>}<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-06-05 12:24:27 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2211312797</guid>
      </item>
      <item>
         <title>imu joystik ile servo kontrolü</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2211326099</link>
         <description><![CDATA[<div>// Deneyap, ESP32 ve IMU kütüphanelerinin tanımlanması<br>#include "deneyap.h"<br>#include &lt;ESP32Servo.h&gt;<br>#include "lsm6dsm.h"<br>// Dijital servo pin bağlantıları:<br>#define SERVOPIN1 D14<br>#define SERVOPIN2 D9<br>//Joystick eksen analog bağlantı pinleri<br>#define X_pin A0<br>#define Y_pin A1<br>int X_Val, Y_Val; // Joystick eksen değişkenleri<br>int dly = 5; // Genel döngüdeki gecikme değişkeni<br>int stp = 1; // Servo motorların dönüş durumunda her bir döngüdeki dönüş&nbsp;<br>adımı&nbsp;<br>int X_jys=0, Y_jys=0; // Joystick eksen değişkenlerinden elde edilen motor&nbsp;<br>//dönüş açıları<br>// Motor dönüş açı alt ve üst limitleri:<br>int teta1min=0;<br>int teta1max=180;<br>int teta2min=0;<br>int teta2max=180;<br>// İvme ölçerden elde edilen X ve Y eksenlerindeki açısal dönüşler:<br>float accAngleX=0.;<br>float accAngleY=0.;<br>typedef struct struct_message { // İvme ölçerden elde edilecek 3 boyutlu açısal&nbsp;<br>//ivmelerin tek blokta tanımlanması.<br>&nbsp;float accel_x;<br>&nbsp;float accel_y;<br>&nbsp;float accel_z;<br>} struct_message;<br>LSM6DSM IMU; // IMU’ nun tanımlanması<br>struct_message imuData; // İvme ölçer parametrelerinin tek blok bir&nbsp;<br>//değişkende tanımlanması.<br>// Servo motorların tanımlanması.<br>Servo myservo1;<br>Servo myservo2;<br>// Motorların dönüş açı değişkenlerinin tanımlanması ve ilk değerlerinin&nbsp;<br>//atanması.<br>int pos1 = 90;<br>int pos2 = 90;<br>void setup()&nbsp;<br>{<br>&nbsp;IMU.begin(); // IMU’yu başlat.<br>// Servo motorların hangi dijital pinlere bağlı olduklarının belirtilmesi.<br>&nbsp;myservo1.attach(SERVOPIN1);<br>&nbsp;myservo2.attach(SERVOPIN2);<br>&nbsp;pinMode(BUILTIN_KEY, INPUT); // Deneyap kartı üzerindeki butonun giriş&nbsp;<br>//olarak tanımlanması<br>&nbsp;// Joystick pinlerinin giriş olarak tanımlanması<br>&nbsp;pinMode(X_pin, INPUT);<br>&nbsp;pinMode(Y_pin, INPUT);<br>&nbsp;// RGB Led pinlerinin çıkış olarak tanımlanması.<br>&nbsp;pinMode(LEDR, OUTPUT);<br>&nbsp;pinMode(LEDG, OUTPUT);<br>&nbsp;pinMode(LEDB, OUTPUT);<br>&nbsp;digitalWrite(LEDR, LOW); //Kırmızı led açık (aktif)<br>&nbsp;digitalWrite(LEDG, HIGH); // Yeşil led sönük (pasif)<br>&nbsp;digitalWrite(LEDB, HIGH); // Mavi led sönük (pasif)<br>}<br>void loop()<br>{<br>&nbsp;// Joystick X ve Y değişiminin okunması.<br>&nbsp;X_Val = analogRead(X_pin);<br>&nbsp;Y_Val = analogRead(Y_pin);<br>&nbsp;uint8_t buttonState = digitalRead(BUILTIN_KEY); // Buton durumu<br>&nbsp;// Kart üzerindeki butona her basıldığında, servo motor dönüş hızlarını&nbsp;<br>//belirleyen dly değişkenine değerler atanması ve buna göre kart üzerindeki RGB&nbsp;<br>//led’lerinin değiştirilmesi.<br>&nbsp;if(buttonState == BUTTON_PRESSED) // Butona basılma durumu<br>&nbsp;{<br>&nbsp;if (dly==5) {<br>&nbsp;dly=10;<br>&nbsp;digitalWrite(LEDR, HIGH);<br>&nbsp;digitalWrite(LEDG, LOW); //Yeşil led aktif<br>&nbsp;}<br>&nbsp;else {<br>&nbsp;if(dly==10) {<br>&nbsp;dly=20;<br>&nbsp;digitalWrite(LEDG, HIGH);<br>&nbsp;digitalWrite(LEDB, LOW); //Mavi led aktif<br>&nbsp;}<br>&nbsp;else if (dly==20) {<br>&nbsp;dly=5;<br>&nbsp;digitalWrite(LEDR, LOW); //Kırmızı led aktif<br>&nbsp;digitalWrite(LEDB, HIGH);<br>&nbsp;}<br>&nbsp;}<br>&nbsp;delay(300); //Butona basış tespit edildikten sonra 300 ms bir gecikme ilave&nbsp;<br>//edilmesi.<br>&nbsp;}<br>&nbsp;// Joystick’ten elde edilen dönüş açılarının limitler dahilinde uygulanması.<br>&nbsp;if (X_Val&lt;1000 &amp;&amp; pos1&gt;teta1min) X_jys-=stp;<br>&nbsp;if (X_Val&gt;3000 &amp;&amp; pos1&lt;teta1max) X_jys+=stp;<br>&nbsp;if (Y_Val&lt;1000 &amp;&amp; pos2&gt;teta2min) Y_jys-=stp;<br>if (Y_Val&gt;3000 &amp;&amp; pos2&lt;teta2max) Y_jys+=stp;&nbsp;<br>&nbsp;// IMU’dan 3 boyutlu ivme verisi alınması:<br>&nbsp;imuData.accel_x = IMU.readFloatAccelX();<br>&nbsp;imuData.accel_y = IMU.readFloatAccelY();<br>&nbsp;imuData.accel_z = IMU.readFloatAccelZ();<br>&nbsp;// İvme verisinden, X ve Y eğim açılarının trigonometrik olarak belirlenmesi.<br>accAngleX = atan(imuData.accel_x / sqrt(pow(imuData.accel_y, 2) +&nbsp;<br>pow(imuData.accel_z, 2)+0.001)) * 180 / PI;<br>&nbsp;accAngleY = atan(-1 * imuData.accel_y / sqrt(pow(imuData.accel_x, 2) +&nbsp;<br>pow(imuData.accel_z, 2)+0.001)) * 180 / PI;<br>&nbsp;// Motor dönüş açıları:<br>&nbsp;pos1=90+int(accAngleX)+X_jys;<br>&nbsp;pos2=90+int(accAngleY)+Y_jys;<br>&nbsp;// Motorlara dönüş komutlarının verilmesi.<br>&nbsp;myservo1.write(pos1);<br>&nbsp;myservo2.write(pos2);<br>&nbsp;delay(dly); // bu gecikme işlemi ile motorların dönüş hızları tayin edilir.<br>}</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-06-05 13:02:37 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2211326099</guid>
      </item>
      <item>
         <title>Işık Sensörleri ile 2 Servo Motor</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2218480199</link>
         <description><![CDATA[<div>&nbsp;// Deneyap ve ESP32 kütüphanelerinin tanımlanması<br>#include "deneyap.h"<br>#include &lt;ESP32Servo.h&gt;<br>// Dijital servo pin bağlantıları:<br>#define SERVOPIN1 D9<br>#define SERVOPIN2 D14<br>// Işık sensörleri analog bağlantıları:<br>#define L1_pin A0<br>#define L2_pin A1<br>#define L3_pin A2<br>// Potansiyometre analog bağlantısı.<br>#define Pot_pin A3<br>// Motor dönüş açı alt ve üst limitleri:<br>int teta1min=0;<br>int teta1max=180;<br>int teta2min=0;<br>int teta2max=180;<br>//Accelerometre X ve Y eksenleri etrafı açı değişkenleri<br>int accAngleX=0;<br>int accAngleY=0;<br>int coef; // Potansiyometreden elde edilen katsayı değişkeni.<br>int valin1, valin2, valin3; // Işık sensörlerinden hesaplanan değerlerin&nbsp;<br>atanacağı değişkenler.<br>//Servo motor dönüş açı değişkenleri<br>int pos1 = 0;<br>int pos2 = 0;<br>// İvme ölçer verisinde oluşan noise’i (gürültüyü) azaltmak (hatta yok etmek)&nbsp;<br>için “moving average” algoritmasının uygulanmasında kullanılan değişkenler.<br>int i=0;<br>int n=10;<br>int32_t tot1=0.;<br>int32_t tot2=0.;<br>int32_t tot3=0.;<br>// Servo motorların tanımlanması.<br>Servo myservo1, myservo2;<br>void setup()&nbsp;<br>{<br>&nbsp;// Servo motorların hangi dijital pinlere bağlı olduklarının belirtilmesi.<br>&nbsp;myservo1.attach(SERVOPIN1);<br>&nbsp;myservo2.attach(SERVOPIN2);<br>}<br>void loop()<br>{<br>&nbsp;coef = analogRead(Pot_pin); //Potansiyometre çıkışının bir katsayı&nbsp;<br>değişkenine atanması.<br>&nbsp;// Işık sensörlerinden hesaplanan değerlerin atandığı değişkenler.<br>&nbsp;valin1 = 1023-analogRead(L1_pin);<br>&nbsp;valin2 = 1023-analogRead(L2_pin);<br>&nbsp;valin3 = 1023-analogRead(L3_pin);<br>&nbsp;// Işık sensörü verisindeki noise’i (gürültüyü) azaltmak için “moving average”&nbsp;<br>(hareketli ortalama) yöntemi:<br>&nbsp;if (i&lt;n) {<br>&nbsp;i++;&nbsp;<br>&nbsp;}<br>&nbsp;tot1=int(((i-1)*tot1+valin1)/i);<br>&nbsp;tot2=int(((i-1)*tot2+valin2)/i);<br>&nbsp;tot3=int(((i-1)*tot3+valin3)/i);<br>// Işık sensörlerinden hesaplana verilerin kullanılması ile hesaplanan servo&nbsp;<br>motor dönüş açıları:<br>&nbsp;pos1=90+(tot2-tot1)*((2048-coef)/2048.);<br>&nbsp;pos2=120+(0.5*(tot1+tot2)-tot3)*((2048-coef)/2048.);<br>// Motorlara dönüş komutlarının verilmesi.<br>&nbsp;myservo1.write(pos1);<br>&nbsp;myservo2.write(pos2);<br>&nbsp;delay(5); // Genel döngü içerisinde 5 milisaniye gecikme.<br>}<br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-06-12 09:38:03 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2218480199</guid>
      </item>
      <item>
         <title>üç serbestlik dereceli kol</title>
         <author>sehitkamilbelkaihl</author>
         <link>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2218486291</link>
         <description><![CDATA[<div>// Deneyap ve ESP32 kütüphanelerinin tanımlanması<br>#include "deneyap.h"<br>#include &lt;ESP32Servo.h&gt;<br>// Dijital joysticklerin button pin bağlantıları:<br>#define SW1_pin D0<br>#define SW2_pin D1<br>//Joysticklerin eksen analog bağlantı pinleri<br>#define X1_pin A0<br>#define Y1_pin A1<br>#define X2_pin A2<br>#define Y2_pin A3<br>// Dijital servo pin bağlantıları:<br>#define SERVOPIN1 D9<br>#define SERVOPIN2 D12<br>#define SERVOPIN3 D13<br>#define SERVOPIN4 D14<br>// Motor dönüş açı alt ve üst limitleri:<br>//Aşağıdaki teta değerleri 0-3000 arasında kalibre edilmiştir. 3000 değeri 180&nbsp;<br>dereceye karşılık gelmektedir.<br>int teta1min=0;<br>int teta1max=3000;<br>int teta2min=0;<br>int teta2max=3000;<br>int teta3min=0;<br>int teta3max=3000;<br>int teta4min=1500;<br>int teta4max=2000;<br>// Motor dönüş açıları için değişkenlerin tanımlanması<br>int valin1, valin2, valin3, valin4;<br>int valcalc1=1500;//Başlangıç açı değerleri<br>int valcalc2=1500;<br>int valcalc3=1500;<br>int valcalc4=2000;<br>int jystp=20; // Joysticklerle motor hareketleri sağlandığında her bir döngüde&nbsp;<br>istenen açı değeri (bu yazılımda 3000 değerinin 360 dereceye karşılık geldiğini&nbsp;<br>unutmayın.<br>bool playmode=false; // Robotun tekrarlama (oynama) modu değişkeni. Değer&nbsp;<br>false olduğunda, öğretme modunda demektir.<br>int ButtonMode=0; // Buton modu değişkeninin tanımlanması. Sıfır olduğunda,&nbsp;<br>öğretme modunda demektir<br>unsigned long CurrentMilliSec = millis(); // milis() fonksiyonu, şu anki saati&nbsp;<br>milisecond cinsinden vermektedir. Zamanlayıcı olarak bu fonksiyonu kullanmaktayız.&nbsp;<br>Herhangi bir anda, o anki zamanı bir long değişkenine atayabiliriz.<br>long PreMilliSec=0; // Bir evvelki zaman (milisaniye cinsinden)<br>int NumMemory=0; // Hafıza sayacı (Maksimum 50 olabilir. Deneyap kartının&nbsp;<br>kapasitesine bağlı olarak bu sınır 50’den yukarıda olabilir.)<br>int PreNumMemory=0; // Bir evvelki moddaki hafıza değeri.<br>int Step=-1; // Öğretme modunda, servo pozisyonlarını hafızaya alırken&nbsp;<br>kullanılan bir değişken.<br>// Servo pozisyonlarının hafızaya alındığı 50’lik seriye sahip değişkenler.<br>int joint1[50];<br>int joint2[50];<br>int joint3[50];<br>int joint4[50];<br>int maxarray=49; //Hafıza hatası vermeyi önlemek için 59 değerine sahip bir&nbsp;<br>limit değişkeni.<br>int prehiz=10; // Bir önceki hız değerinin atanacağı değişken tanımlaması.<br>int normalhiz=10; // Normal hız değişkeni<br>// hiz=1 çok yavaş, 5 yavaş, 10 normal, 15 hızlı, 20+ çok hızlı<br>int hiz=10; // Şu anki hız değişkeni<br>int prepos1, prepos2, prepos3, prepos4; // bir evvelki motor konumları.<br>int pos11,pos21,pos31,pos41; // Motor konumları ile ilgili ikincil (yardımcı)&nbsp;<br>değişkenler.<br>Servo myservo1, myservo2, myservo3, myservo4; // Servo motorların&nbsp;<br>tanımlanması.<br>void setup()&nbsp;<br>{<br>&nbsp;// Servo motorların hangi dijital pinlere bağlı olduklarının belirtilmesi.<br>&nbsp;myservo1.attach(SERVOPIN1);<br>&nbsp;myservo2.attach(SERVOPIN2);<br>&nbsp;myservo3.attach(SERVOPIN3);<br>&nbsp;myservo4.attach(SERVOPIN4);<br>&nbsp;// Joystik butonlarının pinlerinin tanımlanması (Normalde HIGH).<br>&nbsp;pinMode(SW1_pin, INPUT_PULLUP);<br>&nbsp;pinMode(SW2_pin, INPUT_PULLUP);<br>&nbsp;// Joystick pinlerinin giriş olarak tanımlanması<br>&nbsp;pinMode(X1_pin, INPUT);<br>&nbsp;pinMode(Y1_pin, INPUT);<br>&nbsp;pinMode(X2_pin, INPUT);<br>&nbsp;pinMode(Y2_pin, INPUT);<br>&nbsp;// Joystik butonlarının pinlerinin değerleri normalde HIGH’ a atandı.<br>&nbsp;digitalWrite(SW1_pin, HIGH);<br>&nbsp;digitalWrite(SW2_pin, HIGH);<br>&nbsp;// Tercihe bağlı olarak, Seri port’a “Ready” yazdırılması (baudrate= 9600)<br>&nbsp;Serial.begin(9600);<br>&nbsp;Serial.println("Ready.");&nbsp;<br>}<br>void loop() {<br>&nbsp;CurrentMilliSec = millis(); // Şu anki zaman değeri (ms)<br>&nbsp;Button(); // Kendi yazdığımız Button fonksiyonunun çağırılması.<br>&nbsp;if (playmode==false &amp;&amp; Step==-1){ // Öğretme modunda iken,<br>&nbsp;ReadAnalog(); // Analog kanalların okunması için kendi yazdığımız&nbsp;<br>ReadAnalog fonksiyonunun çağırılması.<br>&nbsp;// Servo motorlara dönüş komutlarının verilmesi:<br>&nbsp;myservo1.writeMicroseconds(valcalc1);<br>&nbsp;myservo2.writeMicroseconds(valcalc2);<br>&nbsp;myservo3.writeMicroseconds(valcalc3);<br>&nbsp;myservo4.writeMicroseconds(valcalc4);<br>&nbsp;delay(int(300./hiz)); // Hız kontrolü için genel döngü içerisindeki gecikme&nbsp;<br>ayarı.<br>&nbsp;}<br>&nbsp;else{<br>&nbsp;playit(); //tekrarlama (veya oynama) modunda iken kendi yazdığımız Play&nbsp;<br>fonksiyonunun çağırılması.<br>&nbsp;}<br>}&nbsp;<br>Joysticklerin ürettiği analog sinyallerin okunduğu ve motor açı değerlerinin bu&nbsp;<br>sinyallere göre değiştirildiği fonksiyon aşağıda verilmiştir.<br>void ReadAnalog() {<br>// Analog pinlere giren joystick değerlerinin okunması.<br>&nbsp;valin1 = analogRead(Y1_pin);&nbsp;<br>&nbsp;valin2 = analogRead(X1_pin);<br>&nbsp;valin3 = analogRead(X2_pin);<br>&nbsp;valin4 = analogRead(Y2_pin);<br>&nbsp;// Belli sınırlar dahilinde, Joystik değerlerine göre servo motor dönüş&nbsp;<br>açılarının tayini.<br>&nbsp;if (valin1&lt;1000 &amp;&amp; valcalc1&gt;teta1min) valcalc1-=jystp;<br>&nbsp;if (valin1&gt;3000 &amp;&amp; valcalc1&lt;teta1max) valcalc1+=jystp;<br>&nbsp;if (valin2&lt;1000 &amp;&amp; valcalc2&gt;teta2min) valcalc2+=jystp;<br>&nbsp;if (valin2&gt;3000 &amp;&amp; valcalc2&lt;teta2max) valcalc2-=jystp;<br>&nbsp;if (valin3&lt;1000 &amp;&amp; valcalc3&gt;teta3min) valcalc3-=jystp;<br>&nbsp;if (valin3&gt;3000 &amp;&amp; valcalc3&lt;teta3max) valcalc3+=jystp;<br>&nbsp;if (valin4&lt;1000 &amp;&amp; valcalc4&gt;teta4min) valcalc4-=jystp;<br>&nbsp;if (valin4&gt;3000 &amp;&amp; valcalc4&lt;teta4max) valcalc4+=jystp;<br>}<br>void Button() { // Butona basılma durumu<br>&nbsp;if (playmode==false){ // Eğer öğrenme modunda iken,<br>&nbsp;if (digitalRead(SW1_pin) == 0){<br>&nbsp;delay(100);<br>&nbsp;if (digitalRead(SW1_pin) == 1) { // butona tıklanmış ise,<br>&nbsp;if (ButtonMode == 0)<br>&nbsp;{<br>&nbsp;ButtonMode = 1; // İlk buton tek tık tespiti.<br>&nbsp;PreMilliSec = CurrentMilliSec;<br>&nbsp;}<br>&nbsp;else if ((ButtonMode == 1) &amp;&amp; (CurrentMilliSec - PreMilliSec &lt; 500))<br>&nbsp;{<br>&nbsp;ButtonMode = 2; // İlk buton çift tık tespiti.<br>&nbsp;}<br>&nbsp;}<br>&nbsp;}<br>&nbsp;if ((ButtonMode == 1) &amp;&amp; (CurrentMilliSec - PreMilliSec &gt; 600)) {<br>&nbsp;saveit(); // İlk buton tek tık tespit edildiğinde, motor konumları hafızaya&nbsp;<br>alınır.<br>&nbsp;NumMemory += 1;<br>&nbsp;if (NumMemory&gt;maxarray) NumMemory= maxarray;<br>&nbsp;ButtonMode = 0;<br>&nbsp;Serial.print("Saved: "); Serial.println(NumMemory);<br>&nbsp;}<br>&nbsp;else if (ButtonMode == 2 &amp;&amp; (CurrentMilliSec - PreMilliSec &gt; 600)) {<br>&nbsp;if ((NumMemory&gt;1 || PreNumMemory&gt;1) &amp;&amp; playmode==false){<br>&nbsp;Serial.println("Playmode...");<br>&nbsp;playmode = true; // Çift tık tespit edildiğinde tekrarlama (oynama) moduna&nbsp;<br>geçilir.<br>&nbsp;ButtonMode = 0;<br>&nbsp;if (NumMemory&lt;2) NumMemory=PreNumMemory; else&nbsp;<br>PreNumMemory=NumMemory; // Eğer hafızaya herhangi bir konum&nbsp;<br>alınmamış olup ta çift tık yapılırsa, bir önceki oynatılmış konum bilgilerinin&nbsp;<br>tekrar kullanılması için devreye alınması.<br>&nbsp;// Motor açı konumlarının hafızaya alınması:<br>&nbsp;joint1[0]=pos11;<br>&nbsp;joint2[0]=pos21;<br>&nbsp;joint3[0]=pos31;<br>&nbsp;joint4[0]=pos41;<br>&nbsp;Step=NumMemory-1;<br>&nbsp;ReadAnalog();<br>&nbsp;prepos1=valcalc1;<br>&nbsp;prepos2=valcalc2;<br>&nbsp;prepos3=valcalc3;<br>&nbsp;prepos4=valcalc4;<br>&nbsp;}<br>}<br>&nbsp;if (ButtonMode&lt;3 &amp;&amp; CurrentMilliSec - PreMilliSec &gt; 1000) {<br>&nbsp;ButtonMode = 0; // Tekrar öğretme moduna geçiş.<br>&nbsp;}<br>&nbsp;}<br>&nbsp;else if (ButtonMode&lt;3 &amp;&amp; digitalRead(SW1_pin) == 0) {<br>&nbsp;ButtonMode = 3;<br>&nbsp;Serial.println("Stopping."); // Tekrarlamayı (Oynamayı) durdur.<br>&nbsp;ReadAnalog();<br>&nbsp;NumMemory+=1;<br>&nbsp;// Durulan konumun hafızanın en son basamağına kaydedilmesi.<br>&nbsp;joint1[NumMemory-1] = valcalc1;<br>&nbsp;joint2[NumMemory-1] = valcalc2;<br>&nbsp;joint3[NumMemory-1] = valcalc3;<br>&nbsp;joint4[NumMemory-1] = valcalc4;<br>&nbsp;}<br>// İkinci butona her tık yapıldığında robot hareket hızı değiştirilir. Normal,&nbsp;<br>yavaş, hızlı olmak üzere 3 ayrı hız, aşağıdaki kod yazılmıştır. Diğer detaylar,&nbsp;<br>önceki bölümlerdeki kodlarda anlatıldığı gibidir.<br>&nbsp;if (digitalRead(SW2_pin) == 0) {<br>&nbsp;if (prehiz==hiz) {<br>&nbsp;if (hiz==normalhiz) {<br>&nbsp;hiz=2*normalhiz;<br>&nbsp;jystp=40;<br>&nbsp;Serial.println("High speed.");<br>&nbsp;if (playmode==false) {<br>&nbsp;delay(300);<br>&nbsp;}<br>&nbsp;} else {<br>&nbsp;if (hiz==(2*normalhiz)) {<br>&nbsp;hiz=normalhiz/2;<br>&nbsp;jystp=10;<br>&nbsp;Serial.println("Low speed.");<br>&nbsp;if (playmode==false) {<br>&nbsp;delay(300);<br>&nbsp;}<br>&nbsp;}<br>&nbsp;else if (hiz==(normalhiz/2)) {<br>&nbsp;hiz=normalhiz;<br>&nbsp;jystp=20;<br>&nbsp;Serial.println("Normal speed.");<br>&nbsp;if (playmode==false) {<br>&nbsp;delay(300);<br>&nbsp;}<br>&nbsp;}<br>&nbsp;}<br>&nbsp;}<br>&nbsp;}<br>&nbsp;else{<br>&nbsp;prehiz=hiz;<br>}<br>}<br>Mevcut servo motor açılarının hafızaya kaydedildiği fonksiyon aşağıda verilmiştir.&nbsp;<br>Detaylar, önceki bölümlerde verilen kodlardaki gibidir.<br>void saveit() {<br>&nbsp;joint1[NumMemory] = valcalc1;<br>&nbsp;joint2[NumMemory] = valcalc2;<br>&nbsp;joint3[NumMemory] = valcalc3;<br>&nbsp;joint4[NumMemory] = valcalc4;<br>&nbsp;prepos1=valcalc1;<br>&nbsp;prepos2=valcalc2;<br>&nbsp;prepos3=valcalc3;<br>&nbsp;prepos4=valcalc4;<br>&nbsp;if (NumMemory==1){<br>&nbsp;pos11=joint1[0];<br>&nbsp;pos21=joint2[0];<br>&nbsp;pos31=joint3[0];<br>&nbsp;pos41=joint4[0];<br>&nbsp;}<br>}<br>Hafızaya kaydedilen servo motor konumlarının tekrarlatıldığı fonksiyon aşağıda&nbsp;<br>verilmiştir. Detaylar, önceki bölümlerde verilen kodlardaki gibidir.<br>void playit()<br>{<br>&nbsp;float pos1=prepos1;<br>&nbsp;float pos2=prepos2;<br>&nbsp;float pos3=prepos3;<br>&nbsp;float pos4=prepos4;<br>&nbsp;// Motor dönüşlerinin olabildiğince düzgün ve sürekli hissedilmesi için dönüş&nbsp;<br>açı mesafeleri yukarıda tanımlanmış farklara bölüştürülüp servo motorlara&nbsp;<br>uygulanmıştır.<br>&nbsp;float dif1=abs(joint1[Step]-pos1);<br>&nbsp;float dif2=abs(joint2[Step]-pos2);<br>&nbsp;float dif3=abs(joint3[Step]-pos3);<br>&nbsp;float dif4=abs(joint4[Step]-pos4);<br>&nbsp;float maxdif=0.0;<br>&nbsp;if (dif1&gt;maxdif) maxdif=dif1;<br>&nbsp;if (dif2&gt;maxdif) maxdif=dif2;<br>&nbsp;if (dif3&gt;maxdif) maxdif=dif3;<br>&nbsp;if (dif4&gt;maxdif) maxdif=dif4;<br>&nbsp;maxdif=maxdif/hiz;<br>&nbsp;if (maxdif&lt;1.0) maxdif=1.0;<br>float stp1=(joint1[Step]-pos1)/maxdif;<br>&nbsp;float stp2=(joint2[Step]-pos2)/maxdif;<br>&nbsp;float stp3=(joint3[Step]-pos3)/maxdif;<br>&nbsp;float stp4=(joint4[Step]-pos4)/maxdif;<br>&nbsp;for (int i=1;i&lt;=int(maxdif);i++){ // Motor dönüşlerinin olabildiğince düzgün ve&nbsp;<br>sürekli hissedilmesi için dönüş açı mesafeleri yukarıda tanımlanmış farklara&nbsp;<br>bölüştürülüp servo motorlara uygulanmıştır.<br>&nbsp;pos1=pos1+stp1;<br>&nbsp;pos2=pos2+stp2;<br>&nbsp;pos3=pos3+stp3;<br>&nbsp;pos4=pos4+stp4;<br>&nbsp;if (i==int(maxdif)){<br>&nbsp;pos1=joint1[Step];<br>&nbsp;pos2=joint2[Step];<br>&nbsp;pos3=joint3[Step];<br>&nbsp;pos4=joint4[Step];<br>&nbsp;}<br>&nbsp;myservo1.writeMicroseconds(int(pos1));<br>&nbsp;myservo2.writeMicroseconds(int(pos2));<br>&nbsp;myservo3.writeMicroseconds(int(pos3));<br>&nbsp;myservo4.writeMicroseconds(int(pos4));<br>&nbsp;prepos1=pos1;<br>&nbsp;prepos2=pos2;<br>&nbsp;prepos3=pos3;<br>&nbsp;prepos4=pos4;<br>&nbsp;delay(10);<br>&nbsp;if (ButtonMode&lt;3) Button();<br>&nbsp;else delay(5);<br>&nbsp;}<br>&nbsp;if (ButtonMode==3 &amp;&amp; Step==NumMemory-1) { // Oynatma modunda&nbsp;<br>durdurma işlemi.<br>&nbsp;NumMemory = 0;<br>&nbsp;Step=-1;<br>&nbsp;ButtonMode = 0;<br>&nbsp;playmode=false;<br>&nbsp;Serial.println("Stopped.");<br>&nbsp;}<br>&nbsp;else{<br>&nbsp;Step+=1;<br>&nbsp;if (Step&gt;NumMemory-1) Step=0; // Hafıza aşıldığında, ilk adıma dönüş.&nbsp;<br>Burada istenirse “Step=NumMemory-1;” de yazılabilir ve hafızada sürekli en&nbsp;<br>son adımda kalınır.<br>&nbsp;}<br>}<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-06-12 09:55:21 UTC</pubDate>
         <guid>https://padlet.com/sehitkamilbelkaihl/zlft9omhj88kg29d/wish/2218486291</guid>
      </item>
   </channel>
</rss>
