‘Hardware & Software’ Kategorisi için Arşiv

Single Wire CAN

Yayınlandı: Ekim 13, 2019 / Hardware & Software
Etiketler:, , , , , , , ,

GM araçlarında (chevrolet, Opel, Cadillac) kullanılan bir CAN versiyonu.

swcan

BlueCAN devresinde HS CAN transceiver entegresi yerine NCV7356 single wire can transceiver takılarak, 33.3 ve 83.3kbit/s hızlarında çalışan (yine SKY-CAN Sniffer arayüzü ile) SW CAN Sniffer devresi.

 

disp1

 

Artık CAN Blue ve CAN Black modülleri WireShark üzerinden dinlenebiliyor…


Kurulum ve çalıştırma:
wireshark 2.4.7 32bit/64bit indir ve kur (Kurulumda “Wireshark 1” seçilecek)
CANvas indir ve çalıştır, “LiveView” seç (dll dosyaları, plugin altına kopyalanacak)
Wireshark’ı çalıştır, capture filter ekle (\\.\pipe\CAN)
“SKYCAN ws tool” çalıştır.
Wireshark menüsünden Decode > CAN Live view seçilecek.

Linkler:

BUS (CAN/LIN)
wireshark

I/O Board

Yayınlandı: Nisan 11, 2019 / Hardware & Software
Etiketler:, , , , ,

Genel amaçlı I/O kartı

28pin DIP-PIC uyumlu
3.3V veya 5V Regülatör
HS-CAN
Port giriş/çıkışları
I2C

Seri haberleşme için;
ESP8266
NRF24L01
TTL-Ethernet modülleri takılabilir.


ESP8266, TTL-USB çevirici ile, arduino IDE’den programlanabilir. I2C soketine birden fazla PCF8574 veya MCP23017 modül takılarak giriş/çıkış sayısı arttırılabilir. Takılacak modüllerle (TTL-Ethernet, ESP8266) kablolu veya kablosuz giriş-çıkış kontrolü, CAN haberleşmesi vs. yapılabilir.

Arduino IDE üzerinden ESP8266 (ESP12 ile test edildi) aşağıdaki ayarlarla programlama yapılabilir.

 

ART-NET to DMX-512

Yayınlandı: Mart 6, 2019 / Hardware & Software
Etiketler:, , , , , , ,

Uzun zamandır DMX ile ilgilenmemiştim. DMX datasını kablosuz taşırmıyım diye bir iş için bakarken, ARTNET protokolü ile tanıştım. Gerçi DMX ile uğraşmaya başladığımda görmüştüm ama ilgilenmemiştim.
ArtNet, UDP üzerinden çalışan, DMX ve universe datalarını aktaran bir protokol.

Bir NodeMCU (ESP8266) ve TX1 çıkışına bağlanan bir SN75176 entegresi ile, WiFi üzerinden ArtNet datalarını alan ve DMX512 protokolünde çıkışına veren bir cihazım oldu.


Artnet protokolünü bir çok yazılım destekliyor görünüyor. FreeStyler veya Madrix kullanabilirsiniz. (Madrix’in 3.6 sürümü sonrası desteklemiyor diye hatırlıyorum)
Ben test için Android uygulaması buldum ve onunla, wireless üzerinden devreyi çalıştırdım.

screen-12
sonrasında windows için de basit bir test programı yazabildim. Artnet ile, istediğiniz bir IP adresine data gönderebileceğiniz gibi, ağdaki tüm modüllere de broadcast data gönderebiliyorsunuz. Bunun için bilgisayarınızın ve modülünüzün aynı modem/AP üzerinde olması yeterli.

Son zamanlarda ESP8266 oldukça işime yarıyor. Bazı konularda sorunları olsa da, basit işlerde oldukça kullanışlı.

Bir sonraki ESP projesinde görüşmek üzere…

DHT-22 Nem/sıcaklık sensörü ile yapılmış basit bir izleme/alarm devresi. Devrede ESP8266 WiFi modül ve 3 adet (istenirse arttırılabilir) DHT-22 sensor kullanıldı.

IMG_20190306_181849
Devre çalıştırıldığında wifi modeminize (veya AP) bağlanıyor. Programı yüklerken statik IP verebilir veya modem üzerinden cihazın aldığı IP’yi görebilirsiniz. Tarayıcıya bu IP adresini girdiğinizde, bağlı sensörlerin değerlerini görebiliyorsunuz. Ayrıca yine wifi üzerinden modüle bağlanıp değerleri alan bir windows yazılımı da var. bu yazılımda,
sıcaklık ve nem için alarm limiti tanımlayabiliyorsunuz.

Untitled-1

Untitled-2

web server tarafını isteğinize göre değiştirmek, görsel olarak zenginleştirmek mümkün.
Ben NodeMCU (ESP12E) kullanıyorum. Bağlantı şemasını nette kolaylıkla bulabilirsiniz.
DHT-22 sensörleri aşağıdaki gibi kullandım.

Untitled-3

Sensörlerin 3 ve 4 pinli olmak üzere 2 çeşidi var. Ben 4 pinli kullandım.
Sensörlerin data uçlarını 10k direnç ile Vcc’ye (3.3v) çektim.

Yapmak isterseniz, kodu sayfa sonunda bulabilirsiniz. Arduino’ya gerekli kütüphaneleri
kurarak kolayca derleyebilir ve yükleyebilirsiniz.

*************************************************************************************
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include “DHTesp.h”
int stLed = D2;
// config: ////////////////////////////////////////////////////////////

#define UART_BAUD 9600
#define packTimeout 5 //ms
#define bufferSize 8192

// For STATION mode:
const char *ssid = “SSID”;
const char *pw = “pass”;
const char* host = “sky_TempServer”;

const int port = 9876;
boolean tcpconn = false;

//////////////////////////////////////////////////////////////////////////

WiFiServer server(port); //9876
WiFiClient client;

char charT1[5];
char charH1[5];
char charT2[5];
char charH2[5];
char charT3[5];
char charH3[5];

int sayac = 0;
float temperature1, temperature2, temperature3;
float humidity1, humidity2, humidity3;

//String stringVal = “”;
//uint8_t buf1[bufferSize];
//uint8_t i1=0;

ESP8266WebServer wserver(80);

DHTesp dht1, dht2, dht3;

void setup() {
pinMode(BUILTIN_LED, OUTPUT);
pinMode(stLed, OUTPUT);

digitalWrite(BUILTIN_LED, HIGH);
digitalWrite(stLed, LOW);

Serial.begin(UART_BAUD);

Serial.println(“WiFi bekleniyor…”);
WiFi.forceSleepWake();

WiFi.setAutoConnect(false);
WiFi.hostname(host);
WiFi.mode(WIFI_STA);
//static IP
//IPAddress ip(192, 168, 1, 5);
//IPAddress dns(192, 168, 1, 1);
//IPAddress gateway(192, 168, 1, 1);
//IPAddress subnet(255, 255, 255, 0);
//WiFi.config(ip, dns, gateway, subnet);

delay(500);

WiFi.begin(ssid, pw);

wserver.on(“/”, handle_OnConnect);
wserver.onNotFound(handle_NotFound);

dht1.setup(D1, DHTesp::DHT22); //GPIO05
dht2.setup(D2, DHTesp::DHT22); //GPIO06
dht3.setup(D4, DHTesp::DHT22); //GPIO02
}
void loop() {
wserver.handleClient();

while (WiFi.status() != WL_CONNECTED) {
digitalWrite(stLed, LOW);
digitalWrite(BUILTIN_LED, !digitalRead(BUILTIN_LED));
delay(100);
if(WiFi.status() == WL_CONNECTED) {
digitalWrite(BUILTIN_LED, HIGH); //wifi connected

Serial.println(“WiFi connected”);
Serial.print(“IP address: “);
Serial.println(WiFi.localIP());

long rssi = WiFi.RSSI();
Serial.print(“RSSI:”);
Serial.println(rssi);

server.begin(); // start TCP server
Serial.println(“Starting TCP Server”);

wserver.begin();
Serial.println(“Starting HTTP server”);
}
}

if(!client.connected()) { // if client not connected
if (tcpconn) {
Serial.println(“disconnected”);
}

tcpconn = false;
client = server.available(); // wait for it to connect
}
if(client.connected()) {
if (!tcpconn) {
Serial.print(client.remoteIP());
Serial.println(” connected”);
tcpconn = true;
}

// now send to WiFi

client.write(“{“);
client.write(“|”);
client.write((char*)charT1, 5);
client.write(“|”);
client.write((char*)charH1, 5);
client.write(“|”);
client.write((char*)charT2, 5);
client.write(“|”);
client.write((char*)charH2, 5);
client.write(“|”);
client.write((char*)charT3, 5);
client.write(“|”);
client.write((char*)charH3, 5);
client.write(“|”);
client.write(“}”);
}

delay(dht1.getMinimumSamplingPeriod());
humidity1 = dht1.getHumidity();
temperature1 = dht1.getTemperature();

delay(dht2.getMinimumSamplingPeriod());
humidity2 = dht2.getHumidity();
temperature2 = dht2.getTemperature();

delay(dht3.getMinimumSamplingPeriod());
humidity3 = dht3.getHumidity();
temperature3 = dht3.getTemperature();

dtostrf(temperature1, 1, 1, charT1);
dtostrf(humidity1, 1, 1, charH1);
dtostrf(temperature2, 1, 1, charT2);
dtostrf(humidity2, 1, 1, charH2);
dtostrf(temperature3, 1, 1, charT3);
dtostrf(humidity3, 1, 1, charH3);

if (sayac > 9999) sayac = 1;
}

void handle_OnConnect() {
wserver.send(200, “text/html”, SendHTML(temperature1, humidity1, temperature2, humidity2, temperature3, humidity3));
}

void handle_NotFound(){
wserver.send(404, “text/plain”, “Not found”);
}

String SendHTML(float Temperature1, float Humidity1, float Temperature2, float Humidity2, float Temperature3, float Humidity3){
//dtostrf(temperature1, 1, 1, charT1);
//dtostrf(humidity1, 1, 1, charH1);
//dtostrf(temperature2, 1, 1, charT2);
//dtostrf(humidity2, 1, 1, charH2);
//dtostrf(temperature3, 1, 1, charT3);
//dtostrf(humidity3, 1, 1, charH3);

String ptr = “<!DOCTYPE html> <html>\n”;
ptr +=”<head><meta name=\”viewport\” content=\”width=device-width, initial-scale=1.0, user-scalable=no\”>\n”;
ptr +=”<title>sky_tempserver</title>\n”;
ptr +=”<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n”;
ptr +=”body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n”;
ptr +=”p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n”;
ptr +=”</style>\n”;
ptr +=”<meta http-equiv=refresh content=10 ></head>\n”;
ptr +=”<body>\n”;
ptr +=”\n”;
ptr +=”Temperature/Humidity Monitor\n”;
ptr +=”ZONE-1:”;
ptr +=”Temp.: “;
ptr +=charT1;
ptr +=”C”;
ptr +=”Hum: “;
ptr +=charH1;ptr +=”%”;
ptr +=”ZONE-2:”;
ptr +=”Temp.: “;
ptr +=charT2;
ptr +=”C”;
ptr +=”Hum: “;
ptr +=charH2;
ptr +=”%”;
ptr +=”ZONE-3:”;
ptr +=”Temp.: “;
ptr +=charT3;
ptr +=”C”;
ptr +=”Hum: “;
//ptr +=”“;
ptr +=charH3;
ptr +=”
“;
ptr +=”%”;
ptr +=””;
ptr +=””;
ptr +=””;
ptr +=””;
ptr +=”webserver v.1.0 | tcp server v.1.0 (tcp:9876) | designed by SKY @2019“;
ptr +=””;
ptr +=(String) sayac++;
ptr +=””;
ptr +=”\n”;
ptr +=”</body>\n”;
ptr +=”</html>\n”;
return ptr;
}

*************************************************************************************

Raspberry Pi’de giriş/çıkış portlarını kullanmak:

raspberry-pi-gpio-layout-model-b

RPi’de GPIO kullanmak için bir çok kütüphane mevcut. Ben, GPIO portlarını sanal klavye olarak kullanmak istedim. Bir kaç denemeden sonra, bu işi yapabilen bir kütüphane bulabildim.

Önce GPIO ile başlayalım. Aşağıdaki şekilde RPi.GPIO kütüphanesini kuralım.

sudo apt-get install rpi.gpio

Bu kütüphane ile ilgili detaylı bilgiye, aşağıdaki bağlantıdan erişebilirsiniz.
RPi.GPIO kütüphanesi

Sıradaki kurulum, pyautogui modülü…

Şayet yüklü değilse, öncelikle pip3 yüklemelisiniz.

sudo apt-get install python3-pip

Modül kurulumu:

sudo pip3 install python3-xlib

sudo apt-get install scrot
sudo apt-get install python3-tk
sudo pip3 install pyautogui

Kurulum hatasız bittiyse, projenize aşağıdaki gibi ekleyip kullanabilirsiniz.

import pyautogui

Örnek: button.py

2x buton, 2x LED tanımlanır, butona basıldığında LED’i yakar, klavyeden CTRL tuşuna basar.

rpi_button

Kodu RPi masaüstündeki python3 IDE üzerinde çalıştırabileceğiniz gibi, py dosyasının olduğu klasöre gidip, sudo python3 button.py  şeklinde de çalıştırabilirsiniz.

gpio

 

OrangePi-Zero

Yayınlandı: Aralık 10, 2018 / Hardware & Software
Etiketler:, , , ,

Orange Pi Zero ile çalışmak:

Bir Zero aldığınızda, ilk yapmanız gereken hangi işletim sistemini kullanacağınıza karar vermek ve indirip SD karta yazmak.
Ben 2 farklı imaj kullanıyorum. birincisi, RTL-SDR ile APRS i-gate çalıştırdığım 256MB’lık zero ve “Armbian – Debian Jessie”
Diğeri de 512MB’lık zero modeline kurduğum “Debian xfce Desktop”

imaj dosyalarını aşağıdaki linklerden indirebilirsiniz. SD karta yazmak için “imagewriter” yazılımını kullanabilirsiniz.
Normalde 4GB’lık SD kart yeterli oluyor ancak çok program kuracaksanız 8GB kullanmanızı öneririm. Kurulumdan sonra kart kapasitesinin tamamını kullanmak için çeşitli yöntemler mevcut.
xfce desktop, boot edildiğinde size bunun için gerekli komutu söylüyor.

Jessie sürümünde,
armbian-config
komutu ile setup menüsüne ulaşabilir, buradan çeşitli ayarlar yapabilirsiniz. (Jessie’de desktop aktif olarak gelmiyor, confıg menüsünden desktop’u aktif edebilirsiniz.

İmaj Dosyaları:
Debian Jessie
Debian xfce desktop

OrangePi besleme:
Zero, tek başına kullanıldığında 250mA civarında akım çekiyor. RTL-SDR modülü ile kullanacaksanız, bu değer, 400-450mA civarına çıkıyor. Besleme için mikroUSB girişini kullanabileceğiniz gibi kartın alt tarafından 5V girişi de yapabilirsiniz.

5V giriş yapacağımız uçlar, POE için hazırlanmış ama aktif olmayan uçlar. Tabi buraya 0 ohm direnç takarak,  RJ45 tarafından da besleme verebilirsiniz. Bu durumda 5.5V’dan fazla vermemeniz gerektiğini unutmayın!. CAT kablo mesafesi uzadıkça bu voltaj da düşecektir. En iyisi, bir stepdown konvertör bağlayarak, standart POE switch ile çalışmak.
Bu uçlar, USB power girişi ile aynı (VBus).

 

SDR ve APRS kullanımı için daha  önce yazmıştım, geçmiş konularda bulabilirsiniz. Bu kez Zero’yu “Mumble Client” kurmak için kullandım.

Zero’da HDMI çıkış olmadığı için gerekli ayarları SSH üzerinden yapmak gerekiyor. Modülü çalıştırdığınızda (LAN kablosu takılıysa) modeminizden
otomatik IP adresi alıyor. Siz isterseniz sabit IP verebilirsiniz. Bunun için;
Modemden zero’ya verilen IP’yi bulun. Putty ile karta bağlanın ve aşağıdaki komutu girin.

(Genel olarak username: root  password: 1234 kullanılıyor, giriş yapamazsanız password için orangepi deneyin)

sudo nano /etc/network/interfaces 

dosyanın içine aşağıdaki satırları ekleyin ve kendi isteğinize göre değiştirin.

allow-hotplug eth0
iface eth0 inet static
address 192.168.1.77
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

Kaydedin, çıkın ve yeniden başlatın. Güncellemeleri yapın ve mumble’ı kurun.

sudo apt-get update
sudo apt-get install mumble 


Mumble’ın düzgün çalışması için “pulseaudio” kütüphanesini kaldırmanız gerekiyor, yoksa harici ses girişini alamıyorsunuz.
Mumble’yi çalıştırıp gerekli ayarları ve bağlantıları yapın. Mumble ayarlarında, ses giriş ve çıkışı için ALSA seçilmeli.


Ses giriş ve çıkışı için sol taraftaki tek sıra pinleri kullanacağız. GND ortak ucumuz. Ses çıkışı için LineOutR veya LineOutL uçlarını, ses girişi için
MIC1P ucunu kullanacağız. Bu giriş mikrofon girişi olduğundan giriş seviyesini düşük tutmak ve gerekirse yazılım üzerinden arttırmak gerekiyor.
AMixer uygulamasını çalıştırdığınızda, MIC1Gain kanalından bu ayarlamayı yapabilirsiniz.

sudo apt-get install xrdp tightvncserver  kurulumunu yaparsanız, uzaktan desktop bağlantısı yapabilirsiniz.

Mumble, IP üzerinden çalışan bir interkom uygulaması. windows, android ve ios sürümleri de mevcut. Kapalı devre çalışan interkom sistemini, bu yazılım ile IP’ye çevirip, ağ üzerinden diğer kullanıcılarla paylaşabilirsiniz. Mumble yazılımı client olarak kurulacağı gibi, server olarak da kurulabilir.

IOS’da, mumble kullanılırken telefona çağrı geldiğinde, mumble görüşmesi kesiliyor. Android telefonlarda, telefon görüşmesi yapılırken bile mumble aktif çalışıyor.

Kamera Dip Netliği Ayarı

Yayınlandı: Kasım 29, 2018 / Hardware & Software

“TRT Kamera Asistanı Eğitim Notları”  http://www.kameraarkasi.org sitesinden alıntıdır.

Kamera 1 numaralı filtre konumuna, yani filtresiz konuma getirilir. (3200ºK + 0 ND) Kameranın kazanç / gain durumu kontrol edilerek, kazanç düğmesi, kazançsız veya 0db konumuna getirilir. Kameranın enstantane / shutter düğmesi kapalı konuma getirilir. Objektif extender / 2x katlama durumundan normal konuma getirilir. Kamera sehpaya konulur. Test kartı objektif hizasına düz bir zemine yapıştırılır. Kamera ile test kartı arasındaki mesafenin 3 metre olması gerekir. 3200ºK Tungsten bir projektör ile test kartı aydınlatılır. Işık test kartında parlama yapmayacak bir açıda olmalıdır. Işık 3 metre mesafeden, yaklaşık 2000 lüks olarak uygulanmalıdır. Bu sırada diyafram kontrol edilerek en açık veya en kapalı diyafram kullanılmamalı, zum objektiflerin ideal diyaframı olan 4 – 5.6 diyaframda çalışılması sağlanmalıdır. Test kartına zum girerek, objektifin en dar açılı konumunda netlik yapılır. Test kartından zum çıkarak, objektifin en geniş açılı konumuna gelinir. Objektifin en sonunda bulunan dip netliği halkasına ait, dip netliği vidası gevşetilir. Böylece dip netliği halkası hareket edebilir duruma getirilir. Net görüntü sağlanıncaya kadar dip netliği halkası döndürülür. En net görüntü sağlandığında, bir kaç kere zum girip çıkarak netlik kontrol edilir. En net görüntüden emin olunduğunda dip netliği halkasındaki vida sıkıştırılarak, dip netliği halkası sabitlenir. Tekrar kontrol yapılır. Kamera ile az ışıklı parlak bir noktaya zum girip netlik yapıldıktan sonra en geniş açıya zum çıkarak, parlak noktanın ve resmin netliği kontrol edilir. Görüntü netse dip netliği ayarı doğru yapılmıştır.


Siemens Yıldızı
Genelde dip netliği ayarı yapmak için üretilen en iyi ayar kartıdır. Dip netliği haricinde kameranın yatay ve dikey ayarları, resim keskinliği, resim merkezleme, monitör ve vizör ayarı için de kullanılmaktadır. Siemens Yıldızının özelliği kameranın elektronik olarak görüntü üretirken kullandığı tarama yönteminin hatalarını göstermektir. Bu nedenle siyah beyaz olan ve merkezinde toplanan çubuklardan oluşan bir test kartıdır. Siemens Yıldızını, hazır olarak satılan bu kartı, kamera çantasında bulundurmak gerekmektedir. Ne zaman dip netliğine ihtiyaç duyulacağı bilinmez. Her an lazım olabilir. Bu nedenle A4 kağıdı boyutundaki bu ayar kartını bulunduğunuz yerdeki bir bilgisayarla Internet’ten print ederek kullanabilirsiniz. A3 kağıdı boyutunda büyüterek kamera dolabınıza asabilirsiniz.

Basılabilir “Siemens Yıldızı”

Bazen flash bellek veya hafıza kartlarının kapasiteleri, normalde olduğundan daha az görünebiliyor. Özellikle ürünlerin içinden çıkan, sürücü veya program kartları (CD/DVD yerine) orjinal kapasitesinden çok daha düşük kapasitede görünüyor. Bunları normal kapasitelerine döndürmek için aşağıdaki komutları kullanabilirsiniz.

Komut penceresini açtıktan sonra aşağıdaki komutları sıra ile girin.

C:> diskpart
list disk

burada düzenleyeceğiniz diskin numarasını alarak;

select x
select partiton x
clean
create partition primary
select partition x
active
format fs=ntfs quick
assign
exit

 

yapmanız gereken sadece bu, disk (veya kart) orjinal kapasitesine gelmiş olacaktır.

 

 

 

 

LM4880 ile basit bir line-headphone yükseltici.
4.5V besleme ve güncellenmiş direnç değerleriyle tatmin edici sonuç aldım.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LM4880 datasheet