30 Temmuz 2012 Pazartesi

Pixel led ekranı

hazır alınmış pixel ledlerden ekran yaptım. 4 kablo ile bağlı pixeller birbirine.
2'si güç 2'si data ve clock sinyali
kendi devrem ve bilgisayar programım ile kontrol ettim.
pixellerde ucs5903 entegresi kullanılmış; rgb pwm çözünürlüğü 5bit.
5V güç kaynağı ile enerjileniyor.



19 Temmuz 2012 Perşembe

40 kanallı animasyon devresi

40 kanallı led animasyon devresi. 13 tane rgb led için tasarlandı



2 Temmuz 2012 Pazartesi

3 boyutlu yazıcı

arkadaşlarla 3 boyutlu yazıcı aldık.
yazıcı ve ürettiğim bazı parçalar


15 Haziran 2012 Cuma

c# - SQL (MySQL, MSSQL, MS Access) kodbank

using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.Odbc;

 public DataTable dt = new DataTable();
//MS Access bağlantı metni ---------------------------------
//string conn_str = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
//    Path.Combine(HostingEnvironment.ApplicationPhysicalPath, @"veritabani.mdb");
//-----------------------------------------------------
//MS SQL bağlantı metni
//public string conn_str = "Server=BS_ismi\\SQLEXPRESS;Database=isim;Trusted_Connection=True";
//public string conn_str = "Server=11.11.11.11;Initial Catalog=vt_isim; User Id=isim;Password=sifre";
//-----------------------------------------------------
//MySQL bağlantı metni
//public string conn_str = "Driver={MySQL ODBC 5.1 Driver};Server=11.11.11.11;Database=vt_isim;User=user;Password=sifre;Option=3";
// public string conn_str = "Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Database=vt_isim; User=username;Option=3";
   
    public OdbcCommand command = new OdbcCommand(); //MS Access veya MySQL için
    public OdbcConnection conn = new OdbcConnection();      //MS Access veya MySQL için
    //public SqlConnection conn = new SqlConnection();      //MSSQL için
    //public SqlCommand command = new SqlCommand();  //MSSQL için

// SELECT TABLO & SÜTUN İFADELERİ (SEÇME OKUMA)
 public DataTable sel(string DB, string columns, string opt)
    {
        string komut_s = "Select " + columns + " from " + DB + " " + opt;
        DataTable dat = new DataTable();
        try
        {
            conn.ConnectionString = conn_str;
            conn.Open();
            //SqlDataAdapter adapter = new SqlDataAdapter(komut_s, conn);
            OdbcDataAdapter adapter = new OdbcDataAdapter(komut_s, conn);
            adapter.Fill(dat);
            conn.Close();
            //lbl_error.Text = "";
        }
        catch (Exception ex)
        {
            //lbl_error.Text = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return dat;
    }

// INSERT İFADESİ  (YENİ VERİ)
public bool ins(string DB, string props, string vals)
    {
        bool result = false;
        string komut_s = "Insert into " + DB + " (" + props + ") values (" + vals + ")";
        try
        {
            conn.ConnectionString = conn_str;
            conn.Open();
            command = conn.CreateCommand();
            command.CommandText = komut_s;
            command.ExecuteNonQuery();
            conn.Close();
            result = true;
            //lbl_error.Text = "";
        }
        catch (Exception ex)
        {
            //lbl_error.Text = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return result;
    }


// UPDATE İFADESİ  (GÜNCELLEME)
    public bool upd(string DB, string vals, string condition)
    {
        bool result = false;
        string komut_s = "Update " + DB + " set " + vals + " where " + condition;
        try
        {
            conn.ConnectionString = conn_str;
            conn.Open();
            command = conn.CreateCommand();
            command.CommandText = komut_s;
            command.ExecuteNonQuery();
            conn.Close();
            result = true;
            //lbl_error.Text = "";
        }
        catch (Exception ex)
        {
            //lbl_error.Text = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return result;
    }
//DELETE TABLODAN SIRA SİLME İFADESİ
    public bool del(string DB, string condition)
    {
        bool result = false;
        string komut_s = "Delete from " + DB + " where " + condition;
        try
        {
            conn.ConnectionString = conn_str;
            conn.Open();
            command = conn.CreateCommand();
            command.CommandText = komut_s;
            command.ExecuteNonQuery();
            conn.Close();
            //lbl_error.Text = "";
            result = true;
        }
        catch (Exception ex)
        {
            //lbl_error.Text = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return result;
    }


// İSTENEN BİR KOMUTU UYGULAMA
    public string command_exec(string komut)
    {
        string result = "false";
        string komut_s = komut;
        try
        {
            conn.ConnectionString = conn_str;
            conn.Open();
            command = conn.CreateCommand();
            command.CommandText = komut_s;
            command.ExecuteNonQuery();
            conn.Close();
            //lbl_error.Text = "";
            result = "true";
        }
        catch (Exception ex)
        {
            result = ex.ToString();
            //lbl_error.Text = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return result;
    }
//SELECT SCHEMA TABLOLAR İLE İLGİLİ BİLGİ OKUMA vb.
    public DataTable sel2(string komut)
    {
        string komut_s = komut;
        DataTable dat = new DataTable();
        try
        {
            conn.ConnectionString = conn_str;
            conn.Open();
            //SqlDataAdapter adapter = new SqlDataAdapter(komut_s, conn);
            OdbcDataAdapter adapter = new OdbcDataAdapter(komut_s, conn);
            adapter.Fill(dat);
            conn.Close();
            //lbl_error.Text = "";
        }
        catch (Exception ex)
        {
            //lbl_error.Text = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return dat;
    }

6 Haziran 2012 Çarşamba

Basit Arama Motoru Yapımı

Bir web sitesi işi için arama motoru istemişlerdi. Kendim arama motoru yapmayı denedim ve güzel bilgilendirici bir çalışma oldu.

Bir tane alan adını (domain) kapsayacaktı.
Windows uygulaması olarak tarayıcı ve endekleyici(crawler-indexer) yaptım.
2 temel veretabanı tablosu oluyurdu: "Sayfalar" tablosu alan adı altındaki tüm sayfaları saklıyordu.
"Kelime" tablosu anahtar kelime(keyword) tablosu idi. Anahtar kelimenin hangi sayfada kaç kere bulunduğu tablo idi.

Program sitenin ana sayfasından taramaya başlıyordu.
Sayfadaki bağlantı(link) etiketlerini ( <a href=" ...   ,  <iframe src=".... ) bulup bunu elemeden sonra veritabanına atıyordu.
burada xml okuyucu sınıfı yazımı  (  bağlantı içerebilecek etiket başlangıçları tespiti ve içinin ilgili kısmını okuma)

 ve
bağlantı isimlerini düzeltme işlemi ( mesela href="../haberler/index.html" bağlantısını  http://www.abc.com/haberler/index.html hale getirmek)  vardı.

Alan adı dışına giden bağlantılar eleniyordu. Resim, doküman vb. web sayfası olmayan bağlantılar eleniyordu.
Elemeden geçen bağlantı eğer veritabanında daha önce eklenmemişse veritabanına ekleniyordu.

Sonra sırayla bulunan bağlantılara gidilip yukarıdaki işlem tekrarlanıyordu.
Dolayısıyla dallanan bir bağlantı ağacı oluşuyordu.
Bu noktada kırık bağlantılarda tespit ediliyordu.

"Sayfalar" veritabanı oluştuktan sonra, Sayfaları tek tek gezip içeriklerini okuma kısmı geliyordu.

Burada da yine xml sınıfı kodu ile ilgili etiketler tespit edilip metin kısmı okunuyordu.
Burada okunan metinler tek tek kelimelere ayrılıp, hepsi küçük harfle olacak şekile getiriliyordu.
Çok tekrar eden ve aranması beklenmeyen kelimeler eleniyordu. Örnek "ve, bu, şu, o ... vb." gibi kelimeler eleniyordu.
Bulunan kelimeler "Kelime" tablosuna sayfa ve adet(kaç kere sayfada bulunma) bilgisi ile ekleniyordu.

Bundan sonrası zaten arama motoru sayfası oluşturmak idi.
Aranan kelime "Kelime" tablosunda adet kısmı azalan olacak şekilde okunuyordu.

Çoklu kelime aramalarında ise kelimelerin hepsinin bulunduğu sayfalar ön sırada gösteriliyordu.
mesela aranan kelime "güzel resim" olsun. Diyelim ki A sayfasında "güzel" kelimesi 10 kere geçiyor. B sayfasında "güzel" ve "resim" kelimeleri 3 kere geçiyor. C sayfasında "resim" kelimesi 8 kere geçiyor.
İlk sırada B sayfası sonra A ve C sayfaları listeniyordu.

Sadece web sayfalarını taradım. Tabi ki doc, pdf lerde taranabilir. Aynı şekilde anahtar kelimesi tablosunda bu dosya türleri de eklenbilirdi.

26 Mayıs 2012 Cumartesi

Elektrik Kumanda Projesi Çizimi

Bu yazı bir elektrik projesinde nelerin olması gerektiği ile ilgilidir.

Genel Görünüm
Aşağıdaki resimde bir proje çizimi vardır.
numaralandırılmış öğeler:
1-Açıklamalar
Projenin gösterilen sistemin çalışması, çalışmaya alınması, bakımı, testleri ile ilgili açıklamaların yapıldığı yazılı bölüm.
2-Elektrik Kumanda Şeması
Düşük voltaj/akımlı mantık devresinin gösterildiği çizimler
3-Malzeme Listesi
Projede kullanılan malzemelerin listesi, adedi, standartı tavsiye edilen markasının olduğu liste
4-Pano Görünüşü
Kumanda Panosunun önden görünüşü. Pano tasarımı başlı başına bir iş olsa da burada genel bilgi verici kullanış açısından panonun nasıl olacağı gösterilir.
5-Genel Bağlantı Görünüşleri
Sistemin geometrik olarak nereye konumlanacağı detaylı veya detaysın bir şekilde gösterilir. Çekilecek kablolar şematik olarak gösterilir.
6-Kuvvet Şeması
Yüksek voltaj/akımlı elektrik bağlantılarının gösterildiği detaylandırıldığı yer
7-Antet
Projenin adı, ne zaman çizildiği, çizerinin, müşterinin bilgileri olduğu kısım.


Kumanda Şeması:
Proje 3 fazlı beslemesi olduğu varsayılmıştır. Kumanda devresini besleyecek güç kaynağı bulunmalıdır.
Bu kumanda devremizi beslyecektir.

Kumanda devremizdeki elemanlar genelde 24V ile çalışan elemanlardır. Bu eleman ile yüksek voltajlı/akımlı devre elemanlarını elektrik araçlarını kumanda ederiz. aslında bir nevi transistör gibi çalışır.
Kumanda devresinde genel olarak kullanılan elemanlar:


e1- Minyatür kesici. Kumnada devresi için sigorta elemanı
S1- Kumanda düğmesi. Start/stop düğmesi olarak kullanılabilir. Resimde çift yollu bir düğme vardır.
R1- Röle. Yüksek voltaj/akımlı elemanları açıp kapamak için kullanılır.
D1- Zaman Rölesi. Rölenin zaman gecikmeli olanı. Çekmede gecikmeli, bırakmada gecikmeli olabilir.
KA1- Sınır Anahtarı. Konum bilgisi almak için kullanılır.(ingilizcesi: limit switch)
H1- Lamba. Uyarı, bilgi amaçlı olarak kullanılan eleman. 

Kuuvet Şeması
Kuvvet şeması yüksek voltaj/akımlı elamanları kontrol edildiği kısımdır.
Aşağıda 3 fazlı asenkron motor kontrolü için kuvvet şeması vardır.


e01- Termik Manyetik Sigorta. Motor koruma sigortasıdır.
TH1- PTC Termistör Rölesi. Motor sargılarındaki PTC motor çok ısınırsa sinyal gönderir. Rölede kontaktör ile motora giden devreyi keser.
K3- PTC Termistör Rölesinin kontrol ettiği kontaktör.
K1- Motora yol veren, çalıştıran eleman. Bobinleri kumanda devresindeki ilgili röle tarafından kumanda edilir.
K2- Motoru ters yönde döndüren kontaktör.Bobinleri kumanda devresindeki ilgili röle tarafından kumanda edilir.
M1- 3 Fazlı Asenkron Motor.
PTC- Termistör. Sıcaklık algılayıcı.




Not:Buradaki bilgi çok genel bir bilgi olup her türlü proje çiziminde uygulanmayabilir.

21 Mayıs 2012 Pazartesi

ucs1903 sürücüsünü sürme

pixel ledlerde kullanılan ucs 1903 sürücü entegresi çince dosyasına göre sürdüm.

her renk için 8 bitlik kodlama yapıyor. kaç tane pixel varsa o kadar pixel sayısı için 24 bitlik data gönderiliyor.

haberleşme spi tarzı. datayı göndermek için tabloda gösterilen sürelerde data pinini high low yapılıyor.

modix 2. versiyon

bu versiyon rgb led sürüyor.

c# kodları kodbank

dosya açma:  openFileDialog kontrolü
using System.IO;



//openFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.FileName = "";
openFileDialog1.Filter = "Image Files|*.jpg;*.gif;*.bmp;*.png;*.jpeg|All Files|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.RestoreDirectory = true;

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
 // istediğin kodu yaz




dosya okuma: mesela txt dosyası okuma

using System.IO;
string klasor_adi="yemek.txt";
string tarif="";
StreamReader sr = new StreamReader( klasor_adi );
tarif = sr.ReadToEnd();
sr.Close();

ya da

private string dosya_oku()
{
   string result,input;
   result = "";
   input = "";
   try
   {
     StreamReader re = File.OpenText(Server.MapPath("başlık.txt"));
    while ((input = re.ReadLine()) != null)
    {
       result += input;
    }
   re.Close();
   }
   catch (Exception e)
  {  }
 return result;
}

dosya adı klasör okuma:
using System.IO;
string foldername = "resim";
string filePath = Server.MapPath("~\\" + foldername + "/tn"); // asp.net uygulaması ise
DirectoryInfo di = new DirectoryInfo(filePath);
FileInfo[] fi = di.GetFiles("*.jpg");

string Split: bir string objesinin bir string kriterine göre ayırmak
string ayırac="<>";
string.Split(new string[] { "ayırac" }, StringSplitOptions.None);

dosyaya yazma:
StreamWriter sw = new StreamWriter("asd.htm");
sw.Write("deneme");
sw.Flush();
sw.Close();

tarih saat okuma:
//---yıl
string yil = DateTime.Today.Year.ToString();
//---ay
string ay = DateTime.Now.Month.ToString();
if (Convert.ToInt16(ay) < 10)
ay = "0" + ay;
//---gun
string gun = DateTime.Now.Day.ToString();
if (Convert.ToInt16(gun) < 10)
gun = "0" + gun;
//---saat
string saat = DateTime.Now.Hour.ToString();
if (Convert.ToInt16(saat) < 10)
saat = "0" + saat;
string dakika = DateTime.Now.Minute.ToString();
if (Convert.ToInt16( dakika ) < 10)
dakika = "0" + dakika ;
string saniye = DateTime.Now.Second.ToString();
if (Convert.ToInt16( saniye ) < 10)
saniye = "0" + saniye ;
//---------------------------

excel dosyası okuma:
using System.Data.OleDb;

protected void read_excel(string sheet)
{

string connString = "";// ConfigurationManager.ConnectionStrings["xls"].ConnectionString;
connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + Server.MapPath("~\\excel\\ref.xls") + ";" +
"Extended Properties=Excel 8.0";
// Create the connection object
OleDbConnection oledbConn = new OleDbConnection(connString);
try
{
// Open connection
oledbConn.Open();

// Create OleDbCommand object and select data from worksheet Sheet1
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "$]", oledbConn);

// Create new OleDbDataAdapter
OleDbDataAdapter oleda = new OleDbDataAdapter();

oleda.SelectCommand = cmd;

// Create a DataSet which will hold the data extracted from the worksheet.
DataSet ds = new DataSet();

// Fill the DataSet from the data extracted from the worksheet.
oleda.Fill(ds);

// Bind the data to the GridView
DataGrid1.DataSource = ds.Tables[0].DefaultView;
DataGrid1.DataBind();
}
catch (Exception ex)
{
//Label1.Text = ex.ToString();
}
}

rastgele sayı karakter oluşturma:


private int RandomNumber(int min, int max)   // rastgele sayı
{
Random random = new Random();
return random.Next(min, max);
}

private string RandomString(int size, bool lowerCase)    // rastgele karakter
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
if (lowerCase)
return builder.ToString().ToLower();
return builder.ToString();
}

resim dosyasını yeniden boyutlandırmak:
private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;

float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;

nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);

if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;

int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);

Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();

return (Image)b;
}

resmi siyah beyaz hale getirmek:
private void im2bw()
{

try
{
Bitmap img = new Bitmap(pictureBox1.Image);
int ii = img.Width;

Color c;
for (int i = 0; i < img.Width; i++)
{
if (i % (ii / 10) == 0)
  //progressBar1.PerformStep();
for (int j = 0; j < img.Height; j++)
{
c = img.GetPixel(i, j);
int r = 0;
r = Convert.ToInt16(c.R);
int g = 0;
g = Convert.ToInt16(c.G);
int b = 0;
b = Convert.ToInt16(c.B);
int ans = (r + g + b) / 3;

  //hist[ans]++;    // histogram bilgisi için array kullanabilirsiniz.

  if (ans > 127)   // bu değeri histograma göre değiştirebilirsiniz
{
r = 255;
g = 255;
b = 255;
bits[i, j] = 1;
}
else
{
r = 0;
g = 0;
b = 0;
bits[i, j] = 0;
}

c = Color.FromArgb(r, g, b);
img.SetPixel(i, j, c);
}
}
  //pictureBox2.Image = img;
//MessageBox.Show("tamamlandı");
}
catch (Exception ex) { MessageBox.Show(ex.Message); }

}

resmin histogramını çıkarmak:
private void draw_hist()
{
Bitmap DArea = new Bitmap(pictureBox3.Width, pictureBox3.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
//clear_drawing2(DArea);
Graphics xGraph;

xGraph = Graphics.FromImage(DArea);

// Create solid brush.
Pen pen = new Pen(Color.Lime);
int x_scale = 1;
int y_scale = 1;
int hayt = pictureBox3.Height;
for (int i = 0; i < hist.Length; i++)
{
Point coord1 = new Point(i / x_scale, hayt - 0);
Point coord2 = new Point(i / x_scale, hayt - (hist[i] / y_scale));
xGraph.DrawLine(pen, coord1, coord2);
}
pictureBox3.Image = DArea;
xGraph.Dispose();
this.Invalidate();

}

grafik çizdirme:
private void drawGraph_log(int val)
{
Graphics g = pb1.CreateGraphics();
Pen p = new Pen(Color.LightGreen, 1);

if (graph_count == pb1.Width)
{
graph_count = 0;
g.Clear(Color.Black);
}
int ratio = Convert.ToInt32(nud_max_bat.Value * 100);
int x = 0;
int y = 0;
y = pb1.Height - (val * pb1.Height / ratio);

g.DrawLine(p, graph_count, pb1.Height, graph_count, y);

graph_count++;
g.Dispose();
this.Invalidate();
}

18 Şubat 2012 Cumartesi

rgb led ekran

8x16 lık rgb led ekran modülü
modülleri birbirine ekleyip daha büyük ekran yapılabiliyor.



rgb led modul devreleri (modix)

pixel led denen şeylerden yaptım:
3 kablo ile birbirine bağlanan devreleri ana bir devre rgb led komutu gönderiyor.
devreler otomatik kendilerini adresliyor, ve sinyalleri taşıyıp kendilerine ait ledi istenen renkte yakıyor