Arkadaşlar merhaba,
Çates Elektrik Üretim A.Ş.'de eski adıyla Çatalağzı Termik Santralinde çalışan Ölçü Kontrol ve Otomasyon Mühendisiyim. Santralimize yeni bir kamyon kantarı kurduk. Bu kantar için de yeni bir kömür numune alma sistemi kuruldu. Sistem çok basit ve hidroliktir. Kumandası ise basit bir joystick ile yapılmaktadır. Kumanda üzerindeki butonlar şunlardır: Yukarı, Aşağı, Bom İleri, Bom Geri, Sağa Dön, Sola Dön, Helezon Çalıştır, Helezonu Ters Yönde Çalıştır, Fan ve Start/Stop... Tüm butonlar direk 220 V ile çalışmaktadır. Yani Röle Bile koyulmamış. Biz de bu sistemi geliştirmek istiyoruz.
Dolayısıyla ilk düşündüğümüz biraz fantazi gibi görünebilir ama picle röle çektirip numune alma işlemini tamamen otomatik gerçekleştirmek. Bunun için zaman gecikmesi koyarak kod yazdım.
Sizlerden istediğim şey sizin çözümleriniz nelerdir? Neyi doğru neyi yanlış yaptığım hakkında fikirleriniz almak isterim.
#include "C:\Users\MuratOzanUZUNTAŞ\Desktop\CCS C Denemeleri\Numune Alma Sondası 2.h"
#use delay(clock=4000000) // osilatör hızı 4 MHz olarak ayarlandı
#define use_portb_lcd TRUE // b portu LCD için ayrıldı
#include <LCD.C>
#use fast_io(b) // b portu giriş-çıkış olarak kullanılacak
#use fast_io(c) // c portu giriş-çıkış olarak kullanılacak
#use fast_io(d) // d portu giriş-çıkış olarak kullanılacak
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
// TODO: USER CODE!!
set_tris_b(0x00); //
set_tris_c(0x00); // b,c,d portları komple çıkış
set_tris_d(0x00); //
output_b(0x00); //
output_c(0x00); // Başlangıçta tüm portlar 0 değerinde
output_d(0x00); //
while(1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune islemi\nbasliyor...");
delay_ms(3000);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor...");
output_high(pin_c0);
output_high(pin_d0);
delay_ms(1500);
output_low(pin_d0);
delay_ms(1500);
output_low(pin_c0);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSola donuyor...");
output_high(pin_d1);
delay_ms(2000);
output_low(pin_d1);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune aliniyor\nHelezon acik...");
output_high(pin_d2);
output_high(pin_d3);
delay_ms(5000);
output_low(pin_d3);
output_low(pin_d2);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor...");
output_high(pin_c0);
delay_ms(3000);
output_low(pin_c0);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSaga donuyor...");
output_high(pin_d4);
delay_ms(2000);
output_low(pin_d4);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune bosaliyor\nHelezon kapali...");
output_high(pin_d5);
output_high(pin_d6);
delay_ms(1500);
output_low(pin_d6);
delay_ms(1500);
output_low(pin_d5);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fFan calisiyor...\nN. Alma Bitti...");
output_high(pin_d7);
delay_ms(1500);
output_low(pin_d7);
break;
}
}
Zaman gecikmesi kullanmak genelde tehlikeli bir yaklaşımdır. En basit şekliyle bile olsa kapalı çevrim kontrol şart. Örneğin cihazın hareket ederken biz dizi düğmeyi tetikleyerek durması veya bir sonraki harekete geçmesi daha güvenilir olur.
işin içinde zamanlayıcı ile çıkamazsak sensör ile desteklemeyi düşünüyoruz. çünkü numune alma sondası kamyon kasasından random şekilde numune alacak yani hep aynı noktalardan almayacak. bir de diğer bir çekincem şu eğer sistem aniden durursa tekrar çalıştırdığımda nasıl tepki verecek kaldığı yerden devam etmesini nasıl sağlarım ? ve son olarak picle bu işi yapabilir miyim ?
Bu iş PIC'le de olur daha basit yapılar ile de olur olur (Büyüklerimiz yapmış ?)
PIC16F877, EMC konusunda sıkıntı yaşatabilen bir mcu,
Öncelikle bunu aynı pin yapısında daha güncel olan PIC18F46K22 tavsiye ederim.
24V bobinli kontaktörleri ULN 2003A ile rahatlıkla çektirebilirsiniz.
Mcu'da Analog yada Dijital Girişlerinizi kesinlikle 1 kere bakarak değerlendirmeyin, en az 8 örnek alın.
Programınız hakkında çok şey söyleyemeyeceğim ama while ın içindeki break ın ne iş yaptığını anlayamadım.
direkt break varsa while niye var ?
break komutu deneme amaçlı koydum bu programın son hali değil sadece temeli diyebilirim çünkü zamanlayıcı ile random numune alma işlemini başaramazsak devreye sensör de girecek onun da verisinin işlenmesi gerekecek yani program daha karmaşık hale gelecek. önerdiğiniz pici kullanmadım ama 24 v ile röle çektirebiliosak onu kullanmayı denerim. ama hala yardımlarınıza ihtiyacım olacak çünkü endüstriyel ve profesyonel bir uygulama olacak bu.
Delta plc kullanın başınız ağrımasın.
pic kullanırsam karşılaşacağım sorunlar nelerdir neden plc kullanmam gerek ?
mesaj birleştirme:: 05 Ağustos 2015, 16:32:35
Picle denemeyi düşünüyorum adımları paylaşacağım sizlerle
Ne kadar bütçe ayrıldı bu iş için?
138 lira 50 kuruş.
@Allegro hocam sizden beklemezdim böyle şakalar :)
Alıntı yapılan: Allegro - 06 Ağustos 2015, 09:50:43
138 lira 50 kuruş.
Aç- Bitir reklamindaki gibi olmuş.
"-150 olsun"
"- Yok yok.138 lira 50 kuruş. Kalıyo sonra."
@eemuratozan Vereceğim linkteki yazıların oldukça faydalı olacağını sanıyorum. Tüm şemalar ve kodlar verilmiş durumda.
http://www.meliksah.edu.tr/muzam/PIC16F877A_temelli_16I16O_PICPLC.htm (http://www.meliksah.edu.tr/muzam/PIC16F877A_temelli_16I16O_PICPLC.htm)
http://www.meliksah.edu.tr/muzam/UZAM_PLC_with_PIC16F648A.htm (http://www.meliksah.edu.tr/muzam/UZAM_PLC_with_PIC16F648A.htm)
http://www.birsenyayinevi.com/store/ProductDetails.aspx?productid=85807 (http://www.birsenyayinevi.com/store/ProductDetails.aspx?productid=85807)
Alıntı yapılan: eemuratozan - 05 Ağustos 2015, 16:27:43
pic kullanırsam karşılaşacağım sorunlar nelerdir neden plc kullanmam gerek ?
mesaj birleştirme:: 05 Ağustos 2015, 16:32:35
Picle denemeyi düşünüyorum adımları paylaşacağım sizlerle
Plc'ler endüstriyel ortamlara göre hazırlanmış kontrol
Cihazlarıdır.
Eğer seri üretim yapmayacaksanız, çektiğiniz eziyete ve emeğe değmez.
Naçizane düşüncem bir uygulamada röle varsa pic yerine PLC kullanmanızdır. Edindiğim tecrübeler endüktif uygulamalarda pic herzaman sıkıntı yaratmıştır.
@mmuslubas olur mu öyle şey, PLC sanki başka bir teknoloji mi? Eğer sırf bu yüzden PLC kullanmak zorunda hissediyorsanız kendinizi, boşuna üzülmeyin PIC ile yapılabiliyor böyle şeyler. Hadi PIC olmuyor diyelim, başka marka mcu mu kalmadı piyasada?
daha evvelde bahsetmiştim yarın resimleyebilirimde,bir arkadaşım benzin pompa işleri yapıyor,pos kart okuyor pompaya aç talimatı falan veren klasik aleti imal ediyor neredeyse 10 yıldır üretiyor ,hiç bir benzin istasyonu havaya uçmadı yada saçmalamadı,işlemciler 16F877A birde RS485 ile konuşup RF-ID etiketi okuyan 16F628 IP .
ama en çok endüstriyel kartları söktüğümde içinde görmeye alışık olduğum tek çip Hitachi H8.
arkadaşlarım abilerim ustalarım konuyla ilgili daha detaylı resim ve iş kapsamını kısa zamanda buraya yükleyeceğim inanıyorum ki o zaman daha güzek bir tartışma ortamı olacak...
Alıntı yapılan: Gökhan BEKEN - 07 Ağustos 2015, 00:59:00
@mmuslubas olur mu öyle şey, PLC sanki başka bir teknoloji mi? Eğer sırf bu yüzden PLC kullanmak zorunda hissediyorsanız kendinizi, boşuna üzülmeyin PIC ile yapılabiliyor böyle şeyler. Hadi PIC olmuyor diyelim, başka marka mcu mu kalmadı piyasada?
Ben kesinlikle olmaz demiyorum. PIC'le endüstriyel ortam da kontrol kartı yapmak
için, Çok emek harcamak gerekir, aynı zaman da çok tecrübe gerekir.
Daha önce söyledim seri üretim yapılacaksa harcanan emeğe ve zamana değer.
Ama tek bir uygulama için değmez.
Sitemizde PIC'le basit bir endüstriyel kontrol işi yapmaya çalışıp da
problem yaşayan ve akıbeti belli olmayan yüzlerce uygulama var.
Arkadaş işin sonun da pişman olmasın diye tavsiyede bulunuyorum.
Kimse üstüne alınmasın.
Bu forumda önerilecek en son şey PLC olmalı.
İşlemci kullanarak bu işin altından kalmayacağım demenin bir başka adıdır PLC kullanmak.
Gürültüye dayanıklı devre tasarımı gelişigüzel yerlere kapasitör ekleme ile falan olmaz. Kitap okuyacak ve bol bol pratik yapacaksınız.
Yaptığınız pratik uygulamanın sonucu kötü bile olsa bunu yorumlayacaksınız.
En büyük deneyimler başarısız olunmuş çalışmalardan çıkar.
PLC imalatı yapan firma çalışanlarına yahu boş ver işlemci ile devre kurmayı git şu firmanın PLC'sini al demek nasıl olurdu acaba?
@z En güzeli senin dediğin ama,
herkesin çalışma yapabilmesi için gerekli alt yapısı, gerekli cihazları ve zamanı olmayabilir.
Bu şartlar da uğraşan kişi nasıl devresini düzgün tasarlayıp iyice emin olacak ve devresine
güvenecek.
Fabrika ortamlardaki makineleri kontrol etmek çok ciddi bir iş.
Herhangi bir yanlışlık veya hatada yüz binlerce liralık maliyet çıkabilir.
Bunlardan daha önemlisi insanların sakat kalması veya ölmesine neden olunabilir.
Büro tipi cihazlar için bunlar önemli olmayabilir,
örneğin bir okul saati yaptınız en kötü ihtimal cihaz hata yaparsa
yanlış zil çalmış olur.
Ben endüstriyel ortamlarda ki makine kontrollerinin ciddiyetine dikkat çekmek istiyorum.
Bu mesleğe zaman, para ve bilgi koymadan iş yapılmaz.
Sağdan soldan derme çatma şema toplayıp cihaz hiç yapılmaz.
PLC firmasında çalışan teknik personelin durumu ne acı, soru da soramazlar kimseye.
Bir tasarımcının devresi gürültüden etkileniyor ve firma dışından bir kişiye fikir danışıyor.
- Yahu yaptığım devre endüstriyel ortamda gürültüden çok etkileniyor.
-- Boşver endüstri ortamında devre kullanma PLC kullan.
- Haa tamam.
Alıntı yapılan: z - 11 Ağustos 2015, 14:34:20
Bu mesleğe zaman, para ve bilgi koymadan iş yapılmaz.
Sağdan soldan derme çatma şema toplayıp cihaz hiç yapılmaz.
PLC firmasında çalışan teknik personelin durumu ne acı, soru da soramazlar kimseye.
Bir tasarımcının devresi gürültüden etkileniyor ve firma dışından bir kişiye fikir danışıyor.
- Yahu yaptığım devre endüstriyel ortamda gürültüden çok etkileniyor.
-- Boşver endüstri ortamında devre kullanma PLC kullan.
- Haa tamam.
hocam siz varya harbi tecrübe akıyosunuz dediklerinize yüzde bin katılıyorum çok şükür benim gibi düşünen birini buldum
bende plc firmasinda çalıstım adamlara o öyle değil böyle olcak de kanıtla sen işine bak derler iki gün sonra da müşteriden gelen şikayet üzerine düzelt mantık bu Türkiye de
mesaj birleştirme:: 12 Ağustos 2015, 09:10:09
madem öyle stm32f407 işlemcisi kullan röle sürmek içinde uln2003a yada 2004 kullan yapablirsen işlemci ve uln2003a kaliteli ve
bir plc markasinin kullandıgı malzemeler z ustamın dedigi gibi bobin dir kondansatördür osilatör dür gelişi güzel koymayın
mesala işlemciye mümkün oldugunca yakın tutun osilatörü bunun gibi kurallar internet ortaminda çok var
bazen bazı şeyleri çok abartıyoruz madem bilgin yok yada meraklı değilsin meraklı olanları madem sogutmayın
işten plc röleleri sanki kontakları yapısmıyormu yapısıyor sen gider dandik röle kullanırsan seninki de daha cabuk yapısır al omron yada schneider röle seninkide en azından çıkısın biraz daha saglam olsun uln2003a entegresinde zaten darlington denilen bir sistem var her çıkısta koruma diyodu içinde var zıt emk ark olmasın diye normalde rölenin bobin girişine diyot atılır sen uln entegresini bilirsen bunu bile atmana gerek yok nebilim işte topraktan gelicek ters gerileme karsi diyot gibi mazemelerle devreni koruyabilirsin
ters gerilim vermeye karsi koruyabilirsin temel elektronik ve merakla bile plc yapablirsin kendince tek farklı senin yazilimin merdiven diyagrami olmaz okadar sen biraz ugrasirsin
biraz sonra video ve resimleri upload edicem daha net fikirler orataya çıkacaktır muhakkak yardımcı olmaya çalışan fikir beyan eden tüm ilgilenenlere teşekkür ediyorum...
Video :
https://www.youtube.com/watch?v=vdEIqZ7IOgo (https://www.youtube.com/watch?v=vdEIqZ7IOgo)
Resimler:
mesaj birleştirme:: 13 Ağustos 2015, 00:11:52
https://drive.google.com/file/d/0ByilAXr_z_iHa3EwZ0dtcGR5bjg/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHa3EwZ0dtcGR5bjg/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHbV9veDRWX1ZpWlk/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHbV9veDRWX1ZpWlk/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHV3JDWHY1SG5MRWc/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHV3JDWHY1SG5MRWc/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHN0hOZDBKYTNtd2c/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHN0hOZDBKYTNtd2c/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHdXJVZ1dfWGZicnM/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHdXJVZ1dfWGZicnM/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHU25vUDJ4c2RCbDQ/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHU25vUDJ4c2RCbDQ/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHZXlhMk9CUmh0bEU/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHZXlhMk9CUmh0bEU/view?usp=sharing)
Buton Fonksiyonları:
YUKARI : Hidrolik piston açılır ve yukarı kalkmaya başlar
AŞAĞI : Hidrolik piston kapanır ve aşağı inmeye başlar
İLERİ : Bom ileri doğru hareket eder
GERİ : Bom geri doğru hareket eder
SAĞ : Numune sondası sağa dönmeye başlar
SOL : Numune sondası sola dönmeye başlar
AÇ : Sonda içindeki helezonu döndürmeye ( numune alma işlemi ) başlar
KAPA : Sonda içindeki helezonu ters yönde döndürmeye ( numune kabına boşaltma ) başlar
ACİL STOP : Sistem Start/Stop
FAN : Numune boşalttıktan sonra fanı çalıştırarak helezonu temizler
* Sağ ve sola dönüşler motor ile geri kalanlar hidrolik sistemle sürülüyor.
Alıntı yapılan: eemuratozan - 12 Ağustos 2015, 09:26:49
biraz sonra video ve resimleri upload edicem daha net fikirler orataya çıkacaktır muhakkak yardımcı olmaya çalışan fikir beyan eden tüm ilgilenenlere teşekkür ediyorum...
Video :
http://www.youtube.com/watch?v=vdEIqZ7IOgo (http://www.youtube.com/watch?v=vdEIqZ7IOgo)
Resimler:
mesaj birleştirme:: 13 Ağustos 2015, 00:11:52
https://drive.google.com/file/d/0ByilAXr_z_iHa3EwZ0dtcGR5bjg/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHa3EwZ0dtcGR5bjg/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHbV9veDRWX1ZpWlk/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHbV9veDRWX1ZpWlk/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHV3JDWHY1SG5MRWc/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHV3JDWHY1SG5MRWc/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHN0hOZDBKYTNtd2c/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHN0hOZDBKYTNtd2c/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHdXJVZ1dfWGZicnM/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHdXJVZ1dfWGZicnM/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHU25vUDJ4c2RCbDQ/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHU25vUDJ4c2RCbDQ/view?usp=sharing)
https://drive.google.com/file/d/0ByilAXr_z_iHZXlhMk9CUmh0bEU/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHZXlhMk9CUmh0bEU/view?usp=sharing)
Buton Fonksiyonları:
YUKARI : Hidrolik piston açılır ve yukarı kalkmaya başlar
AŞAĞI : Hidrolik piston kapanır ve aşağı inmeye başlar
İLERİ : Bom ileri doğru hareket eder
GERİ : Bom geri doğru hareket eder
SAĞ : Numune sondası sağa dönmeye başlar
SOL : Numune sondası sola dönmeye başlar
AÇ : Sonda içindeki helezonu döndürmeye ( numune alma işlemi ) başlar
KAPA : Sonda içindeki helezonu ters yönde döndürmeye ( numune kabına boşaltma ) başlar
ACİL STOP : Sistem Start/Stop
FAN : Numune boşalttıktan sonra fanı çalıştırarak helezonu temizler
* Sağ ve sola dönüşler motor ile geri kalanlar hidrolik sistemle sürülüyor.
Bu tarz bir iş için ben olsam "zelio" gibi akıllı role kullanırdım. Fiyatı da uygundur programlaması da.
Devreyi tasarla , yazılım yap git gel dene bir sürü vakit kabı. Hele bir de sorun çıkarsa yandınız.
Tamam kendi devrelerimizi tasarlamak güzeldir hatta bende teşvik ederim.
Ancak mühim olan önce o işi kanıtlamanız. Siz zelio ile yapın, kurun müşteri denesin.
Sorunsuz olduğuna kanaat geldiğinde zaten müşteri potansiyeli artacaktır.
Zelio ile imalata devam ederken kendi PIC devrenizi tasarlarsınız.
Hem üretiminiz durmaz hemde AR-GE için bolca vakit kazanmış olursunuz.
Bence üretimde önce sağlamlık sonra maliyet düşürümüne gidilmelidir.
Sanırım bir yanlış anlaşılma var biz üretici firma değiliz bu gördüğünüz sistemi santralimizde kullanmak üzere satın aldık yani müşteriyiz. Ar-ge sini kendimiz yapıp bu sistemi otomatik çalıştırmak istiyoruz.
Yok mu başka fikri olan arkadaşlar.
hocam
ben imzamdaki PLC 'yi üretiyorum
bütün hatalarını çözmek uzun zaman aldı hala da bitmedi
size daha önceki arkadaşlar gibi en ucuzundan DELTA PLC alıp onunla yapmanızı tavsiye ederim
endüstriyel ortam ofis ortamından farklıdır
bir tane yapacaksınız madem zorlamayın kendinizi
Arduino kit ve shield'i alıp deneyebilirsiniz kısmen daha iyi olabilir. Mekanik olan her parça parazit üretecektir (Kontaktör, röle vs.) Bu parazitlerden de pic ister istemez etkilenir. Diyosanız ki uğraşıp hakkıyla öğrenip kendimi geliştireceğim tabiki deneyin. Ama yok kardeşim işim çözülsün derdindeyseniz dediğim gibi arduino olur delta ya da enda plc olur. çizim içn uğraştığınız sürede işi bitirebilirsiniz.
işleminiz toplam kaç hareketten oluşuyor ?
her işlemin süresi nedir ve nasıl karar veriyorsunuz ?
İşlemci Bu kararı Nasıl verecek ?
Arkadaşlar son aşamayı sizlerle paylaşıyorum ancak paylaşacağım kodlar henüz olgunlaşmamış yani bir nevi deneme kodlarıdır.
KOD:
#include <Numune Alma Sondası 3.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_A4
#define LCD_DATA5 PIN_A5
#define LCD_DATA6 PIN_A6
#define LCD_DATA7 PIN_A7
#include <lcd.c>
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
void main()
{
unsigned int16 x,y,i;
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0xff);
output_b(0x00);
output_c(0x00);
output_d(0x00);
lcd_init();
i=read_eeprom(0);
while(TRUE)
{
//TODO: User Code
if(input(pin_d7))
{
i++;
write_eeprom(0,i);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune islemi\nbasliyor...");
}
delay_ms(1000);
if(input(pin_d7))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor...");
output_high(pin_b0);
output_high(pin_b1);
delay_ms(1000);
output_low(pin_b1);
delay_ms(1000);
output_low(pin_b0);
}
if(input(pin_d7))
{
y=read_eeprom(0);
srand(y);
x=rand()%1000+1;
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSola donuyor...\n%Lu...%Lu",x,y);
output_high(pin_b2);
delay_ms(1000);
output_low(pin_b2);
}
if(input(pin_d7))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune aliniyor\nHelezon acik...");
output_high(pin_b3);
output_high(pin_b4);
delay_ms(1000);
output_low(pin_b4);
output_low(pin_b3);
}
if(input(pin_d7))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor...");
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
}
if(input(pin_d7))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSaga donuyor...");
output_high(pin_b5);
delay_ms(1000);
output_low(pin_b5);
}
if(input(pin_d7))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune bosaliyor\nHelezon kapali...");
output_high(pin_b6);
output_high(pin_b7);
delay_ms(1000);
output_low(pin_b7);
delay_ms(1000);
output_low(pin_b6);
}
if(input(pin_d7))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fFan calisiyor...\nN. Alma Bitti...");
output_high(pin_c0);
delay_ms(1000);
output_low(pin_c0);
}
}
}
ISIS Devresi
(http://s30.postimg.cc/4r9vjcqvl/Ads_z.jpg)
Sistemde hiç geri dönüş yok hareket gerçekten tamamlandımı bilinmiyor, delay_ms(1000) ler ile tamamlandığı varsayılıyor.
Bunu yaratacağı sonuçlar neler olabilir ?
Önerim hareketin bitip bitmediği fiziksel olarak kontrol edilmeli.
Her hareket beklelen zaman içerisinde tamamlanmamış ise bunu bir arıza olduğuna karar verip
gerekli işlemlerin yapılması.
Öneriniz için teşekkürler evet sizin söylediklerinizi de muhakkak ki düşünüyoruz ancak ileri aşamada yapacağımız işler arasında yer alıyor sensör koymadan gerçekleştireceğimiz için bitip bitmediğini anlamak güç olacak tabi
Uzun bir aradan sonra nihayet deneme aşamasına geçmeyi planlıyorum hem baskısını yapacağım devremin son hali hem de kodların son hali aşağıda mevcut her türlü görüş ve önerilere açığım:
#include <Numune Alma Sondasi Son Deneme.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_A4
#define LCD_DATA5 PIN_A5
#define LCD_DATA6 PIN_A6
#define LCD_DATA7 PIN_A7
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#INT_RB
void RB_isr(void)
{
if(input(pin_b4))
output_low(pin_d0);
if(input(pin_b5))
output_low(pin_d2);
if(input(pin_b6))
output_low(pin_d5);
if(input(pin_b7))
output_low(pin_d1);
}
void main()
{
unsigned int16 x,y,i,k=1;
setup_oscillator(OSC_4MHZ);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
set_tris_a(0x00);
set_tris_b(0xf1);
set_tris_c(0x00);
set_tris_d(0x00);
output_b(0x00);
output_c(0x00);
output_d(0x00);
output_a(0x00);
lcd_init();
i=read_eeprom(0); // srand() fonksiyonunun beslendiği seed için sürekli değişkenlik, i'nin 0 adresindeki değer okunarak hiçbir zaman başlangıç değerine dönmemesi ile sağlanıyor
write_eeprom(1,7); // Numune alma işleminin başlayabilmesi için ilk adımın şartı sağlanır ve 1 nolu adresteki değer başlangıçta hep 7'dir
while(TRUE)
{
if(input(pin_b0))
{
delay_ms(20);
while(input(pin_b0)); // Butondan el kaldırıncaya kadar bekle
delay_ms(20); // Buton arkı oluşmasını engellemek için 20 ms bekle
//TODO: User Code
output_high(pin_c2); // Sisteme güç veren röle çekilir ve sistem çalışmaya hazır hale gelir
delay_ms(1000);
for(k=1;k<4;k++)
{
if((read_eeprom(1)==7)) // Numune alma işlemi D7 girişi HIGH ve 1 nolu adres değeri 7 ise başlar
{
i++; // srand() fonksiyonunun seed'i i sürekli 1 artırılarak değiştirilir
write_eeprom(0,i); // Değişen i değeri sonraki işlemlerde rand() fonksiyonunun aynı sayıları tekrarlamaması için 0 nolu adrese kaydedilir
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune islemi\nbasliyor...");// Numune alma işleminin başladığı LCD ekranına yazdırılır
delay_ms(1000);
write_eeprom(1,0); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 0 yazdırılır
}
if((read_eeprom(1)==0)) // Bom, D7 girişi HIGH ve 1 nolu adres değeri 0 ise yukarı kalkmaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor..."); // Bomun yukarı kalktığı LCD ekranına yazdırılır
output_high(pin_d0); // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
output_high(pin_d1); // Bomu uzatan röle enerjilenir
delay_ms(1000); // Bomun ne kadar süre uzayacağı belirlenir
output_low(pin_d1); // Bomu uzatan röle pasif hale getirilir ve uzama durur
delay_ms(1000); // Bom uzamasına artı olarak yukarı kalkma süresi burada belirlenir
output_low(pin_d0); // Bomu yukarı kaldıran röle enerjisi kesilir ve bom durur
write_eeprom(1,1); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 1 yazdırırlır
}
if((read_eeprom(1)==1)) // Bom, D7 girişi HIGH ve 1 nolu adres değeri 1 ise sola dönmeye hazırdır
{
y=read_eeprom(0); // 0 adresindeki i değeri okunup y'ye atanır
srand(y); // srand() fonksiyonunun seed'i y olarak belirlenir
if(k==1)
x=rand()%500+2000;
if(k==2)
x=rand()%2500+2500;
if(k==3)
x=rand()%5000+2500;
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSola donuyor...\n%Lu...%Lu",x,y); // Bomun sola döndüğü LCD ekranına yazdırılır
output_high(pin_d2); // Bomun sola dönüşünü sağlayan röle enerjilenir ve bom sola dönmeye başlar
delay_ms(x); // Bom random olarak belirlenen x süre kadar sola döner
output_low(pin_d2); // Bomun sola dönüşünü sağlayan röle enerjisi kesilir ve bom durur
write_eeprom(1,2); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 2 yazdırırlır
}
if((read_eeprom(1)==2)) // Numune alma işlemi ve helezonun çalışması, D7 girişi HIGH ve 1 nolu adres değeri 2 ise hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune aliniyor\nHelezon acik..."); // Numune alındığı LCD ekrana yazdırırlır
output_high(pin_d3); // Bomu aşağı hareket ettiren röle enerjilenir ve bom kamyon kasasına girmeye başlar
output_high(pin_d4); // Helezonu çalıştıran röle enerjilenir ve helezon dönmeye başlar. Bu sayede kömür alma işlemi gerçekleşir
delay_ms(1000); // Numune alma işlemi belirlenen süre kadar sürer. Bu süre kamyon kasasının dibine ulaşılan süredir
output_low(pin_d4); // Bomu aşağı indiren röle enerjisi kesilir ve bom durur
output_low(pin_d3); // Helezonu çalıştıran röle enerjisi kesilir ve kömür alma işlemi biter
write_eeprom(1,3); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 3 yazdırırlır
}
if((read_eeprom(1)==3)) // Bom, D7 girişi HIGH ve 1 nolu adres değeri 3 ise yukarı kalkmaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor..."); // Bomun yukarı kalktığı LCD ekranına yazdırılır
output_high(pin_d0); // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
delay_ms(1000); // Bom belirlenen süre kadar yukarı kalkar. Bu süre max bom yükekliği kadardır
output_low(pin_d0); // Bomu yukarı kaldıran röle enerjisi kesilir ve yukarı kalkma işlemi durur
write_eeprom(1,4); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 4 yazdırırlır
}
if((read_eeprom(1)==4)) // Bom, D7 girişi HIGH ve 1 nolu adres değeri 4 ise sağa dönmeye hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSaga donuyor...\n%Lu...%Lu",x,y); // Bomun sağa döndüğü LCd ekrana yazdırılır
output_high(pin_d5); // Bomu sağa döndüren röle enerjilenir ve bom sağa döner
delay_ms(x); // Bom belirlenen süre kadar sağa döner. Bu süre max sağ konumu kadardır
output_low(pin_d5); // Bomu sağa döndüren röle enerjisi kesilir ve bom durur
write_eeprom(1,5); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 5 yazdırırlır
}
if((read_eeprom(1)==5)) // Numune boşaltma ve helezonun ters yönde dönme işlemi, D7 girişi HIGH ve 1 nolu adres değeri 5 ise başlamaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune bosaliyor\nHelezon kapali..."); // Numune kömürün boşaltıldığı LCD ekrana yazdırılır
output_high(pin_d3); // Bomu aşağı hareket ettiren röle enerjilenir ve bom aşağı hareket eder
delay_ms(1000); // Bom belirlenen süre kadar aşağı iner. Bu süre min yükeklik kadardır
output_low(pin_d3); // Bomu aşağı hareket ettiren röle enerjisi kesilir ve bom durur
output_high(pin_c0); // Kömürü boşaltan röle enerjilenir ve helezon ters yönde dönmeye başlar
delay_ms(1000); // Kömür belirlenen süre içerisinde boşalır
output_low(pin_c0); // Kömürü boşaltan röle enerjisi kesilir ve helezon durur
write_eeprom(1,6); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 6 yazdırırlır
}
if((read_eeprom(1)==6)) // Helezon temizleme fanı, D7 girişi HIGH ve 1 nolu adres değeri 6 ise çalışmaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fFan calisiyor...\nN. Alma Bitti..."); // Fanın çalıştırıldığı LCd ekrana yazdırılır
output_high(pin_c1); // Fanı çalıştıran röle enerjilenir ve fan çalışmaya başlar
delay_ms(1000); // Fan belirlenen süre kadar çalışır
output_low(pin_c1); // Fanı çalıştıran röle enerjisi kesilir ve fan durur
write_eeprom(1,7); // Başlangıç koşulunun sağlanması için 1 nolu adres değeri tekrar 7 yapılır
}
}
}
}
}
Yapmak İstediğim:
(http://s16.postimg.cc/e1iq86wk5/Ads_z.jpg)
Basacağım Devre:
(http://s13.postimg.cc/rrg40ehpz/Ads_z1.jpg)
(http://s15.postimg.cc/9lwmrjne3/Ads_z2.jpg)
(http://s1.postimg.cc/wtw1cczu7/Ads_z4.jpg)
Arkadaşlar biraz ters de olsa basmış olduğum baskı devre ve kodları yani son durum aşağıdadır:
https://youtu.be/u-asTUTh1W8 (https://youtu.be/u-asTUTh1W8)
#include <Numune Alma Sondasi Son Deneme.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_A4
#define LCD_DATA5 PIN_A5
#define LCD_DATA6 PIN_A6
#define LCD_DATA7 PIN_A7
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#INT_RB
void RB_isr(void)
{
if(input(pin_b4))
output_low(pin_d0); // Yukarı sonlandırma anahtarı
if(input(pin_b5))
output_low(pin_d2); // Sol sonlandırma anahtarı
if(input(pin_b6))
output_low(pin_d5); // Sağ sonlandırma anahtarı
if(input(pin_b7))
output_low(pin_d1); // BOŞ
}
void main()
{
unsigned int16 a,x,y,i,k=1;
setup_oscillator(OSC_4MHZ); // Dahili osilatör frekansı 4 MHz
enable_interrupts(INT_RB); //
enable_interrupts(GLOBAL); // Kesmelere izin ver
set_tris_a(0x00); // Tüm A Portu çıkış
set_tris_b(0xf1); // B4,B5,B6,B7 ve B0 pinleri giriş
set_tris_c(0x00); // Tüm C Portu çıkış
set_tris_d(0x00); // Tüm D Portu çıkış
output_b(0x00); // Bşalangıçta tüm pin değerleri 0
output_c(0x00); //
output_d(0x00); //
output_a(0x00); //
lcd_init();
i=read_eeprom(0); // srand() fonksiyonunun beslendiği seed için sürekli değişkenlik, i'nin 0 adresindeki değer okunarak hiçbir zaman başlangıç değerine dönmemesi ile sağlanıyor
write_eeprom(1,7); // Numune alma işleminin başlayabilmesi için ilk adımın şartı sağlanır ve 1 nolu adresteki değer başlangıçta hep 7'dir
while(TRUE)
{
if(input(pin_b0)) // Butona basılır ise
{
delay_ms(20);
while(input(pin_b0)); // Butondan el kaldırıncaya kadar bekle
delay_ms(20); // Buton arkı oluşmasını engellemek için 20 ms bekle
output_high(pin_c2); // Sisteme güç veren röle çekilir ve sistem çalışmaya hazır hale gelir
delay_ms(1000);
for(k=1;k<4;k++)
{
if((read_eeprom(1)==7)) // Numune alma işlemi 1 nolu adres değeri 7 ise başlar
{
i++; // srand() fonksiyonunun seed'i i sürekli 1 artırılarak değiştirilir
write_eeprom(0,i); // Değişen i değeri sonraki işlemlerde rand() fonksiyonunun aynı sayıları tekrarlamaması için 0 nolu adrese kaydedilir
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune islemi\nbasliyor...");// Numune alma işleminin başladığı LCD ekranına yazdırılır
delay_ms(1000);
write_eeprom(1,0); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 0 yazdırılır
}
if((read_eeprom(1)==0)) // Bom, 1 nolu adres değeri 0 ise yukarı kalkmaya hazırdır
{
y=read_eeprom(0); // 0 adresindeki i değeri okunup y'ye atanır
srand(y); // srand() fonksiyonunun seed'i y olarak belirlenir
a=rand()%1000+500; // Bomun ne kadar süre uzayacağı belirlenir
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari kalkiyor...\n%Lu...%Lu",a,y); // Bomun yukarı kalktığı LCD ekranına yazdırılır
delay_ms(20);
output_high(pin_d0); // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
delay_ms(20); // İki işlem arası karışıklık önelemek için 20 ms gecikme yeterli görülmüştür
output_high(pin_d1); // Bomu uzatan röle enerjilenir
delay_ms(a); // Belirlenen süre kadar bom uzar
output_low(pin_d1); // Bomu uzatan röle pasif hale getirilir ve uzama durur
delay_ms(1000); // Bom uzamasına artı olarak yukarı kalkma süresi burada belirlenir
output_low(pin_d0); // Bomu yukarı kaldıran röle enerjisi kesilir ve bom durur
write_eeprom(1,1); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 1 yazdırırlır
}
if((read_eeprom(1)==1)) // Bom, 1 nolu adres değeri 1 ise sola dönmeye hazırdır
{
y=read_eeprom(0); // 0 adresindeki i değeri okunup y'ye atanır
srand(y); // srand() fonksiyonunun seed'i y olarak belirlenir
if(k==1)
x=rand()%500+2000; // Her sola dönüş için farklı bir süre üretilir
if(k==2)
x=rand()%2500+2500; // " " " " " " " " " " " " " " "
if(k==3)
x=rand()%5000+2500; // " " " " " " " " " " " " " " "
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSola donuyor...\n%Lu...%Lu",x,y); // Bomun sola döndüğü LCD ekranına yazdırılır
delay_ms(20);
output_high(pin_d2); // Bomun sola dönüşünü sağlayan röle enerjilenir ve bom sola dönmeye başlar
delay_ms(x); // Bom random olarak belirlenen x süre kadar sola döner
output_low(pin_d2); // Bomun sola dönüşünü sağlayan röle enerjisi kesilir ve bom durur
write_eeprom(1,2); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 2 yazdırırlır
}
if((read_eeprom(1)==2)) // Numune alma işlemi ve helezonun çalışması, 1 nolu adres değeri 2 ise hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune aliniyor\nHelezon acik..."); // Numune alındığı LCD ekrana yazdırırlır
delay_ms(20);
output_high(pin_d3); // Bomu aşağı hareket ettiren röle enerjilenir ve bom kamyon kasasına girmeye başlar
delay_ms(20);
output_high(pin_d4); // Helezonu çalıştıran röle enerjilenir ve helezon dönmeye başlar. Bu sayede kömür alma işlemi gerçekleşir
delay_ms(1000); // Numune alma işlemi belirlenen süre kadar sürer. Bu süre kamyon kasasının dibine ulaşılan süredir
output_low(pin_d4); // Bomu aşağı indiren röle enerjisi kesilir ve bom durur
delay_ms(20);
output_low(pin_d3); // Helezonu çalıştıran röle enerjisi kesilir ve kömür alma işlemi biter
write_eeprom(1,3); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 3 yazdırırlır
}
if((read_eeprom(1)==3)) // Bom, 1 nolu adres değeri 3 ise yukarı kalkmaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fYukari yonde\nkalkiyor..."); // Bomun yukarı kalktığı LCD ekranına yazdırılır
delay_ms(20);
output_high(pin_d0); // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
delay_ms(1000); // Bom belirlenen süre kadar yukarı kalkar. Bu süre max bom yükekliği kadardır
output_low(pin_d0); // Bomu yukarı kaldıran röle enerjisi kesilir ve yukarı kalkma işlemi durur
write_eeprom(1,4); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 4 yazdırırlır
}
if((read_eeprom(1)==4)) // Bom, 1 nolu adres değeri 4 ise sağa dönmeye hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSaga donuyor...\n%Lu...%Lu",x,y); // Bomun sağa döndüğü LCd ekrana yazdırılır
delay_ms(20);
output_high(pin_d5); // Bomu sağa döndüren röle enerjilenir ve bom sağa döner
delay_ms(x); // Bom belirlenen süre kadar sağa döner. Bu süre max sağ konumu kadardır
output_low(pin_d5); // Bomu sağa döndüren röle enerjisi kesilir ve bom durur
write_eeprom(1,5); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 5 yazdırırlır
}
if((read_eeprom(1)==5)) // Numune boşaltma ve helezonun ters yönde dönme işlemi, 1 nolu adres değeri 5 ise başlamaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fNumune bosaliyor\n%Lu...%Lu",a,y); // Numune kömürün boşaltıldığı LCD ekrana yazdırılır
delay_ms(20);
output_high(pin_d3); // Bomu aşağı hareket ettiren röle enerjilenir ve bom aşağı hareket eder
delay_ms(20);
output_high(pin_d6); // İleri uzayan bom, uzadığı süre kadar kısalmaya başlar
delay_ms(a); // Belirlenen süre kadar bom geriler
output_low(pin_d6); // Uzama durur
delay_ms(1000); // Bom belirlenen süre kadar aşağı iner. Bu süre min yükeklik kadardır
output_low(pin_d3); // Bomu aşağı hareket ettiren röle enerjisi kesilir ve bom durur
delay_ms(20);
output_high(pin_c0); // Kömürü boşaltan röle enerjilenir ve helezon ters yönde dönmeye başlar
delay_ms(1000); // Kömür belirlenen süre içerisinde boşalır
output_low(pin_c0); // Kömürü boşaltan röle enerjisi kesilir ve helezon durur
write_eeprom(1,6); // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 6 yazdırırlır
}
if((read_eeprom(1)==6)) // Helezon temizleme fanı, 1 nolu adres değeri 6 ise çalışmaya hazırdır
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fFan calisiyor...\nN. Alma Bitti..."); // Fanın çalıştırıldığı LCd ekrana yazdırılır
delay_ms(20);
output_high(pin_c1); // Fanı çalıştıran röle enerjilenir ve fan çalışmaya başlar
delay_ms(1000); // Fan belirlenen süre kadar çalışır
output_low(pin_c1); // Fanı çalıştıran röle enerjisi kesilir ve fan durur
write_eeprom(1,7); // Başlangıç koşulunun sağlanması için 1 nolu adres değeri tekrar 7 yapılır
}
}
}
}
}
elektronik bilgisi olan için pic ile kararlı calışır mcu etkilenemesi için her turlu elektronik malzeme var optucoper bobin condastor niye olmasın :)
Konuyu yeni gördüm videoyu izledim.
Bu makinenin, kömürü alma ve verme süresi (helezon dediğiniz bu olsa gerek) dışındaki her haraket operatöre bağlı gibi, yani görerek manuel kontrolle olmak zorunda sanıyorum.
Kanımca haraketlerin LCD li devreye yazıp gösterilmesi yanlızca operatorun kafasını karıştırır, dikkatini makineden başka tarafa çevirmemeli. İşin mühendisliğinin içinde bu konu daha öncelikli.
Helezon için de gereken bir time kontrolu yeterli. Bu süre bir kereliğine mahsus, bir pot ile manuel ayarlanıp bir buton ile veya kutu içinde (sonradan müdahale olmasın diye) bir jumper ile hafızaya alınır. Ancak bu haraketi de STOP yapması gereken acil butonu olması gerekir. Ve belki gerekiyorsa diğer haraketlere geçildi ise helezona kesme atması gerekir.
OG hocam bu devreyi dikkate almadığınızda daha önce yüklediğim videoda şu an nasıl çalıştığı ve kontrol kumandasında hangi tuşların olduğu ve ne iş yaptığı var. Ben bu devre ile tek tuşla tüm işlemleri sondanın kendisinin yapmasını sağlıyorum emniyet tuşu ayrı olacak onu bu devreye koymadım. LCD'deki hızlı geçişler henüz devreyi sistemle beraber denemediğim için.Çünkü sistemin zaten ne kadar süre sola döneceği ne kadar süre helezonu çalıştıracağı belli o süreleri kodlamada girdiken sonra sorun kalmayacak. Zaten kalan emniyet tedbirleri arasında sonlandırma anahtarları mevcut ki bunlar kesme ile programın akışına bağlı. Sonuç olarak operatör burada sadece başla butonuna basacak yani herhangi birşeyi takip etmesi gerekmiyor. Aklınızda kalan başka sorular ve fikirler varsa lütfen paylaşın. İlginiz içinse teşekkür ediyorum.
Arkadaşlar Projenin Son halini paylaşıyorum. youtube la ilgili problem yaşadığım için drive linki vericem. Değerli dönüşlerinizi bekliyorum.
https://drive.google.com/file/d/0ByilAXr_z_iHWTVSeFBRZnV4ZG8/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHWTVSeFBRZnV4ZG8/view?usp=sharing)
Arkadaşlar yeniden merhaba amatör olarak başlamış olduğum bu pic ile röle sürme işinde gördüm ki çok fazla eksiğim var ve yapmış olduğum devre parazitlerden oldukça fazla etkilendi bu konu başlığı altında devrenin eski hali mevcut ancak ben şimdi çözüm olarak düşündüğüm eklemeler ve düzeltmeler ile yeni halini koyuyorum. Benimle önerilerinizi paylaşmanızı rica ediyorum.
https://drive.google.com/file/d/0ByilAXr_z_iHVXBzdkUyOU1kQUU/view?usp=sharing (https://drive.google.com/file/d/0ByilAXr_z_iHVXBzdkUyOU1kQUU/view?usp=sharing)
bağlantıyı görüntüleyemeyen olur ise lütfen bana bildirsin
Mcu'nun bir girişi bir kere okuyarak karar vermesini sağlamak,
her türlü yanlışa ve hataya davetiye çıkartacaktır.
Misal 16 kere okunmalı ve min 14 kez lojik 1 var ise burası lojik 1'dir denmeli,
Dijital girişte olduğu gibi analog giriş te aynı şekilde çok defa okunup ortalaması alınarak üretilen parazit-vari şeylerin etkisi azaltılabilir.
Bu en basit filtreleme şekli olmasına rağmen ama birçok yerde işe yarar.
Tüm girişlerden kesinkes emin olduktan sonra program yazılabilir,
Yoksa herşeyi sorgular bir türlü sonuca ulaşamazsınız.
Siz tek tek ölçerken doğru gibi görünebilir.
Peki çizimini yaptığım devre için öneriniz nedir allegro hocam ?
hocam o rolelerin beslemesini hatta disardan gelen sensorlerin beslemelerini ayırırsan rahat edersin
dursuncemal hocam röle ve sensör girişlerinin beslemesini ayırdım 24 v ile besleniyorlar çizimde 24 v un toprağı gnd2 olarak adandırılmış durumda ayırmış durumdayım ama tabi devreyi daha basmadım basmadan önce önerilerinizi almak istedim.
pic beslemesinin + ve - sinden topraga 4.7 nf x2 kondanstor un buyuk faydasi olacaktir.reseti direk + vermiyor isen 5v bir tranzorp yada zener atarsan iyi olur.aklima gelenler bunlar
Konuyu geç okudum ama sonuç olarak şunu diyebilrim
PIC le bu olur . Sadece çalışma ortamına göre vereceği tepkiler
farklı olur
Dikkat edilmesi gerekenler
giriş çıkışlar optokuplor ile olmalı
münkünse iki adet lm2576 kullanıp bi tanesi sadece PIC i
Diğeri 24 volt grubunu beslesin
topraklma ve şase olayına dikkat edilmeli
başka da çok bişey yok yazılım önemli tabi
role bobin gibi devre elemanları muthiş parazit
üretir..ters diyot kondansator gibi
elemanları kullanmaktan kaçınma
yani tasarım biraz önemli
kolay gelsin basıc yada proton olsaydı
ve devre şemasını koysaydınız
daha fazla yardımcı olmaya çalışırdık ..
eger projen ciddi ise en iyisini yaptin.ben bundan sonra ciddi projelerde dc dc converter kullanma karai aldim en azindan kafam rahat.
Devre şeması ve ares çizimi aşağıdadır. Röleler ayrı bir kartta olacağından kontaklar arası kapasitörler bu şemada yoktur sadece bobin uçlarına ters diyot bu şemada yer alıyor yine bu sitede gördüğüm bir teknikle 24 v ve 5 v beslemenin toprakları tamamen ayrı ortak şaseye kapasitör ile bağlılar:
(http://s18.postimg.cc/k3fxjf5p5/Ads_z.jpg)
(http://s11.postimg.cc/kd5uo3uw3/Adszz_z.jpg)
(http://s24.postimg.cc/czqf1cb85/Adaas_z.jpg)
ortak sase de ne ola araya opto koymalisin yoksa beslemeleri o turlu ayırmanın cok bır anlami olmz eger butonun disarda ise onuda izole edersen rahat edersin yoksa pcb yi son bir kere daha cizme ihtiyacin dogar.rolelerdeki kondanstorler dioda paralel olmali ama saseleri ayirirsan cok da gerek yok kondanstore sadece diot yeter aslinda dioda da gerek yok cunki ulnnin icinde koruma diodu var.isinciddi ise saseleri tam ayir opto kullan
uzun süredir araştırıyorum optolar da bi süre sonra parazitlere çare olamıyormuş. ve toprakların kondansatörlerle ayrıldığını yine bu sitede gördüm işte konu başlığı:
https://www.picproje.org/index.php?topic=49997.0 (https://www.picproje.org/index.php?topic=49997.0)
oradaki soru grond plane yi topraga ne sekilde veriyim.sımdi senin beslemelerin smps ise zaten topraga kapasitor ile bagli trafo kullanacak isen benim onerim 4.7 nf x2 kondanstoru hem + dan hem - den topraga ver her iki beslemedende
beslemelerin - leri ayri diilse care olmayabilir ana genede faydasi olur.zaten beslemeleri ayirdiktan sonra mecbursun opto kullanmaya suremesinki rolelerini.
5v için hazır bir regülatör entegresi kullanıyorum 24 volt için de ayrı bi kaynak kullanmayı düşünüyorum bu şekilde 2 toprak ayrı olacak ya yine opto kullanmak zorunda mıyım peki ?
iki ayri - olacak toprak diil toprak ayri biliyorsun evet isin ciddi ise kullanmalisin 5v - si ile 24 un - sini aslabirlestirme cok rahat edersin
önceki bastığım devrede - ler birleşikti evet çok sorun yaşadım röleler çalışıodu ama kontaktan 220 akıtınca pic sersemliodu. şimdi 5v ve 24 - leri ayırdım bu devrede o zaman ortak şase olarak düşündüğüm şeyi iptal edeyim sadece 2 beslemenin de eksileri ayrı olsun yeterlidir umarım. Eğer yine sorun yaşarsam optoları tam olarak nereye yerleştirmeliyim? bir de toprak ayırdan kastınız nedir bilmediğimden soruyorum anlatabilir misiniz
sebekenden gelen 3 uc yada topraga gomulen iletkenden alinan uc.optolri nereye yerlestirirsen yerlestir sorun yok.optolerin ledlerini 5v tarafindan picten sureceksin.cikisları ile 24 volt tarafindan ulnleri veya transistorlerini sureceksin
tmmdır o zaman eğer bu basacağım devre işe yaramazsa optoları koyup deneyeceğim bakalım.
sen bilirsin ama isini sansa brakma derim ben yaparsin masanın ustunde calisir sahaya gidince moralin bozulmasin
Merhaba,
Profesyoneller ve ustalar bildikleri tüm teknik ayrıntıları anlattılar.Bir amatör olarak fikrim,akla gelmeyen,şeytanın gizli olduğu özelliklerden bahsetmek istiyorum.Optoizolatör olmadan sanayi tipi projelerde PIC kesinlikle etkilenecektir.Hatta tasarlayacağınız devre de bile PIC'in konumu,optoizolatörlerin konumu hatta plaketi muhafaza eden kutunun bile olumsuz hava şartlarının etkisini azaltacak şekilde(sızdırmazlık,manyetik alanlardan etkilenmeyecek şekilde )dizayn edilmelidir.Baskı plaket kalitesi(FR4) yolların kalınlığı ve de temizliği dikkat edilmesi gereken hususlardır.Ayrıca elle yapılacak bir proje olduğu için ve de yer sorunu olmadığı için fiziksel boyutu açısından DIP kılıf kullanmanız size kolaylık sağlayacaktır.Olası bir PIC arızasında soketinden çıkarılacak arızalı PIC'i çok çok kısa bir zamanda değiştirebilirsiniz.Kolay gelsin.
kudretuzuner < agizina saglik
teşekkürler o zaman dediklerinizi dikkate alıcam.
Alıntı yapılan: eemuratozan - 30 Ocak 2016, 14:55:52
teşekkürler o zaman dediklerinizi dikkate alıcam.
Merhaba,
Teşekkürler,o zaman kaliteli bir kutu arayışından başlayın. :)
optoların diğer tarafı ayrı besleme ve gnd olursa hiç sorun olmuyor
led olan tarafı kendi kendi şasesine diğer tarafı ayrı şaseye gidecek o zman
yalıtılmış oluyor