Arduino ile 2 Sensör Kullanımı Mümkün mü?

Tasarımcı

Yeni Üye
6 Nis 2020
4
1
3
Arkadaşlar, herkese hayırlı ve sıhhatli günler diliyorum.
Günlerdir bir proje üzerinde çalışıyorum ancak işin içinden maalesef çıkamamadım. Çalışmanın devresel kısmını ve yazılımını hallettim, çalıştırdım ancak dengesiz ve tutarsız çalşıyordu, nedenini araştırdığımda, Arduino ile aynı anda 2 ya da daha fazla işlemin aynı anda yapılamayacağı ile ilgili yazılar okudum.

Bazı çözümler denedim, kesme gibi ancak kesme fonksiyonun altında for döngüsü ve delay beklemesi kullanılamıyor, sadece millis ve micros kullanılıyor ancak onları da çalışmama uyarlayamadım.

Projemin algoritması şu şekilde:
2 sensör kullanıyorum; ultrasonik ve kızılötesi. İlk olarak kızılötesi sensörünü dış uyarı ile aktif olacak, o (kızılötesi) aktif iken 20-30 saniye sonra bir diğer sensör ultrasonik de aktif hale galecek yani şöyle basitleştireyim: Elimle 1.sensör aktif oldu, 30 sn sonra da 2.sensör aktif olacak ve aynı ayna çalışıyorlar ancak 2.sensörün 30 sn sonra aktif olması sabit değil yani kullanıcı ne zaman o sensörü aktif hale getirecek ortama girerse, o zaman aktive olması gerekiyor.

İşin içinden çıkamadım, aklıma her sensör için ayrı ayrı Arduino kullanmak gerekebilir fikri de geliyor ancak muhtemelen bilmediğim bir şeyler olur diyorum, interrupt ya da farklı bir yöntemle aynı anda 2 ya da daha fazla sensör kullanılabilir diyorum.
 
  • Beğen
Tepkiler: RobotikForum

ONUR

Robotik - Teknoloji
20 Şub 2020
37
21
13
onurias.com
Merhabalar bende bunlara benzer sistemler üzerinde çalıştım ve en iyi yol bence iki adet arduino kullanıp bunları bir raspberry pi kartına bağlayayıp python üzerinden işlemleri yürütmen. Nasıl bağlayacağını şu linkten öğrenebilirsin.
 

Tasarımcı

Yeni Üye
6 Nis 2020
4
1
3
Merhabalar bende bunlara benzer sistemler üzerinde çalıştım ve en iyi yol bence iki adet arduino kullanıp bunları bir raspberry pi kartına bağlayayıp python üzerinden işlemleri yürütmen. Nasıl bağlayacağını şu linkten öğrenebilirsin.

Başka türlü pek yanıtı gibi diyorsunuz, doğru mu?

Aslında 2 ya da daha fazla Arduino kullanınca proje yapılabilir ancak mali ve fiziksel yönden ekonomik olması için tek mikrodenetleyicide bir araya getirmek istemiştim.

RPi ve Python ile ilgili hiç geçmişim yok, bakmak lazım ancak zamanım da yok.

Arduino ile Pi'yi entegre ettikten sonra sensörler hangi kart üzerinde uyarı veriyor, birleşik çalışma mantısı nasıl oluyor efendim?
 

ONUR

Robotik - Teknoloji
20 Şub 2020
37
21
13
onurias.com
Başka türlü pek yanıtı gibi diyorsunuz, doğru mu?

Aslında 2 ya da daha fazla Arduino kullanınca proje yapılabilir ancak mali ve fiziksel yönden ekonomik olması için tek mikrodenetleyicide bir araya getirmek istemiştim.

RPi ve Python ile ilgili hiç geçmişim yok, bakmak lazım ancak zamanım da yok.

Arduino ile Pi'yi entegre ettikten sonra sensörler hangi kart üzerinde uyarı veriyor, birleşik çalışma mantısı nasıl oluyor efendim?
Şuanda hali hazırda kullandığınız ölçüm kodlarını iki arduinoya bölün yani 1.sensör 1.arduinoya 2. sensör 2.arduinoya atın ardından bu bilgileri serial porttan python üzerinden alın ardından yaptıracağınız işlemi ordaki değerlere göre pythonda yazın.
 

birkan

Aktif Üye
Paylaşım Ekibi
16 Tem 2019
191
44
113
istanbul
Cinsiyet
Erkek
selam
2 değil 10 tane de sensör kullanırsın
aynı anda iki işlemi yapamıyor derken neyi kast ediyorsunuz tam anlamadım ?

int aktif = 0;
unsigned long zaman;
int gecikme = 30000;
kızılötesi sensör aktif olduğunda aktif =1 ; / zaman = millis();
gecikme ile şimdiki zaman ve gecikecek zamanı kontrol edip işlemlerini yapabilirsin.
kesmeyi neden kullanmak istiyorsun ? deepsleep yapıp pillemi çalıştıracaksın cihazı ?

rasperry ve arduino bambaşka dünyalar 2 sensör için raspi ye düştüysek vay halimize :)

arduino uno ile cnc veya 3d printer çalışıyor. sizin söylediğinize göre çalışmaması lazım :)
 

ONUR

Robotik - Teknoloji
20 Şub 2020
37
21
13
onurias.com
Şimdi konuyu tekrar okudum @birkan haklı ben aceleyle okuyup cevap yazdığımdan ikisini aynı anda sürekli kullanacaginizi düşündüm.
 

Tasarımcı

Yeni Üye
6 Nis 2020
4
1
3
selam
2 değil 10 tane de sensör kullanırsın
aynı anda iki işlemi yapamıyor derken neyi kast ediyorsunuz tam anlamadım ?

int aktif = 0;
unsigned long zaman;
int gecikme = 30000;
kızılötesi sensör aktif olduğunda aktif =1 ; / zaman = millis();
gecikme ile şimdiki zaman ve gecikecek zamanı kontrol edip işlemlerini yapabilirsin.
kesmeyi neden kullanmak istiyorsun ? deepsleep yapıp pillemi çalıştıracaksın cihazı ?

rasperry ve arduino bambaşka dünyalar 2 sensör için raspi ye düştüysek vay halimize :)

arduino uno ile cnc veya 3d printer çalışıyor. sizin söylediğinize göre çalışmaması lazım :)

Yanıt vermişsiniz ancak iletiyi yeni gördüm, çok teşekkür ediyorum.

2 tane sensör kullanıyorum, biri ultrasonik diğeri ise kızılötesi. İlk önce kızılötesi sinyal aldığında servo motorum hareket ediyor; kızılötesi sinyal almaya devam ederken diğer sensörüm ultrasonik de aktif olup, su pompasını devreye sokuyor.

Yani iki motorda iki farklı sensörle kontrol ediliyor ancak çok tutarlı olmadı gibi görünüyor.

Kodum şu:


#include <Servo.h>

Servo servoMotor;

int suMotorIn1 = 8;
int suMotorIn2 = 9;

int kizilotesiSensor = 4;
int trig = 5;
int echo = 6;



void setup()
{
servoMotor.attach(2);
pinMode(suMotorIn1, OUTPUT);
pinMode(suMotorIn2, OUTPUT);
pinMode(kizilotesiSensor, INPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
}



void loop()
{

int durum = digitalRead(kizilotesiSensor);

durum = !durum;


if(durum == 1)
{
servoMotor.write(90);
}


else
{
servoMotor.write(0);
}



digitalWrite(trig, LOW);
delayMicroseconds(2);

digitalWrite(trig, HIGH);
delayMicroseconds(10);

digitalWrite(trig, LOW);

float sure = pulseIn(echo, HIGH);

float mesafe = sure / 29.1 / 2;


if(mesafe <= 20)
{
digitalWrite(suMotorIn1, HIGH);
digitalWrite(suMotorIn2, LOW);
}

else
{
digitalWrite(suMotorIn1, LOW);
digitalWrite(suMotorIn2, LOW);
}
}
 

Tasarımcı

Yeni Üye
6 Nis 2020
4
1
3
selam
2 değil 10 tane de sensör kullanırsın
aynı anda iki işlemi yapamıyor derken neyi kast ediyorsunuz tam anlamadım ?

int aktif = 0;
unsigned long zaman;
int gecikme = 30000;
kızılötesi sensör aktif olduğunda aktif =1 ; / zaman = millis();
gecikme ile şimdiki zaman ve gecikecek zamanı kontrol edip işlemlerini yapabilirsin.
kesmeyi neden kullanmak istiyorsun ? deepsleep yapıp pillemi çalıştıracaksın cihazı ?

rasperry ve arduino bambaşka dünyalar 2 sensör için raspi ye düştüysek vay halimize :)

arduino uno ile cnc veya 3d printer çalışıyor. sizin söylediğinize göre çalışmaması lazım :)

Aslında örnekleme de yapmışsınız ancak sanırım orijinal bir yazılımcı olmayınca kavramak güç oluyor.

Programımda milis fonksiyonunu nereye entegre edeceğimi çözemedim.
 

birkan

Aktif Üye
Paylaşım Ekibi
16 Tem 2019
191
44
113
istanbul
Cinsiyet
Erkek
selam birde bu şekilde dene değişiklik olacakmı

void loop(){

if(digitalRead(kizilotesiSensor) == HIGH) { servoMotor.write(90); } else { servoMotor.write(0); }

digitalWrite(trig, LOW);
delayMicroseconds(2);

digitalWrite(trig, HIGH);
delayMicroseconds(10);

digitalWrite(trig, LOW);

float sure = pulseIn(echo, HIGH);

float mesafe = sure / 29.1 / 2;

Serial.println(mesafe);

if(mesafe <= 20){digitalWrite(suMotorIn1, HIGH);digitalWrite(suMotorIn2, LOW);}
else{digitalWrite(suMotorIn1, LOW);digitalWrite(suMotorIn2, LOW);}
delay(300);
}
 

Seelenkind

Yeni Üye
Platin Üye
3 May 2020
26
21
3
Almanya
www.hilmi-soenmez.com
İsim
Hilmi Sönmez
Cinsiyet
Erkek
Programımda milis fonksiyonunu nereye entegre edeceğimi çözemedim.
Statemachine ve millis fonksionlarını programlamada nasıl uygularız ?
Statemachine >> Not defterine düşülen durumlar
millis >> kronometre

Bir bahçıvan/görevli düşünün (Arduino) , göreve başlayınca koronometreyi çalıştırıyor.
göreve başladıktan sonra biraz vakit geçince ,
IR sensörü sinyal verdiğinde not defterine kronometrenin gösterdiği rakamı yazıyor
IRzaman=millis();
bu rakam göreve başladıktan sonra koronometre çalıştırıldığından itibaren o ana kadar geçen süre.
süreyi not ettikten sonra IRsensor=HIGH; diye not düşüyor (Statemachine)
çünkü ileride bir işlem yaparken sadece IR sensöründen sinyal geliyorsa yapacaksa bu nota bakıp yapacak
sonra Servoyu çalıştırıyor , Servo =HIGH;
daha sonraki görevi, ultrasonik sensörden sinyal alınca daha önce IR sensöründen sinyal geldiyse ve kronometre tutulduysa
30 saniye geçmiş mi bakıp motoru çalıştırmak.
Ultrasonik sensörden sinyal alıyor bekçi ve geçen süreyi kontrol ediyor

if (ultrasoniksensor==HIGH)
{
simdikizaman=millis();
if ( (simdikizaman-IRzaman) > 30000 )
{
Motor = HIGH;
}
}
eğer 30 saniye geçmediyse ultrasonik sensörden sinyal gelse bile dikkate almıyor
yani IRsensör ve Ultrasonik sensör aynı anda sinyal gönderiyor ve arduino bunu algılıyor ama nezaman ne yapacağına
programlayıcı zaman ve durum verilerine göre karar veriyor.

yukarıda not defterine IRsensor=HIGH; diye düştüğümüz durum
ileride farklı amaçlar için kullanılabilir
örneğin
if (IRsensor==HIGH)
{
yeşil LED yak , yada başka birşeyler yap
}
 
  • Beğen
Tepkiler: writersoul

birkan

Aktif Üye
Paylaşım Ekibi
16 Tem 2019
191
44
113
istanbul
Cinsiyet
Erkek
@Seelenkind selam

if (ultrasoniksensor==HIGH)
{
simdikizaman=millis();
if ( (simdikizaman-IRzaman) > 30000 ) {
Motor = HIGH;
IRzaman=simdikizaman; // bunu koymazsak eğer sürekli döngüye girecektir.
}
}
 

Seelenkind

Yeni Üye
Platin Üye
3 May 2020
26
21
3
Almanya
www.hilmi-soenmez.com
İsim
Hilmi Sönmez
Cinsiyet
Erkek
@Seelenkind selam

if (ultrasoniksensor==HIGH)
{
simdikizaman=millis();
if ( (simdikizaman-IRzaman) > 30000 ) {
Motor = HIGH;
IRzaman=simdikizaman; // bunu koymazsak eğer sürekli döngüye girecektir.
}
}
evet zaman ve durum değişkenleri işleri bitince ve doğru yerde sıfırlanmalı. O konuya girmedim.
uyarı için teşekkürler
 

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?