The post C# ile Arduino Seri Port Haberleşmesi first appeared on Emre Bektaş.
]]>Sensör bağlantısı;
Arduino kodumuz;
#include <dht.h>
dht DHT;
#define DHT22_PIN 2
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false;
void setup() {
Serial.begin(9600);
inputString.reserve(200);
delay(5);
}
void loop() {
if (stringComplete) {
//Serial.print(inputString);
triggertmp();
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
void triggertmp()
{
if(inputString=="temp\n"){
int chk = DHT.read22(DHT22_PIN);
Serial.print(DHT.temperature, 1);
Serial.print("\n");
}
if(inputString=="hum\n"){
int chk = DHT.read22(DHT22_PIN);
Serial.print(DHT.humidity, 1);
Serial.print("\n");
}
}
Arduino koduna bakacak olursak benim eklediğim triggertmp fonksiyonu ile seriporttan gelen değer temp ise sıcaklık bilgisini hum ise nem bilgisini arduino tarafından yolluyoruz. Zaten programın diğer kısımları hali hazırda arduino idesinde bulunuyor.(Serialevent)
C# kodumuz;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace www.emrebektas.com_2
{
public partial class Form1 : Form
{
SerialPort serial = new SerialPort("COM13");
String arduinovalue = "";
public Form1()
{
InitializeComponent();
serial.Open();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void buttonSend_Click(object sender, EventArgs e)
{
String emre = null;
emre = textBox1.Text;
serial.WriteLine(emre);
if (serial.BytesToRead > 0)
{
arduinovalue = serial.ReadLine();
label3.Text = arduinovalue;
}
}
}
}
C# tarafında
SerialPort serial = new SerialPort(“COM13”);
bu satırda com13 portuna ait bir serialport objesi oluşturuyoruz ismide serial.
serial.Open(); ile seri portumuzu açıyoruz.
Serial.WriteLine(“”); ise seri porta bilgi gönderiyoruz.
serial.BytesToRead ile seri porttan değer gelip gelmediğini kontrol ediyoruz. serial.BytesToRead > 0 ile eğer seri porttan değer geldiyse bu if döngüsü çalışacaktır. Aşağıdaki resime bakacak olursak arduino tarafına temp göndermişiz ve arduino bize 22.5 değerini göndermiş ve bir değer gönderdiği içinde if döngüsü çalıştı gelen değer label’a yazıldı.
C# programımızdan görüntüler;
The post C# ile Arduino Seri Port Haberleşmesi first appeared on Emre Bektaş.
]]>The post Arduino ile Java’nın Seri Port Üzerinden Haberleşmesi first appeared on Emre Bektaş.
]]>Merhaba arkadaşlar bu yazımda sizlere Java programlama dili ile seri port üzerinden arduino ile nasıl haberleşebileceğimizi göstereceğim. Aslında hali hazırda arduino’nun resmi sitesinde kodu bulunmaktadır fakat bu kodda sadece serial read işlemleri yapılıyor seri porta değer yazmıyor. Benim yazdığım kodda ise Seri port üzerinden arduino’ya değer gönderiyoruz ve değeri okuyabiliriyoruz.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.Enumeration;
public class SerialTest implements SerialPortEventListener {
SerialPort serialPort;
/** The port we're normally going to use. */
private static final String PORT_NAMES[] = {
// "/dev/tty.usbserial-A9007UX1", // Mac OS X
// "/dev/ttyACM0", // Raspberry Pi
// "/dev/ttyUSB0", // Linux
"COM5", // Windows
};
/**
* A BufferedReader which will be fed by a InputStreamReader
* converting the bytes into characters
* making the displayed results codepage independent
*/
private BufferedReader input;
/** The output stream to the port */
private static OutputStream output;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 9600;
public void initialize() {
// the next line is for Raspberry Pi and
// gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186
System.setProperty("gnu.io.rxtx.SerialPorts", "COM5");
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}
try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);
// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();
// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}
/**
* This should be called when you stop using the port.
* This will prevent port locking on platforms like Linux.
*/
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}
/**
* Handle an event on the serial port. Read the data and print it.
*/
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine=input.readLine();
System.out.println(inputLine);
} catch (Exception e) {
System.err.println(e.toString());
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}
public static void main(String[] args) throws Exception {
SerialTest main = new SerialTest();
main.initialize();
Thread t=new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
}
};
t.start();
System.out.println("Resetting and Starting Arduino");
Thread.sleep(3000);
System.out.println("Connection Started");
try{
String command = "emre bektas.com\n";
char[] char_array = command.toCharArray();
Thread.sleep(100); // veri göndermeden önce bu thread gerekiyor.
for (int i = 0; i < char_array.length; i++) {
output.write(char_array[i]);
}
Thread.sleep(100); // connection kapatmadan önce bu thread gerekiyor.
} catch(IOException ioe) {
ioe.printStackTrace();
} catch(InterruptedException ie) {
ie.printStackTrace();
}
main.close(); // connection u kapattık. eğer sürekli veri gönderilip alınacaksa bu komut kaldırılmalı.
System.out.println("Connection Closed");
}
}
Ek olarak java’nın serialport kütüphanesini kullanabilmeniz için projenize txrxcommunication kütüphanesini eklemeniz ve rar dosyasının içindeki win 32 ve win 64 işletim sisteminiz kaç bit ise içerisindeki rxtxSerial.dll dosyasını C:\Windows klasörüne atmanız gerekmektedir. Eğer Netbeans kullanıyorsanız windows klasörüne dll dosyasınız atmanız gerekebilir fakat eclipsede sadece RXTXcomm-2.2pre2.jar dosyasını projeye import etmem yetti.Dosyaları ekten indirebilirsiniz…
Eğerki her defasında jar dosyasını projenize eklemek istemiyorsanız c:\Program Files\Java\kullandıgınızjava\lib\ext klasörün e RXTXcomm-2.2pre2 dosyasını kopyalayınız…
[su_button url=”https://drive.google.com/file/d/0Bypgi5nv-lAOQldKLW9Kenp0dkU/” target=”blank” style=”3d”]Download[/su_button]
The post Arduino ile Java’nın Seri Port Üzerinden Haberleşmesi first appeared on Emre Bektaş.
]]>The post Arduino ile Python Haberleşmesi first appeared on Emre Bektaş.
]]>import serial
import time
ser = serial.Serial("COM5", 9600)
print("Reseting Arduino")
time.sleep(3)
print("Arduino is ready")
for x in range(0, 3):
ser.write("emre bektas\n")
print ser.readline()
print "Sending serial data"
ser.close()
if(ser.isOpen()):
print "Serial connection is still open."
else:
print "Serial connection is close."
Python koduna baktığımızda ilk olarak serial ve time kütüphanelerini import ettik. ve serial objesinden ser tipinde nesne üretip içerisine arduino kartımızın bağlı olduğu com portu ve bound rate’ini girdik.
Buradaki kritik nokta bu bağlantı kurulurken arduino otomatik olarak kendine reset atar ve belli bir süre beklemeniz gerekiyor. Aksi taktirde gönderdiğiniz verilerin bir kısmı arduino’ya ulaşmıyor.
Bu yüzden time.sleep ile 3 saniye beklettik.Ardından for döngüsü ile 0 dan 3 e kadar programı döndürdük. Seri porta 3 kere emre bektas\n göndermiş olduk. Koda bakacak olursaniz her ser.write(“emre bektas\n”) ifadesinin ardından ser.readline() komutu ile arduinodan gelecek olan değeri programa alıyoruz ve print ile yazdırıyoruz.
Döngü bittikten sonra serial datalar gönderildi yazacağız ve ardından seri haberleşmemizi kapatıyoruz. En sonda da if döngüsü ile eğer connection açık kalmış ise bize uyarı veriyor kapalıysada “Serial connection is close.” yazıyor.
Paylaştığım görseldende anlayacağınız üzere 1. sütunda python kodunu yazıyoruz ardından Run edince 2. sütundaki pencere açılıyor ve programı gerçekleştiriyor. seri porttan 3 tane gelmesini beklediğimiz emre bektas geliyor. 3. sütunda da ilgili arduino kodunu görebilirsiniz. Tek yaptığım değişiklik Serial.println(inputString); komutunu Serial.print(inputString); yapmak oldu. Bunun nedeni ise println fonksiyonu her gönderdiği değerden sonra bir alt satıra geçer biz bunu engellemiş olduk.
The post Arduino ile Python Haberleşmesi first appeared on Emre Bektaş.
]]>The post Arduino nedir ? Arduino ile neler yapılabilir ? first appeared on Emre Bektaş.
]]>Arduino ile neler yapılabilir ?
Arduino platformu ile yapabilecekleriniz hayal gücünüzle sınırlı diyebiliriz. Fakat bazı alanlarda arduino ile proje yapmak zor oluyor. Örneğin projenizde görüntü işleme var ise arduino bu konuda geri kalıyor. Gerçek zamanlı kamera görüntüsü aktarma, sinyal işleme gibi işleriniz var ise Raspberry pi veya Udoo gibi linux bilgisayarlara bakmanızda fayda var. Arduino ile üzerinde bulunan dijital ve analog giriş çıkışları kullanarak sensörleri yöneterek robotlar ve sistemler tasarlayabilirsiniz. Eğer arduino ile internet bağlantısı yapmak istiyorsanız arduino için tasarlanmış wifi ve ethernet shield’lar bulunmaktadır. Örneğin, hareket algılayıcı bir sensör kullanarak odanızda herhangi bir hareket olduğunda size mail atan bir uygulamayı kolaylıkla yapabilirsiniz.
Arduino ile yapılabilecek bazı proje fikirleri için: http://playground.arduino.cc/Projects/Ideas adresini ziyaret edebilirsiniz.
Arduino modellerine ve özelliklerine göz atmak isterseniz: http://arduino.cc/en/Main/Products
Arduino IDE:
Arduino Uno Modeli:
Arduino Uno teknik özellikleri:
| Mikrodenetleyici | ATmega328 |
| Çalışma Gerilimi | 5V |
| Digital I/O Pins | 14 (6 Tanesi pwm) |
| Analog Input Pins | 6 |
| DC Current per I/O Pin | 40 mA |
| Flash Memory | 32 KB (ATmega328) |
| SRAM | 2 KB (ATmega328) |
| EEPROM | 1 KB (ATmega328) |
| Saat hızı | 16 MHz |
The post Arduino nedir ? Arduino ile neler yapılabilir ? first appeared on Emre Bektaş.
]]>