Kinematik Invers Untuk Pergerakan Kaki Robot Hexapod 3 Sendi

Berikut adalah simulasi menggunakan software Freecad dan bahasa pemrograman python.

File simulasi dapat didownload pada link dibawah ini.

Aplikasi Serialport Berbasis Console Application Visual C# 2010 Express

Pertama-tama buatlah sebuah project baru.

Lalu pada bagian Program.cs masukan kode berikut.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;

namespace SerialTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] names = SerialPort.GetPortNames();
            Console.WriteLine("Serial ports:");
            foreach (string name in names)
                Console.WriteLine(name);
            Console.Write("Choose one:");
            SerialPort p = new SerialPort(Console.ReadLine());
            p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
            p.Open();
            string line;
            do
            {
                line = Console.ReadLine();
                p.Write(line);
            } while (line != "quit");
            p.Close();
        }

        static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine(
                (sender as SerialPort).ReadExisting());
        }
    }
}

Setelah itu, jangan lupa save program yang sudah dibuat. Run program (F5). Program bisa dicoba berkomunikasi dengan Hyperterminal atau aplikasi serial port lainnya dengan bantuan VSPE (Virtual Serial Port Emulator) yang bisa di download di http://www.eterlogic.com/downloads/SetupVSPE.zip

Pada program yang sudah dibuat tadi, setelah dijalankan, untuk memilih COM, langsung saja diketik nama COM nya. Misal COM5. Untuk mengirim data, tekan enter. Untuk keluar dari program, ketik “quit” lalu tekan enter.

VSPE (Virtual Serial Port Emulator).

Tampilan program.

___________________________

Daftar Pustaka

http://balau82.wordpress.com/2009/04/18/simplest-serial-port-terminal-in-csharp/

Spy and Anti-Terror Robot Project

_____________________________________________________________________________________

System

_____________________________________________________________________________________

Software di PC operator 

Dibangun menggunakan Visual C# Express 2010

________________________________________________________________________________

Project Author:

Wangready and Edy Cahyono

Error Install VisualStudio2010 / Framework.NET 4

Saya sempat mencoba untuk menginstall VS2010 Express di Windows 7, tp gagal terus. Dicari di forum2 ada yang saranin buat install terlebih dahulu Framework.NET 4. Akan tetapi, saya coba, keluar error message HRESULT:0xc8000222. Berikut solusinya yang saya dapatkan dari googling2.

sebelum instalasi lakukan pengaturan seperti dibawah ini:

  1. Masuk ke command prompt sebagai admin, klik start (tombol wondows)>> All Programs >> Accessories >> Klik kanan Command Prompt pilih Run As Administrator. Maka akan keluar jendela Command Prompt.
  2. Di dalam Command Prompt ketikkan “net stop WuAuServ” (tanpa tanda petik)
  3. Biarkan Command Prompt tersebut lalu tahan windows + R lagi dan ketikkan “%windir%” (tanda petik)
  4. Dalam folder tersebut rename folder “SoftwareDistribution” menjadi SDold (sebagai penanda saja)
  5. Kembali ke Command Prompt lagi , ketikan “net start WuAuServ” lalu jalankan instalasi .net framework

Nah, setelah pengaturan diatas selesai lakukanlah instalasi Framework.NET 4 dengan cara seperti biasa.

______________________________________

Sumber:

http://salingkasih.info/2011/08/cara-install-framework-net-4-error-hresult-0xc8000222/

Sharp GP2D12 Sensor Jarak Dengan Output Analog

Deskripsi Umum

Sharp GP2D12 adalah sensor jarak analog yang menggunakan infrared untuk mendeteksi jarak antara 10 cm sampai 80 cm. GP2D12 mengeluarkan output voltase non-linear dalam hubungannya dengan jarak objek dari sensor dan menggunakan interface analog to digital converter (ADC).

Bentuk Fisik

Spesifikasi Teknis

•          Range:10 to 80cm

•          Update frequency / period:25Hz / 40ms

•          Direction of the measured distance:Very directional, due to the IR LED

•          Max admissible angle on flat surface:> 40°

•          Power supply voltage:4.5 to 5.5V

•          Noise on the analog output:< 200mV

•          Mean consumption:35mA

•          Peak consumption:about 200mA

Proses Pengukuran

Kelemahan

•          Respon 40ms

•          Error bila Jarak<10cm dan pada Cermin

•          Hanya dapat mengukur <80cm

Kelebihan

•          Dapat mengukur jarak pada bidang miring

•          Sudut pengukuran sempit

•          Sangat direktif

Berikut hubungan antara jarak deteksi objek terhadap output analog sensor.

Ada banyak cara tentunya untuk mencari persamaan dari kurva diatas untuk menentukan jarak dari nilai analog sensor tersebut. Salah satunya dengan cara sampling data dan kemudian menentukan persamaan dari kurva respon voltage terhadap jarak objek. Berikut percobaan yang saya lakukan dengan contoh sampel kurva respon di atas dengan menggunakan excel.

10

2.4

15

1.8

20

1.4

25

1.1

30

1

35

0.86

40

0.78

45

0.7

50

0.63

55

0.6

60

0.55

65

0.5

70

0.48

75

0.43

80

0.41

jarak

volt

persamaan yang mendekati adalah y = 17.6951x^-0.8519 atau y = 17.6951/x^0.8519

jika x^0.8519 susah direpresentasikan dalam bahasa programming, maka kita cari nilai yang mendekati dari x^0.8519

10

7.11E+00

15

1.00E+01

20

1.28E+01

25

1.55E+01

30

1.81E+01

35

2.07E+01

40

2.32E+01

45

2.56E+01

50

2.80E+01

55

3.04E+01

60

3.27E+01

65

3.50E+01

70

3.73E+01

75

3.96E+01

80

4.18E+01

jarak

jarak^0.67

persamaan linier yang mendekati jarak^0.8519 adalah 0.4918jarak + 3.0641

jadi persamaan yang kita dapat adalah volt=17.6951/(0.4918jarak + 3.0641)

Berikut adalah tabel pengecekan dari persamaan di atas.

10

2.2168477

15

1.69475438

20

1.37170254

25

1.15209224

30

0.99309691

35

0.87266424

40

0.77828212

45

0.70232307

50

0.63987257

55

0.58762133

60

0.54325942

65

0.50512545

70

0.47199394

75

0.44294114

80

0.41725755

jarak

volt

Berikut adalah tabel hasil perbandingan persentase error antara data sampel dan data dari persamaan.

Hasil

Data awal

Selisih

Persentase Error

10

2.2168477

2.4

0.183152

7.631346

%

15

1.69475438

1.8

0.105246

5.846979

%

20

1.37170254

1.4

0.028297

2.021247

%

25

1.15209224

1.1

-0.05209

4.735659

%

30

0.99309691

1

0.006903

0.690309

%

35

0.87266424

0.86

-0.01266

1.472586

%

40

0.77828212

0.78

0.001718

0.220242

%

45

0.70232307

0.7

-0.00232

0.331867

%

50

0.63987257

0.63

-0.00987

1.567074

%

55

0.58762133

0.6

0.012379

2.063111

%

60

0.54325942

0.55

0.006741

1.225561

%

65

0.50512545

0.5

-0.00513

1.025089

%

70

0.47199394

0.48

0.008006

1.667929

%

75

0.44294114

0.43

-0.01294

3.009568

%

80

0.41725755

0.41

-0.00726

1.770135

%

jarak

volt

volt

Berikut hasil akhir persamaan yang didapatkan.

(17.6951/volt) = 0.4918jarak + 3.0641

(17.6951/volt)  – 3.0641 =  0.4918jarak

jarak= (35.9803/volt) – 6.2304

jika dalam 8-bit adc, maka nilai adc (misal referensi voltage 5 volt) harus dikonversi ke volt, volt = adc*(5/255)

jarak= (35.9803/(adc*(5/255))) – 6.2304

jarak= (1834.9953/adc) – 6.2304

berikut file excel dari uraian perhitungan di atas. wangready.wordpress.com–gp2d12.

Kode dalam CodeVision AVR

Berikut contoh program dengan menggunakan mikrokontroler ATMega8535, xtal=11.059200 MHz, pin ADC untuk sensor = PINA0, PORT LCD = PORTD. Atau bisa download dalam bentuk CVAVR project berikut. http://www.mediafire.com/file/ogus3zlhpp9um28/GP2D12.rar

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 4/2/2011
Author  : Freeware, for evaluation and non-commercial use only
Company :
Comments:

Chip type               : ATmega8535
Program type            : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 128
*****************************************************/

#include <mega8535.h>

#include <delay.h>

// Alphanumeric LCD Module functions
#include <alcd.h>
#include <stdio.h>

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

unsigned char gp2d12()
{
unsigned char jarak;
jarak = (unsigned char)((1854.9953/(float)read_adc(0)) – 6.2304); //read_adc(0) membaca nilai analog dari PINA0
//nilai ADC sudah dikonversi dengan mengalikan konstanta yang dibagi dengan perbandingan konversi ADC return jarak;
}
// Declare your global variables here

void main(void)
{
// Declare your local variables here
unsigned char kata[16];
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 691.200 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS – PORTD Bit 0
// RD – PORTD Bit 1
// EN – PORTD Bit 2
// D4 – PORTD Bit 4
// D5 – PORTD Bit 5
// D6 – PORTD Bit 6
// D7 – PORTD Bit 7
// Characters/line: 16
lcd_init(16);

while (1)
{
// Place your code here
sprintf(kata,”jarak=%d”,gp2d12());//menyusun karakter dengan menggunakan fungsi sprinf
lcd_clear();                      //membersihkan layar LCD
lcd_gotoxy(0,0);                  //mengatur kursor LCD menuju koordinat 0,0
lcd_puts(kata);                   //mengirim data LCD
delay_ms(300);                    //delay agar perubahan dari lcd_clear tidak terlalu cepat
}
}

——————————————————————————————————————-

Daftar Pustaka

-Datasheet Sharp GP2D12

-Materi KRI-KRCI Bandung (Oktober 2008)

10

2.4

15

1.8

20

1.4

25

1.1

30

1

35

0.86

40

0.78

45

0.7

50

0.63

55

0.6

60

0.55

65

0.5

70

0.48

75

0.43

80

0.41

jarak

volt

LDmicro; Ladder Diagram Compiler Untuk Mikrokontroler PIC atau AVR (like PLC)

Sumber: http://www.cq.cx/ladder.pl

Support:

  • PIC16F628(A)
  • PIC16F88
  • PIC16F819
  • PIC16F877(A)
  • PIC16F876(A)
  • PIC16F887
  • PIC16F886
  • ATmega128
  • ATmega64
  • ATmega162
  • ATmega32
  • ATmega16
  • ATmega8

LDmicro adalah sebuah compiler yang kompatibel untuk beberapa tipe mikrokontroler yang telah disebutkan di atas. Selain menghasilkan output file .HEX untuk di tanamkan pada mikrokontroler, software ini juga mampu menjalankan simulasi program yang telah dibuat. Bagus sekali untuk belajar pemrograman Ladder Diagram dan bisa mengujinya pada perangkat mikrokontroler yang harganya jauh lebih murah jika dibandingkan PLC. Atau bisa juga untuk membuat PLC versi sendiri.

Software bisa di download di webnya langsung: http://www.cq.cx/ladder.pl. Untuk tutorialnya http://www.cq.cx/ladder-tutorial.pl. Atau jika ingin mengetahui tentang PLC lebih detail, bisa kunjungi web ini http://www.plcs.net/contents.shtml.

Untuk melakukan pemrograman/menanamkan .HEX yang sudah dicompile ke mikrokontroler, untuk tipe AVR bisa menggunakan AVR Studio 4 atau Codevision AVR Evaluation. Jika menggunakan PIC bisa menggunakan  PICPgm via serialport PC.

PICPgm

Link Website Menarik Tentang Elektronika dan Programming


Elektronika

http://www.np.edu.sg/alpha/nbk

Berisi tentang micromouse robot, robocup, stm32, h8s2633r, robotkit, alphastudent.

———————————————————————

https://sites.google.com/site/terminalbpp/

Link download hyperterminal Br@y++

———————————————————————

http://winavr.scienceprog.com/download/AVR_LCD_Lib_Demo.zip

Link download library LCD untuk AVR-GCC

———————————————————————

http://winavr.scienceprog.com/comment/28

Using sprintf function for float numbers in AVR-GCC

———————————————————————

http://avrpcm.blogspot.com/2010/11/playing-8-bit-pcm-using-any-avr.html

AVR PCM audio: Playing 8 bit PCM using any AVR microcontroller–The simplest way

———————————————————————

http://www.engbedded.com/fusecalc/

Engbedded AVR Fuse Calculator

———————————————————————

http://talkingelectronics.com/projects/200TrCcts/200TrCcts.html

Berisi tentang aplikasi elektronika sederhana dan segaian besar berbasis transistor ditampilkan dengan sederhana dalam satu halaman. Disertai gambar sirkuit.

———————————————————————

http://www.talkingelectronics.com/te_interactive_index.html

Berisi banyak project disertai sirkuit diagram.

———————————————————————

http://talkingelectronics.com/pay/BEC-2/Page49.html

Basic electronics course “The Schmitt Trigger”.

———————————————————————

http://www.aaroncake.net/circuits/

Berisi beberapa project disertai sirkuit diagram.

———————————————————————

http://www.electronic-circuits-diagrams.com/

Berisi beberapa project disertai sirkuit diagram.

———————————————————————

http://www.discovercircuits.com/list.htm

Berisi beberapa project disertai sirkuit diagram.

———————————————————————

http://www.sbprojects.com/knowledge/ir/index.php

Berisi tentang IR remote control theory

———————————————————————

http://www.hobbyprojects.com/

Berisi beberapa project disertai sirkuit diagram. Ada juga bagian yang menjelaskan tentang teori elektronika secara umum.

———————————————————————

http://www.recursion.jp/avrcdc/

Berisi tentang aplikasi interfacing perangkat semisal USBtoSerial.

———————————————————————

http://www.simonqian.com/en/AVRminiProg/

Membahas tentang programer/downloader untuk AVR. Jenis downloader AVR ISPMkII.

———————————————————————

http://www.fischl.de/usbasp/

Membahas tentang programer/downloader untuk AVR. Jenis downloader USBasp.

———————————————————————

http://www.plcs.net/contents.shtml

Berisikan tutorial tentang PLC

———————————————————————

http://www.cadvision.com/blanchas/hexfet/

A better H bridge – The Using MOSFETS Website

———————————————————————

http://school.mech.uwa.edu.au/~nscott/How_to_do_stuff/micro_crash_course/pwm/

A crash course in microelectronics

———————————————————————

http://talkingelectronics.com/projects/200TrCcts/200TrCcts.html

200 Transistor Circuits

———————————————————————

http://focus.ti.com/docs/toolsw/folders/print/filterpro.html

Active Filter Design Application – FILTERPRO – TI Software Folder

———————————————————————

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010007

FilterLab Filter Design Software

———————————————————————

http://jbtc-agv.com/en/knowledge/how%20the%20agv%20system%20works.aspx

How the Automatic Guided Vehicle (AGV) System Works

———————————————————————

http://narobo.com/articles/CMUcam.html

CMUcam Tutorial

———————————————————————

http://www.cmucam.org/discussion/message/1343

Message List – CMUcam

———————————————————————

http://www.microsoft.com/robotics/#About

Microsoft Robotics Developer Studio

———————————————————————

http://sourceforge.net/projects/avrwiz/

SourceForge.net Repository – [avrwiz] Index of /

———————————————————————

http://greschenz.dyndns.org/avrwiz/

Avr studio project wizard

———————————————————————

http://www.societyofrobots.com/member_tutorials/node/94
Micromouse – Maze Solver – Theory

———————————————————————

http://circuitdiagram.net/simple-audio-pre-amplifier.html

This is a simple audio Pre-Amplifier with single transistor 2N3904.

———————————————————————


Programming

http://www.codeproject.com/

Berisi artikel project dengan beberapa bahasa pemrograman dan biasanya sourcecodenya dapat didownload dengan terlebih dahulu menjadi member. Terdapat juga forum. Tambahkan codeproject pada google untuk mencari topik programming, itu akan mempermudah pencarian yang menghubungkan ke codeproject.com.

———————————————————————

http://msdn.microsoft.com/en-us/default

Berisi tentang pembahasan mengenai pemrograman yang menggunakan visual studio. Tambahkan msdn pada google untuk mencari topik programming, itu akan mempermudah pencarian yang menghubungkan ke msdn.microsoft.com.

———————————————————————

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf – C++ Reference

———————————————————————

http://msdn.microsoft.com/en-us/library/ms810467.aspx

Serial Communications in Win32

———————————————————————

http://alumni.media.mit.edu/~benres/simpleserial/

Library java untuk komunikasi serial

———————————————————————

http://code.google.com/p/smslib/downloads/detail?name=javacomm20-win32.zip&can=2&q=

Download javacomm-win32 untuk aplikasi komunikasi serial pada java

———————————————————————


E-Book

http://www.intechopen.com/books

Latest Free Open Access Books – Descending – Page 1 | InTechOpen
———————————————————————

http://www.freebookspot.com

FreeBookSpot
———————————————————————


Computer

http://browser9.com/

FREE anonymous proxy server to bypass firewalls.

———————————————————————

http://www.trakax.com/software/pc/download/

Free video editor

———————————————————————

Membuat Aplikasi Chat via Ethernet/Sockets Programming dengan Visual Studio C# 2010

Pendahuluan

Program yang akan dibahas terdiri dari dua bagian, yaitu:

1.       Server, sebagai server yang mana semua client akan mengirim pesan ke computer yang ada aplikasi ini dan mem-broadcast semua pesan ke client.

2.       Client, aplikasi yang dipakai oleh user untuk melakukan chat yang akan terhubung ke server.

Membuat Server

Pertama bukalah aplikasi Visual Studio C# 2010. Lalu pilih new project. Kemudian pilih Console Application dan berilah nama project chat_server pada bagian bawah form, lalu klik OK.

Setelah itu cobalah masukan kode di bawah ini.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Sockets;

using System.Net;

namespace ConsoleApplication1

{

class Program

{

const int portNo = 500;

static void Main(string[] args)

{

//==================================================================

//Mendapatkan Local Machine’s Host Name & IPAddress

//==================================================================

String strHostName = “”;

if (args.Length == 0)

{

// Mendapatkan Ip address dari local machine…

// Pertama cari host name dari local machine.

strHostName = Dns.GetHostName();

Console.WriteLine(“Local Machine’s Host Name: ” + strHostName);

}

else

{

strHostName = args[0];

}

IPHostEntry ipEntry = Dns.GetHostByName(strHostName);

IPAddress[] addr = ipEntry.AddressList;

for (int i = 0; i < addr.Length; i++)

{

Console.WriteLine(“IP Address {0}: {1} “, i, addr[i].ToString());

}

//===================================================================

System.Net.IPAddress localAdd = System.Net.IPAddress.Parse(addr[0].ToString());

TcpListener listener = new TcpListener(localAdd, portNo);

listener.Start();

while (true)

{

ChatClient user = new

ChatClient(listener.AcceptTcpClient());

}

}

}

}

Setelah itu, buat class baru dengan nama “ChatClient” dengan cara klik kanan pada nama project seperti di bawah ini.

Setelah itu, akan muncul form berikut.


Pilih Class dan jangan lupa beri nama “ChatClient” pada bagian bawah form dan klik Add. Setelah itu coba masukan kode seperti di bawah ini.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Sockets;

using System.Collections;

namespace ConsoleApplication1

{

class ChatClient

{

//—berisi daftar semua client—

public static Hashtable AllClients = new Hashtable();

//—informasi tentang client—

private TcpClient _client;

private string _clientIP;

private string _clientNick;

//—digunakan untuk mengirim/menerima data—

private byte[] data;

//—apakah nickname sudah dikirim—

private bool ReceiveNick = true;

public ChatClient(TcpClient client)

{

_client = client;

//—mendapatkan client IP address—

_clientIP = client.Client.RemoteEndPoint.ToString();

//—menambahkan client saat ini ke hash table—

AllClients.Add(_clientIP, this);

//—memulai membaca data dari client pada

// thread terpisah—

data = new byte[_client.ReceiveBufferSize];

client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(_client.ReceiveBufferSize), ReceiveMessage, null);

}

public void ReceiveMessage(IAsyncResult ar)

{

//—membaca dari client—

int bytesRead;

try

{

lock (_client.GetStream())

{

bytesRead = _client.GetStream().EndRead(ar);

}

//—client tidak tersambung—

if (bytesRead < 1)

{

AllClients.Remove(_clientIP);

Broadcast(_clientNick + ” has left the chat.”);

return;

}

else

{

//—mendapat pesan yang telah dikirim—

string messageReceived = System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);

//—client mengirimkan nicknamenya—

if (ReceiveNick)

{

_clientNick = messageReceived;

//—memberitahu semua client memasuki

// chat—

Broadcast(_clientNick + ” has joined the chat.”);

ReceiveNick = false;

}

else

{

//—memberikan pesan pada semuanya—

Broadcast(_clientNick + “>” + messageReceived);

}

}

//—melanjutkan membaca dari client—

lock (_client.GetStream())

{

_client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(_client.ReceiveBufferSize),ReceiveMessage,null);

}

}

catch (Exception ex)

{

AllClients.Remove(_clientIP);

Broadcast(_clientNick + ” has left the chat.”);

}

}

public void SendMessage(string message)

{

try

{

//—mengirim text—

System.Net.Sockets.NetworkStream ns;

lock (_client.GetStream())

{

ns = _client.GetStream();

}

byte[] bytesToSend =

System.Text.Encoding.ASCII.GetBytes(message);

ns.Write(bytesToSend, 0, bytesToSend.Length);

ns.Flush();

}

catch (Exception ex)

{

Console.WriteLine(ex.ToString());

}

}

public void Broadcast(string message)

{

//—log secara lokal—

Console.WriteLine(message);

foreach (DictionaryEntry c in AllClients)

{

//—memberi pesan pada semua user—

((ChatClient)(c.Value)).SendMessage(

message + Environment.NewLine);

}

}

}

}

Membuat Client

Buatlah project baru dan pilih template Windows Form Application dan berilah nama project tersebut dengan nama “chat” pada bagian bawah form lalu klik OK. Setelah itu, buatlah form seperti pada gambar di bawah ini.

Setelah itu coba buatlah kode seperti di bawah ini.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Net.Sockets;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

const int portNo = 500;

TcpClient client;

byte[] data;

public Form1()

{

InitializeComponent();

}

private void btnSignIn_Click(object sender, EventArgs e)

{

if (btnSignIn.Text == “Sign In”)

{

try

{

//—menghubungkan ke server—

client = new TcpClient();

client.Connect(IPServer.Text, portNo);

data = new byte[client.ReceiveBufferSize];

//—membaca dari server—

SendMessage(txtNick.Text);

client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(

client.ReceiveBufferSize),

ReceiveMessage, null);

btnSignIn.Text = “Sign Out”;

btnSend.Enabled = true;

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

else

{

//—disconnect dari server—

Disconnect();

btnSignIn.Text = “Sign In”;

btnSend.Enabled = false;

}

}

private void btnSend_Click(object sender, EventArgs e)

{

SendMessage(txtMessage.Text);

txtMessage.Clear();

}

public void SendMessage(string message)

{

try

{

//—mengirim pesan ke server—

NetworkStream ns = client.GetStream();

byte[] data =

System.Text.Encoding.ASCII.GetBytes(message);

//—mengirim text—

ns.Write(data, 0, data.Length);

ns.Flush();

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

public void ReceiveMessage(IAsyncResult ar)

{

try

{

int bytesRead;

//—membaca data dari server—

bytesRead = client.GetStream().EndRead(ar);

if (bytesRead < 1)

{

return;

}

else

{

//—memanggil delegate untuk menampilkan

// data yang diterima—

object[] para = {System.Text.Encoding.ASCII.GetString(data, 0, bytesRead) };

this.Invoke(new delUpdateHistory(UpdateHistory),

para);

}

//—melanjutkan membaca…—

client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(client.ReceiveBufferSize),

ReceiveMessage, null);

}

catch (Exception ex)

{

//—abaikan error, dibuang ketika pengguna sign off—

}

}

//—delegate dan subroutine untuk mengupdate TextBox control—

public delegate void delUpdateHistory(string str);

public void UpdateHistory(string str)

{

txtMessageHistory.AppendText(str);

}

public void Disconnect()

{

try

{

//—Disconnect dari server—

client.GetStream().Close();

client.Close();

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

private void Form_Closing(object sender,FormClosingEventArgs e)

{

Disconnect();

}

}

}

Setelah itu, double clik pada Form1.Designer.cs dan tambahkan kode seperti di bawah ini.

private void InitializeComponent()

{

this.FormClosing += new

System.Windows.Forms.FormClosingEventHandler(this.Form_Closing);

}

Setelah kedua aplikasi diatas (chat server dan client) sudah selesai dibuat, maka program bisa langsung dites pada komputer yang berbeda atau pada satu komputer. Akan tetapi, jika menggunakan satu komputer, aturlah IP address yang diakses oleh client adalah “127.0.0.1” (computer’s loopback address).

————————————————————————————————————-

Daftar Pustaka

http://www.codeproject.com/KB/cs/network.aspx

Lee, Wei-Meng[2007].”Practical .NET 2.0 Networking Projects”. Apress, New York, USA.

Komunikasi I2C pada Microcontroller AVR

Sumber:

http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html

http://en.wikipedia.org/wiki/I%C2%B2C

SPC Motor Controller Manual Guide.

Help — CodeVisionAVR.

I2C (Inter-Integrated Circuit) (umumnya disebut sebagai “two-wire interface”). Berikut konfigurasi dari sistem I2C.

Berikut timing diagram dari komunikasi I2C.

Pada komunikasi I2C terdapat perangkat master dan slave. Master adalah perangkat yang mengatur jalur clock SCL. Sedangkan slave adalah perangkat yang merespon perintah master. Slave tidak dapat mengirim sinyal untuk dapat mentransfer data pada jalur I2C, hanya master yang dapat melakukannya.Dimungkinkan untuk memiliki banyak master, tapi hal tersebut tidak biasa.

Berikut adalah timing diagram dari sebuah master yang ingin meminta data yang terdiri dari dua sekuen khusus yang ditetapkan untuk I2C yaitu Start dan Stop.

Data terdiri dari 8 bit dan menjadi 9 bit dengan bit terakhir adalah ACK. ACK adalah sinyal yang dikirim oleh sinyal penerima. Jika perangkat penerima mengirim kembali bit low ACK, karena sudah menerima data dan berarti siap menerima data selanjutnya.   Jika sinyal ACK yang dikirim adalah high maka perangkat tersebut tidak dapat menerima data lebih lanjut dan master harus menghentikan transfer dengan mengirim Stop sequence.

Standar kecepatan clock (SCL) untuk I2C bisa mencapai 100KHz. Philips sebagai perusahaan yang memperkenalkan pertamakali I2C mendefinisikan beberapa tingkatan kecepatan: Fast mode, bisa mencapai 400KHz dan High Speed mode yang mencapai 3.4MHz. Untuk beberapa aplikasi pada perangkat yang sederhana tampaknya 100KHz sudah cukup.

Semua pengalamatan I2C terdiri dari 7bit atau 10bit. Penggunaan pengalamatan 10bit jarang. Biasanya yang banyak digunakan adalah pengalamatan 7bit. Berarti kita bisa mempunyai 128 perangkat yang akan tersambung ke bus, dari 0 sampai 127. Seperti pada gambar di atas yang terdiri dari 9bit terdapat R/W sebagai bit pengatur apakah maksud dari master adalah untuk write/menulis (nilai R/W bit = 0) data atau read/membaca (nilai R/W bit = 1) data dari slave.  Pada intinya data yang dikirim adalah 8bit dengan LSB adalah R/W bit.

Berikut contoh kode untuk master yang saya dapatkan dari http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html jika ingin membuat kode sendiri. Contoh di bawah ini untuk mikrokontroler PIC akan tetapi tampaknya bisa digunakan untuk mikrokontroler lainnya yang mempunyai format pemograman yang sama.

#define SCL     TRISB4 // I2C bus
#define SDA     TRISB1 //
#define SCL_IN  RB4    //
#define SDA_IN  RB1    //

To initialize the ports set the output resisters to 0 and the tristate registers to 1 which disables the outputs and allows them to be pulled high by the resistors.
SDA = SCL = 1;
SCL_IN = SDA_IN = 0;

We use a small delay routine between SDA and SCL changes to give a clear sequence on the I2C bus. This is nothing more than a subroutine call and return.
void i2c_dly(void)
{
}

The following 4 functions provide the primitive start, stop, read and write sequences. All I2C transactions can be built up from these.
void i2c_start(void)
{
SDA = 1;             // i2c start bit sequence
i2c_dly();
SCL = 1;
i2c_dly();
SDA = 0;
i2c_dly();
SCL = 0;
i2c_dly();
}

void i2c_stop(void)
{
SDA = 0;             // i2c stop bit sequence
i2c_dly();
SCL = 1;
i2c_dly();
SDA = 1;
i2c_dly();
}

unsigned char i2c_rx(char ack)
{
char x, d=0;
SDA = 1;
for(x=0; x<8; x++) {
d <<= 1;
do {
SCL = 1;
}
while(SCL_IN==0);    // wait for any SCL clock stretching
i2c_dly();
if(SDA_IN) d |= 1;
SCL = 0;
}
if(ack) SDA = 0;
else SDA = 1;
SCL = 1;
i2c_dly();             // send (N)ACK bit
SCL = 0;
SDA = 1;
return d;
}

bit i2c_tx(unsigned char d)
{
char x;
static bit b;
for(x=8; x; x–) {
if(d&0x80) SDA = 1;
else SDA = 0;
SCL = 1;
d <<= 1;
SCL = 0;
}
SDA = 1;
SCL = 1;
i2c_dly();
b = SDA_IN;          // possible ACK bit
SCL = 0;
return b;
}

The 4 primitive functions above can easily be put together to form complete I2C transactions. Here’s and example to start an SRF08 ranging in cm:

i2c_start();              // send start sequence
i2c_tx(0xE0);             // SRF08 I2C address with R/W bit clear

i2c_tx(0x00);             // SRF08 command register address
i2c_tx(0x51);             // command to start ranging in cm
i2c_stop();               // send stop sequence

Now after waiting 65mS for the ranging to complete (I’ve left that to you) the following example shows how to read the light sensor value from register 1 and the range result from registers 2 & 3.

i2c_start();              // send start sequence
i2c_tx(0xE0);             // SRF08 I2C address with R/W bit clear

i2c_tx(0x01);             // SRF08 light sensor register address
i2c_start();              // send a restart sequence
i2c_tx(0xE1);             // SRF08 I2C address with R/W bit set

lightsensor = i2c_rx(1);  // get light sensor and send acknowledge. Internal register address will increment automatically.
rangehigh = i2c_rx(1);    // get the high byte of the range and send acknowledge.
rangelow = i2c_rx(0);     // get low byte of the range – note we don’t acknowledge the last byte.
i2c_stop();               // send stop sequence

I2C pada CodeVisionAVR

Create New Project

Klik OK.

Jika ada pertanyaan “Do you want to use the CodeWizardAVR?”, klik Yes. Lalu pilih type dari avr yang digunakan dan klik OK. Setelah itu, aturlah konfigurasi dari mikrokontroler yang digunakan. Lalu klik pada menu I2C untuk mengatur fitur I2C yang akan digunakan. Cobalah konfigurasi seperti gambar di bawah ini.

Setelah itu “Generate, Save and Exit” yang dipilih pada menubar CodeWizardAVR – Program. Jika pada CVAVR versi lama, hal itu terdapat pada menubar file.

Setelah setting dari CodeWizardAVR selesai, maka program sudah mulai bisa diedit.

Berikut sintax Master yang bisa digunakan untuk berkomunikasi dengan perangkat Slave pada komunikasi I2C.

//mengirim data I2C
i2c_start();

i2c_write(Device_ADDRESS);

i2c_write(address);

i2c_write(data);

i2c_stop();

/* 10ms delay untuk memastikan proses pengiriman data sudah selesai */

delay_ms(10);

-Device_ADDRESS adalah alamat dari perangkat slave I2C.

-address adalah alamat dari register yang akan dituliskan data.

-data 8-bits.

//menerima data I2C

i2c_start();

i2c_write(Device_ADDRESS);

i2c_write(address);

i2c_start();

i2c_write(Device_ADDRESS | 1);

data=i2c_read(0);

i2c_stop();

-Device_ADDRESS adalah alamat dari perangkat slave I2C.

-address adalah alamat dari register yang akan diakses.

-i2c_write(Device_ADDRESS | 1); Bit terakhir di or dengan 1 yang hasilnya pasti bit terakhir 1 berarti perintah menulis.

-data 8-bits dari slave dimasukan ke variable data.

Biasanya format pengiriman data I2C tergantung pada perangkat yang diakses yang dijelaskan terlebih dahulu pada datasheet.

Berikut contoh komunikasi I2C pada SPC MOTOR CONTROLLER.

i2c_start();        // Start Condition

i2c_write(0xE0);    // Tulis ke modul SPC MOTOR CONTROLLER

i2c_write(0x0E);    // Perintah “Set PWM”

i2c_write(0x01);    // Untuk Motor DC ke-2

i2c_write(128);     // Level PWM

i2c_stop();         // Stop Condition

delay_us(10);       // delay 10 us

i2c_start();        // Start Condition

i2c_write(0xE1);    // Baca ke modul SPC MOTOR CONTROLLER

temp1 = i2c_read(0);// Data Acknowledgement

i2c_stop();         // Stop Condition

___________________________________________________________

Berikut website yang membahas tentang I2C:

https://ccrma.stanford.edu/courses/250a-fall-2003/docs/avrlib-new/i2c_8c.html

http://www.engineersgarage.com/embedded/avr-microcontroller-projects/atmega32-twi-two-wire-interface

The I2C Physical Protocol
When the master (your controller) wishes to talk to a slave (our CMPS03 for example) it begins by issuing a start sequence on the I2C bus. A start sequence is one of two special sequences defined for the I2C bus, the other being the stop sequence. The start sequence and stop sequence are special in that these are the only places where the SDA (data line) is allowed to change while the SCL (clock line) is high. When data is being transferred, SDA must remain stable and not change whilst SCL is high. The start and stop sequences mark the beginning and end of a transaction with the slave device.

MPP Set : Software dan Hardware Pemutar Musik Monophonic

http://www.dailymotion.com/video/xiiabt_mpp-set-clip_tech

MonoPhonicPlayer (MPPlayer)

MonoPhonicPlayer adalah software yang digunakan untuk membuat atau memainkan file .mpp, file yang memainkan music monophonic. .mpp sendiri di buat dengan menggunakan format kode nokia composer. Software ini berbasis java jadi terlebih dahulu harus menginstall JDK (Java Development Kit) agar bisa di-running di PC. Berikut link untuk mendownload file JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html.

MPProgrammer (MPProgrammer)

MPProgrammer adalah software yang digunakan untuk membuat atau mendownload file .mpp ke MPP-Box via serialport. Sama seperti aplikasi di atas, MPProgrammer menggunakan format kode nokia composer.

MPP-Box (Hardware)

MPP-Box adalah perangkat yang memainkan musik monophonic yang terlebih dahulu didownload dari PC menggunakan MPProgrammer  via serialport.

Aplikasi

MPP set ini bisa digunakan sebagai bell di rumah atau sebagai klakson di sepeda atau di motor yang suaranya bisa diganti sesuai keinginan pengguna.

Berikut link untuk mendownload MPP Set http://www.mediafire.com/file/s9qotntbf284k0w/MPP%20set.rar. Isi file : aplikasi MPPlayer, MPProgrammer, MPP-Box (firmware MPP-Box.hex, file PCB Project Eagle format, dan readme.txt).

______________________________________________

Sample Code

Walls

4e1 8g1 4c1 8- 4a1 8c2 4f1 8- 8b1 8g1 8a1 8b1 8d2 8c2

Creed-Higher

16d2 16d2 8d2 16d2 8e2 16e2 16e2 8#f2 16#f2 16e2 16#f2 16#f2 16g2 16e2 16e2 8e2 16e2 8#f2 16#f2 32e2 32#f2 16d2 8e2 16e2 8#f2 8e2 16d2 8d2 16d2 4e2 16e2 8d2 16d2 16d2 16d2 8d2 16b1 16b1 16g2 8#f2 8#f2 16#f2 16e2 8#f2 16#f2 16e2 16d2 8d2 16d2 16d2

Warkop

8d1 8#d1 8- 8e1 8f1 2- 8g1 8#g1 2- 8e1 8f1 8-8g1 8#g1 8- 8#c2 8c2 8- 8f1 8#g1 8- 8c2 1b1 16- 16#a1 16#g1 8f1 8- 8#d1 8f1

Java s0ng
4g1 4b1 4c2 4- 4c2 8- 8e2 4f2 4g2 4f2 4e2 4c2 8- 32b2 32b3 16- 32c3 32c3 32c3 16- 32b2 32b3 16- 32g2 32g2 16- 32g2 32b3 16- 32c3 32c3 4- 4c2 4b1 4g1 4f1 4- 4f1 8- 8e1 4f1 4e1 4g1 4f1 2e1 8-

file .mpp yang dapat didownload. http://www.mediafire.com/file/5y02w2190kb0cu2/tones.mpp.rar


link tentang library tone untuk avr https://wangready.wordpress.com/2011/06/17/library-bahasa-c-untuk-aplikasi-nada-monophonic-pada-mikrokontroler-avr-dengan-compiler-winavr/

file source http://www.mediafire.com/file/wu6z3dmn1ej6dbu/mppset.rar