arduino ile sensör-lcd

jass

Üye
Katılım
2 Kas 2012
Mesajlar
21
Puanları
1
Elimde bir photoelectric sensor ile 6 keypad li lcd var.Arduino ile çalışmaya yeni başladım sayılır ve bu çalışmada dışarıdan girdiğim değere kadar ürün saydırmak istiyorum. dışarıdan bir değer giriyorum: mesela 20. daha sonra sensör reflektörü her gördüğünde 10 sayması lazım ve toplamı ekranda göstererk işlem tamamlandı demesi lazım. Fakat değeri girdikten sonra işlem başladı demesine rağmen ben reflektörü istediğim sayıda saydırsam bile çok uzun zaman sonra işlem tamamlandı diyor ve sensörün enerjisini kestiğimde ekranda çok alakasız bir toplam gösteriyor.
yardımcı olacak bir arkadaşım varsa eğer mail olarak videoları vs atabilirim.Gerçekten yardıma ihtiyacım var...
yazdığım program aşağıda :


#include <LiquidCrystal.h>
#include "Wire.h"
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // adjust this to suit your pins.
int sayac=10;
int sayi=0;
volatile int sayac2=0;
void setup() {
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("MOSTEM KONVEYOR");
lcd.setCursor(1, 1);
lcd.print("KONUM TAKIBI");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ILERLEME MIKTARI:");
attachInterrupt(0, swap, CHANGE);
}
void loop() {
kontrol:
if(sayac2==sayac)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Islem tamamlandi");
}
else if(sayac2=!sayac)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(sayac2);
delay(2000);
}




if(analogRead(sayi)>300 && analogRead(sayi)<320)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ILERLEME MIKTARI:");
lcd.setCursor(1, 1);
sayac=sayac-10;

lcd.print(sayac);
delay(500);
}



if(analogRead(sayi)>129 && analogRead(sayi)<140)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ILERLEME MIKTARI:");
lcd.setCursor(1, 1);
sayac=sayac+10;
lcd.print(sayac);
delay(500);
}



if(analogRead(sayi)>450 && analogRead(sayi)<512)
{
lcd.clear();
lcd.print("Deger Kaydedildi");
delay(2000);
lcd.clear();
lcd.print("Kontrol basliyor");
delay(1000);
lcd.clear();
lcd.print("Islem basladi");
delay(2000);
}

else
{
goto kontrol;
}
}
void swap()
{
sayac2=sayac2+10;
}
 
if(analogRead(sayi)>129 && analogRead(sayi)<140)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ILERLEME MIKTARI:");
lcd.setCursor(1, 1);
sayac=sayac+10;
lcd.print(sayac);
delay(500);
}


Ne zaman analog sinyal alsanız bu işlem tamamlanacaktır. 500 ms taramanız var.
Ne zaman analog değer belirlenen aralıkta ve ilk anda görme aktifolduğu bayrak yukarda ise sayma gerçekleşmelidir.
Yani siz bir ürün gördükten sonra bir bayrağı set edecek ve analog girişin değeri boşluktaki değerine geldiği zaman tekrar sayma bayrağımı kaldıracaksınız.
Şayet analog kanalında haddinden fazla dalgalanma mevcut ise sinyali negatife çekerek (ki bu çalışma skalanızı küçültür) olası sinyal bozukluklarını bertaraf edeceksiniz.

Umarım yardımı dokunmuştur.
 
teşekkür ederim ama reflektör olması sizce işi sıkıntıya sokuyor olabilir mi?
 
Tabiki kızıl ötesi alıcı/verici kullan daha kararlı çalışır ve aynı zamanda sensör devrelerine mutlaka trigger filtresi (fiziksel donanımsal) kullanmanız gerekmektedir.
Bunu bir cd romu patlatarak (alıcı verici) içindeki ekipmanları kullanabilirsin(Uyarı : Lazerin çevreye zararı kontrol edilmelidir.)
Photo electric kullanacağına arduino uyumlu ultrasonic sensör kullanman hem ekonomik hem de zaman kazandırır.
Vaktim çok diyorsan otur kafana göre bir sensör yap.

Kolay gelsin...
 

Forum istatistikleri

Konular
127,959
Mesajlar
913,914
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst