Yapay zekaya kod yazdırmak :)

Başlatan ilyas KAYA, 05 Nisan 2023, 20:57:37

ilyas KAYA

Kısa bir deneme yaptım ve sonuç gayet tatmin edici. Gelecek vaad ediyor. Artık iyice tembel olacağız. Forum larin yerini alır mı sizce ? :)




openai.com/blog/chatgpt

ilyas KAYA

Arduino içinde bir deneme yaptım.




gevv

Alıntı yapılan: ilyas KAYA - 05 Nisan 2023, 20:57:37Forum larin yerini alır mı sizce

Alıntı Yapİsteginiz mevcut yasalar dahilinde maalesef, kullanımı ve yayılması, hem etik olarak hem de yasal olarak doğru değildir. Bu nedenle, yasa dışı talepler ile ilgili olarak yardımcı olamam. Bu tür eylemler, telif hakları yasalarına ve diğer yasal düzenlemelere aykırıdır ve ciddi sonuçları olabilir. Bunun yerine, açık kaynaklı veya ücretsiz alternatiflere bakabilirsiniz.

:D

Alır ama  pek kullanışlı olmaz gibi  :)
 

ilyas KAYA

#3
Arduino ile bir uygulama yapacağız.
---------------------------------------------------------------

Harika! Arduino ile yapabileceğiniz birçok farklı uygulama var. Sizin ne tür bir uygulama yapmak istediğinizi öğrenebilir miyim? Hangi bileşenleri kullanmayı planlıyorsunuz? Hangi sensörleri veya aktuatörleri kullanmayı düşünüyorsunuz? Bu bilgileri paylaşabilirseniz, size daha iyi yardımcı olabilirim.


ilyas kaya

As5600 kullanarak acı ve hızı bulup serial ekranda gösterelim.
---------------------------------------------------------------

Tamam, anladım. AS5600, manyetik açı sensörüdür ve Arduino ile kullanılabilmektedir. Sizin yapmak istediğiniz uygulama, AS5600 sensöründen aldığı verileri işleyerek açı ve hız değerlerini hesaplayacak ve bu değerleri seri port aracılığıyla ekranda gösterecektir.

İlk olarak, AS5600 sensörünü Arduino'ya bağlamanız gerekiyor. Sensörün SDA pimini Arduino'nun A4 pimine, SCL pimini de Arduino'nun A5 pimine bağlamanız gerekiyor. Bunun yanı sıra, sensörün güç kaynağı ve toprak hatlarını da Arduino'ya bağlamanız gerekiyor.

Ardından, Arduino kodunu yazabilirsiniz. AS5600 sensöründen veri okumak için "Wire" kütüphanesini kullanmanız gerekiyor. Aşağıdaki kod, AS5600 sensöründen açı ve hız değerlerini okuyacak ve bu değerleri seri port aracılığıyla ekranda gösterecektir:


#include <Wire.h>

#define AS5600_ADDRESS 0x36

void setup() {
  Serial.begin(9600);
  Wire.begin();
}

void loop() {
  Wire.beginTransmission(AS5600_ADDRESS);
  Wire.write(0x0C);
  Wire.endTransmission();

  Wire.requestFrom(AS5600_ADDRESS, 2);
  int angle = Wire.read() << 8 | Wire.read();

  Wire.beginTransmission(AS5600_ADDRESS);
  Wire.write(0x0D);
  Wire.endTransmission();

  Wire.requestFrom(AS5600_ADDRESS, 2);
  int speed = Wire.read() << 8 | Wire.read();

  Serial.print("Angle: ");
  Serial.print(angle);
  Serial.print("\tSpeed: ");
  Serial.println(speed);

  delay(500);
}



Yukarıdaki kodda, "AS5600_ADDRESS" değişkeni sensörün adresini tutar. "setup" fonksiyonunda seri iletişim hızını 9600 baud olarak ayarlıyoruz ve "Wire" kütüphanesini başlatıyoruz. "loop" fonksiyonunda, sensörden açı ve hız değerlerini okuyoruz ve bu değerleri seri port aracılığıyla ekranda gösteriyoruz. "delay" fonksiyonu, her veri okuması arasında 500 milisaniye bekleme süresi sağlar.

Kodu Arduino'ya yükleyerek çalıştırabilirsiniz. Seri port penceresini açarak açı ve hız değerlerini görebilirsiniz.

---------------------------------------------------------------


Bu koda şunu da eklemek istiyorum; hiz 10 rpm den düşük olursa serial porta "durdu" yazsin.

---------------------------------------------------------------

Tamam, anladım. Aşağıdaki kod, önceki örnekteki kodun üzerine "if" ifadesi ekleyerek hız değeri 10 RPM'den düşük olduğunda "durdu" yazdıracaktır:


#include <Wire.h>

#define AS5600_ADDRESS 0x36

void setup() {
  Serial.begin(9600);
  Wire.begin();
}

void loop() {
  Wire.beginTransmission(AS5600_ADDRESS);
  Wire.write(0x0C);
  Wire.endTransmission();

  Wire.requestFrom(AS5600_ADDRESS, 2);
  int angle = Wire.read() << 8 | Wire.read();

  Wire.beginTransmission(AS5600_ADDRESS);
  Wire.write(0x0D);
  Wire.endTransmission();

  Wire.requestFrom(AS5600_ADDRESS, 2);
  int speed = Wire.read() << 8 | Wire.read();

  Serial.print("Angle: ");
  Serial.print(angle);
  Serial.print("\tSpeed: ");
  Serial.print(speed);

  if (speed < 10) {
    Serial.print("\tDurdu");
  }

  Serial.println();

  delay(500);
}


Yukarıdaki kodda, "if" ifadesi ekleyerek, "speed" değişkeninin 10'dan küçük olup olmadığını kontrol ediyoruz. Eğer "speed" 10'dan küçükse, "Durdu" yazısı seri porta yazdırılıyor. "Serial.println()" ifadesi, her bir veri okumasının ardından bir yeni satıra geçmek için kullanılıyor.

---------------------------------------------------------------


Bu kodda; açı 360 derece gösteriliyorsa değeri 0 olsun.

---------------------------------------------------------------


Tamam, anladım. Aşağıdaki kod, önceki örnekteki kodun üzerine "if" ifadesi ekleyerek açı değeri 360 derece gösterildiğinde 0 olarak gösterilecektir:

#include <Wire.h>

#define AS5600_ADDRESS 0x36

void setup() {
  Serial.begin(9600);
  Wire.begin();
}

void loop() {
  Wire.beginTransmission(AS5600_ADDRESS);
  Wire.write(0x0C);
  Wire.endTransmission();

  Wire.requestFrom(AS5600_ADDRESS, 2);
  int angle = Wire.read() << 8 | Wire.read();

  if (angle == 4095) {
    angle = 0;
  }

  Wire.beginTransmission(AS5600_ADDRESS);
  Wire.write(0x0D);
  Wire.endTransmission();

  Wire.requestFrom(AS5600_ADDRESS, 2);
  int speed = Wire.read() << 8 | Wire.read();

  Serial.print("Angle: ");
  Serial.print(angle);
  Serial.print("\tSpeed: ");
  Serial.print(speed);

  if (speed < 10) {
    Serial.print("\tDurdu");
  }

  Serial.println();

  delay(500);
}

Yukarıdaki kodda, "if" ifadesi ekleyerek "angle" değerinin 4095 (yani 360 derece) olup olmadığını kontrol ediyoruz. Eğer "angle" 4095 ise, "angle" değişkeninin değeri 0 olarak güncelleniyor. Bu sayede, sensörün okuduğu 360 derece açı 0 olarak gösterilecektir.



Teşekkür ederim.


Rica ederim, her zaman yardımcı olmaktan memnuniyet duyarım! Başka bir konuda yardımcı olmam gerekiyorsa, lütfen sormaktan çekinmeyin.




06 Nisan 2023, 00:14:38
hayran olmamak elde değil :D

ilyas KAYA

Alıntı yapılan: gevv - 06 Nisan 2023, 00:09:21:D

Alır ama  pek kullanışlı olmaz gibi  :)
Evet hocam tabi ki ama hayatı epey kolaylaştıracaktır.

power20

Webte öneği bulunmayan ticari sır kapsamında bir şeyler sorsak? icat gibi bir şey ? öyle de yazar mı ?
Malzemelerin amacı dışında kullanımı gibi durumlar? Örneğin ADC 10 bit fakat biz girişinde bazı anahtarlamalar yaparak iki parti halinde okuma yapacağız 20 bit olacak ( salladım)   böyle bir şeyi uydurabilir mi?

ilyas KAYA

Alıntı yapılan: COM1 - 06 Nisan 2023, 00:27:45Webte öneği bulunmayan ticari sır kapsamında bir şeyler sorsak? icat gibi bir şey ? öyle de yazar mı ?
Malzemelerin amacı dışında kullanımı gibi durumlar? Örneğin ADC 10 bit fakat biz girişinde bazı anahtarlamalar yaparak iki parti halinde okuma yapacağız 20 bit olacak ( salladım)   böyle bir şeyi uydurabilir mi?

Bilmem istediğin herseyi deneyebilirsiniz.

ilyas KAYA

#7
10 bit ADC kullanarak iki ayrı okuma yaparak 20 bit analog veriyi elde edebilirsiniz. Bunun için iki farklı ADC kanalını kullanmak için.

İşlem adımları şöyle olabilir:

ADC'yi yapılandırmanın: ADC hücre yuvaları, referans voltajını,devirme parametrelerini ve diğer parametreleri belirlemenizi sağlar. Bu örnekte, ADC referansını kullanmak 5V olarak belirlenmiş ve geri dönüşüm hızı en yüksek seviyeye ayarlandı.

İlk kanal seçimi: İlk ADC kanalı, okunacak analog sinyale bağlı olduğu pini çıkışı. Bu örnekte, AN0 kanalını kullanacağız.

İlk okuma işlemi: ADC'yi başlatma ve çalıştırma bölümleri için gerekli işlemleri yapın. Ardından, ilk bozulmaları incelemek ve saklamak.

İkinci kanal seçimi: İkinci ADC kanalı, ikinci analog sinyale bağlı olduğu pini iletimi. Bu örnekte, AN1 kanalını kullanacağız.

İkinci okuma işlemi: ADC'yi başlatma ve çalıştırma işlemlerini gerçekleştirmek için gerekli işlemleri yapın. Ardından, ikinci atıkların değerlendirilmesi ve muhafaza edilmesi.

20 bit sonuç oluşturma: İlk döndürme parçaları, ikinci çalıştırma sonuçları 10 bit kaydırarak (shift) birleştirin. Böylece 20 bit'lik bir sonuç elde edersiniz.

İşlem adım kodlarının örnekleri şu şekilde olabilir:


// ADC yapılandırması
ADCON0 = 0b00000001; // ilk kanal olarak AN0 seçildi
ADCON1 = 0b00001110; // Referans voltajı 5V olarak ayarlandı, dönüşüm hızı en yüksek seviyeye ayarlandı.

// İlk okuma işlemi
unsigned int result1 = 0;
ADCON0bits.GO = 1; // ADC dönüşümünü başlat
while (ADCON0bits.DONE); // Dönüşüm tamamlanana kadar bekle
result1 = ADRESH << 8 | ADRESL; // Okunan değeri sakla

// İkinci kanal seçimi
ADCON0 = 0b00000101; // ikinci kanal olarak AN1 seçildi

// İkinci okuma işlemi
unsigned int result2 = 0;
ADCON0bits.GO = 1; // ADC dönüşümünü başlat
while (ADCON0bits.DONE); // Dönüşüm tamamlanana kadar bekle
result2 = ADRESH << 8 | ADRESL; // Okunan değeri sakla

// İki sonucu birleştirerek 20 bit sonucu elde edin
unsigned long int result = (unsigned long int)result1 <<

06 Nisan 2023, 00:58:23
Diyor kendisi:)

power20

#8
Olmuş gibi. Akıl süzgecinden geçirerek  kullanılabilir. Ben tek kanal ile yapılacak diye dünmüştüm. Kerata iki kanalı kullanmış. Böylece dışarıdan anahtarlama ihtiyacı kalmamış.   

bulut_01

20 bit olunca voltaj farklılıkları nasıl algılayacak mcu adc portu bu olayı donanımsal durum yazılımla olmaz
YENİLMEZ..

MC_Skywalker

#10
Değişime uğrayan bağımlılıklar nedeniyle hata yaptığı olmak ta buna dikkat edin. GPT modelinin eğitlidiği zamanki Github uygulama örneklerinin ve bağımlılık refranslarının zamnan içinde güncellenmesi sizi sıkıntıya sokabilir.

Deneme amaçlı Python'da PyPDF2 ile bir örnek istedim modelin eğitildiği zamnaki aşağıdaki kdu verdi.

import PyPDF2
# PDF dosyasını açmak için PdfFileReader kullanın
pdf = PyPDF2.PdfFileReader(open("Orhan Veli.pdf", "rb"))
# sayfa sayısını almak için numPages özelliğini kullanın
number_of_pages = pdf.getNumPages()
# son sayfayı almak için getPage yöntemini kullanın
page = pdf.getPage(number_of_pages - 1)
# sayfa metnini çıkarmak için extractText yöntemini kullanın
text = page.extractText()
# dosyayı yazmak için "w" modunu kullanın
file1 = open("Orhan Veli.txt", "w")
file1.write(text)
file1.close()

Günce PyPDF2 de :
pdf.getNumPages()
pdf.getPage()
fonksiyonları aşağıdaki gibi değişmiş,
len(reader.pages)
reader.pages[]


ilyas KAYA

Evet hata yaptığında bu kod calismadi diyip bağır kız sana yenisini versin. 😅

dnacikaya

2021 yılına kadar herşeyi biliyor. Sonrası yok🙂
Yazılımcıların kod yazma yeteneğinin kaybolmasına neden olabilir.
Asistan olarak gptyi kullanmak en mantıklısı. Algoritma tavsiyesi veya karmaşık bir kod için destek alınabilir ama bilmediğiniz bir kodlamayı size verdiyse çıktı olarak, verdiği çıktıyı öğrenmek gerek.
Yoksa gptnin kapatma düğmesine basılırsa gptyi açın diye bağıran yazılımcılar görürüz, gelecekte.
İnternet iyimi kötümü gibi bir soru yapay zeka içinde soruluyor bugünlerde. Kişinin nasıl kullandığına bağlı.

power20

#13
Alıntı yapılan: bulut_01 - 06 Nisan 2023, 08:58:3520 bit olunca voltaj farklılıkları nasıl algılayacak mcu adc portu bu olayı donanımsal durum yazılımla olmaz


Diyelim sadece 0.2Vmax  10 bit ölçülecek. Bunda sıkıntı yok. Adc referansı kaydırılarak mümkün oluyor.
0.2V =1023
0.0V =0

İki ADC uygun kombinasyon ile
gerçekten 20 bit olur mu emin değilim.

Aynı gerilimi farklı bölücüler kullanarak 2 girişe uygulayacağız Mesela 0..4.V arasını 1. Adc ölçecek. 4..4.2 arasını diğer ADC ölçecek Bu orta nokta değişken olup otomatik ayarlanacak. Kaba kısmını bir ADC hassas kısmını diğeri ölçecek.

Autorange multimetre gibi düşünelim.

Tam mekanizmayı belirleyebilirsek bilime katkımız olur.




bulut_01

bu yöntemin çalışacagını sanmıyorum
YENİLMEZ..