PROGRAMMING ROBOT USING BASCOM AVR & CODEVISION AVR www.toko-robot.com www.widodo.com www.toko-elektronika.com
Trend Industri Elektronika dan TI Aplikasi berbasiskan controller/mikrokontroler Aplikasi harus mendukung antarmuka dengan USB Aplikasi dapat dikontrol/dipantau dengan software Visual Aplikasi harus kompak dan sekecil mungkin Daya yang dibutuhkan rendah Harga harus kompetitif Solusi ? Peluang besar bagi yang kompeten pada Embedded System
Peluang karir TI berbasis Elektronika Developer aplikasi embedded dan kontrol (Sistem kontrol, robotika, instrumentasi, Monitoring, PDA, Aplikasi SMS dll) Pengusaha Aplikasi Elektronika (Peluang besar !) (System minimum, kit-kit elektronika, produk industri dll). Pengajar dan Peneliti aplikasi embedded dan kontrol (Robotika, Instrumentasi, sistem kontrol, Wireless application dll) Engineer /Teknisi profesional Menggunakan Software : Visual Basic .net, C++, Visual C# .Net, Java, assembly dll.
Kunci Sukses Menguasai Elektronika dan TI Software : Assembly + C/C++/ Bascom AVR Pemrograman & Interfacing Mikrokontroler Visual Basic .Net 2010 dan Arduino Visual C# .Net 2010 dan Raspberry Pi 3 Java (J2SE, J2EE dan J2ME) Sql Server/Oracle 10g dan MySql Hardware: Pemrograman dan Interfacing mikrokontroler dan PLC Memahami dan familiar dengan rangkaian
Bidang Elektronika Saat ini
Mengapa Mikrokontroler ? Chip teknologi terkini yang mampu melaksanakan tugas- tugas kontrol sistem, karena di dalamnya umumnya sudah mencakup: CPU RAM ROM EEPROM (Tidak semua) I/O (Serial /paralel, I2C) Timer Sehingga dimungkinkan membangun Aplikasi single chip(Aplikasi dengan hanya 1 buah chip)
MiKrokontroler Umum
Berbagai Mikrokontroler Mikrokontroler ATMEL contoh: 89C51,89S51,89S8252,AVR 89S8535, 90S2313 Mikrokontroler PIC contoh : 16F84A,16F628,16F877A,12F625 Mikrokontroler Basic Stamp contoh : BS1, BS2, BS2sx (menggunakan PIC) Mikrokontroler Raspberry Pi 3 Mikrokontroler Motorolla contoh: 68HC11, 6800 Mikrokontroler Arduino Uno
Aplikasi Mikrokontroler Robotika Home remote system Industrial control Kontrol alat over SMS Pengontrol mesin pertanian Aplikasi hiburan seperti Games dan DVD Player Antarmuka PC dll
Pertimbangan memilih mikrokontroler Ketersediaan IC dan programmer Harga Banyaknya pengguna di lingkungan Anda Mendukung ADC (Pengubah analog ke digital) dan fitur lainnya Bahasa pemrograman assembly/C/Basic
Mikrokontroler AVR Atmega 8535 Mikrokontroler terdiri dari : Port I/O untuk kirim-terima data ( umunya 8 bit dan serial) Port sumber detak Port serial Channel ADC Pin sumber detak
Mikrokontroler AVR ATmega8535 Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C, dan Port D. ADC (Analog to Digital Converter) 10 bit sebanyak 8 channel. SRAM sebesar 512 byte. Memori Flash sebesar 8 Kb dengan kemampuan Read While Write dan dapat ditulis ulang 10.000x EEPROM sebesar 512 byte yang dapat diprogram saat operasi dan dapat ditulis ulang 100.000x Mencapai 16MIPS pada 16 MHz
Perbandingan Mikro ATMEL Type RAM Flash Memory EEPROM AT89C51/ AT89S51 8 X 128 Byte 4 KByte No AT89C52/ AT89S52 8 X 256 Byte 8 KByte AT89C55 20 KByte AT89S53 12 KByte AT89S8252 2 KByte Atmega 8535 512 8KByte 512B
Sistem minimum Mikrokontroler Kelip.bas ‘Konfigurasi port B sebagai output Config portb=output Do ’pengulangan Portb=255 ‘hidup semua Waitms 100 ’delay 100ms Portb=0 ’mati semua Loop Terdapat 4 PORT sebagai I/O yaitu PA, PB, PC dan PD
Pengubah Analog ke Digital ADC.bas Start Adc Dim W As Word Channel = 0 ‘Baca data di channel Do W = Getadc(channel) ‘kirim ke port serial Print "Channel " ; Channel ; " value " ; W Portb=w ‘keluarkan ke port B Loop End
Single Chip Solution for ROBOT 2.4 GHz RF Ext. Serial EEPROM Serial Com CMUCam Speed Encoder Other I/O Line Detector 32kB Flash, 2kB SRAM, 1 KB EEPROM, 2 cycle hardware multipler
Bascom AVR (WWW.MCSELEC.COM) Bahasa basic Paling mudah Mendukung pengisian mikro melalui port Paralel dan serial
Program Kelap Kelip Kelip.bas: Config portb=output ‘konfigurasi port B sebagai output Do Portb=255 ‘aktifkan semua karena 8 bit MSB D7 D6 D5 D4 D3 D2 D1 D0 LSB 1 1 1 1 1 1 1 1 Waitms 500 ‘delay 500ms Portb=0 Wait 1 ‘delay 1 detik ‘ Loop
Langkah mengisi program ke Mikro Hubungkan kabel ISP ke Port Paralel Komputer Hubungkan ujung kabel ISP ke mikro Hubungkan catu daya ke mikro Buka Bascom AVR Ketik program Simpan program Kompilasi Isi program ke mikro
Terima input dari suatu port IO.bas: ’Program terima input dari port D keluarkan ke portB Config portb =output Config portd=input ‘ port D sebagai input do Portb=pind ‘data di port D dikirim ke Port B Loop
Deteksi input pada suatu pin Deteksi.bas ’Program mendeteksi input pada suatu pin Config portB=output Config pinD.6 =input Dim w as byte Do W=pinD.6 ‘Input di Pin D.6 (1/0) Portb=w loop
Set pin Setpin.bas ’program mengeset bit pada suatu pin di suatu port Config portb=output Portb.1=1 ‘high Portb.3=1 Portb.5=1 Portb.6=0 ‘low
Rotate Rotate all bits one place to the left or right. Dim A As Byte Config portb =output Portb=1 Do Portb = 1 For A = 1 To 8 ‘looping Rotate Portb , Left 'rotate bits left Wait 1 ‘delay 1 detik Next
Shift Shift all bits one place to the left or right. Dim a as Byte a = 128 Shift A , Left , 2 Print a '0 End
Dasar Kendali kendali.bas: Config Portc= Input Config Porta= Output Dim A As Byte Do ‘lakukan operasi DO..LOOP A = Pinc.0 ‘pinD.7 -> A If A = 1 Then ‘ Jika saklar di PinD.7 aktif Portb = 0 ‘portb = Low End If ‘akhiran If If A = 0 Then Portb=255 End If ‘ Loop
SELECT ..CASE (Penentuan Kondisi) Dim X As Byte Do Input "X ? " , X ‘terima input tampung di X Select Case X Case 1 To 3 : Print "1 , 2 or 3 will be ok" Case 4 : Print "4" Case Is > 10 : Print ">10" Case Else : Print "no" End Select Loop End
Aritmatika Dim X As Single , Y As Single , Result As Single Dim Z As String * 10 'So this leaves the TRIG functions to be implemented Input "Enter x " , X 'ask for 2 values Input "Enter y " , Y Z = "1234.567" Result = Val(z) : Print Result Z = Str(result) : Print Result 'X = 1000.1234 'Y = 5.75 Print "X+Y=" ; : Result = X + Y : Print Result 'calculate Print "X-Y=" ; : Result = X - Y : Print Result Print "X/Y=" ; : Result = X / Y : Print Result If X > Y Then Print ">" End If
LCD (Liquid Crystal Display) NO Nama Pin Deskripsi Port 1 VCC + 5V 2 GND 0 V 3 VEE Tegangan Kontras LCD 4 RS Register Select, 0=Input Instruksi, 1=Input Data PD7 5 R/W 1= Read ;0 = Write Ground 6 E Enable Clock PD6 7 D0-D3 Data D0-D3 - 11 D4 Data Bus 4 PC4 12 D5 Data Bus 5 PC5 13 D6 Data Bus 6 PC6 14 D7 Data Bus 7 PC7 15 Anode Tegangan Positif backlight 5V 16 Katode Tegangan Negatif backlight
LCD dim A As Byte Config Lcd = 16 * 2 'configure lcd 2baris x 16 karakter do cls Lcd "Hello world." ‘tampilkan pada baris 1 Wait 1 Lowerline ‘ke baris ke 2 Lcd "Shift this." 'display this at the lower line For A = 1 To 10 Shiftlcd Right geser kanan Wait 1 'wait a moment Next loop
Posisi LCD Do Cls 'bersihkan layar lcd Cursor Blink Locate 1 , 1 ‘baris 1 kolom 1 Lcd "SmartAVR 8535" Locate 2 , 1 ‘baris 2 kolom 1 Lcd " ATmega8535“ wait 1 loop
Pulsout PULSEOUT PORT , PIN , PERIOD Dim A As Byte Config Portb = Output 'PORTB all output pins Portb = 0 'all pins 0 Do For A = 0 To 7 Pulseout Portb , A , 60000 'generate pulse 60000x1us at 4MHz Waitms 250 'wait a bit Next Loop 'loop for ever
Blok Mobile Robot Sederhaha
Blok Robot Kompleks
Rangkaian Mikro Sederhana
Prinsip Robot Sederhana
Robot Sederhana
Actuator for Robot Servo Cont & Standard DC Motor FOR COUNTER =1 TO 24 ‘turn left ¼ circle PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT PORTB=2 ‘ right motor PORTB=1 ‘ left motor
Robot Sederhana AVT
SPC DC Motor Pin Nama Fungsi Pada Motor 1 S1 Run 1 Stop berlogika 1, Run berlogika 0 S2 Dir 1 CW berloika 1, CCW berlogika 0 Pada Motor 2 S3 Run 2 Stop berlogika 1, Run berlogika 0 S4 Dir 2 CW berloika 1, CCW berlogika 0
Penerapan Pada Robot Robot.bas Config Portb = Output Dim W As Word Start ADC Do W = Getadc(0) ‘baca sensor jarak If W < 200 Then ‘jika tdk ada halangan Portb = 8 ‘maju Wait 2 ‘delay 2 detik Else ‘jika ada halangan Portb = 0 'belok kiri Wait 2 End If Loop
Led.bs2: Basic Stamp ' Lampu LED ' {$STAMP BS2} ' {$PBASIC 2.5} DO HIGH 12 ‘beri logika 1 PAUSE 500 LOW 12 ‘beri logika 0 LOOP
Sensors SRF04/8 Ultrasonic Range Finder CMUcam Photoreflector P5887 Thermal Array Sensor Compass Sensor UVtron Flame detector Photoreflector P5887 Lynxmotion director Sharp GP2D12 Infrared distance sensor
Contoh pembacaan sensor jarak Ultrasonic SRF04 (3cm -3m) Infrared GP2D12 (10cm-80cm) Ultrasonic.bas : Initialize-Ultrasonic … Distance=US_Front() If Distance <200 then Portb=8 ‘ Move forward Function US_Front() As Integer Portc.0 = 0 Pulseout Portc , 0 , 5 Pulsein US_Front , Pinc , 1 , 1 End Function Sub Initialize_ultrasonic Config Pinc.0 = Output Config Pinc.1 = Input End sub InfraredDistance.bas: Do Data=Getadc(0) If W < 200 Then ‘’ if there is no obstacle Portb = 8 ‘move forward Wait 2 ‘delay 2 second Else ‘if there is obstacle Portb = 0 ‘ turn left Wait 2 End If
Servo Motor
Gerakan Servo COUNTER VAR Word FREQOUT 4,2000,3000 ‘sinyal program start/reset FOR COUNTER =1 TO 407 ‘gerak maju 10 detik PULSOUT 13,850 ‘ pin 13 keluarkan sinyal 850 PULSOUT 12,650 ‘ pin 12 keluarkan sinyal 650 PAUSE 20 NEXT FOR COUNTER =1 TO 24 ‘ belok kiri ¼ putaran PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 FOR COUNTER =1 TO 24 ‘ belok kanan ¼ putaran PULSOUT 13, 850 PULSOUT 12, 850
PING get_sonar : ‘ kode utama ping =IsLow PULSOUT ping, trigger PULSIN ping, isHigh, rawDist rawDist=rawDist */Scale rawDist =rawDist/2 RETURN
SRF04
CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = opt ADC Running mode. May be SINGLE or FREE. PRESCALER A numeric constant for the clock divider. Use AUTO to let the compiler generate the best value depending on the XTAL REFERENCE Some chips like the M163 have additional reference options. Value may be OFF , AVCC or INTERNAL. See the data sheets for the different modes.
ADC ADC.bas Config Adc = Single , Prescaler = Auto 'Now give power to the chip Start Adc 'With STOP ADC, you can remove the power from the chip 'Stop Adc Dim W As Word , Channel As Byte Channel = 0 'now read A/D value from channel 0 Do W = Getadc(channel) Print "Channel " ; Channel ; " value " ; W Incr Channel If Channel > 7 Then Channel = 0 Loop End
LCD Lcd "SMART DataLogger" Waitms 100 Lowerline Lcd "e-Technology Center" Thirdline Lcd "Press 1-4" Fourthline Lcd "Press 5 to Go Out" Home Third Home Fourth For B = 1 To 15 Shiftlcd Right Waitms 25 Next
LCD Designer Sub Displaysuhu() Cls Lcd "Suhu:" Locate 2 , 13 Deflcdchar Print 1 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 Lcd Chr(1) Locate 1 , 19 Lcd "C"
Keypad Config Kbd = Portb Dim B As Byte 'loop for ever Do B = Getkbd() Print B 'when no key is pressed 16 will ‘be returned Loop Lcd B End
7 Segment
Robot Avoider If W < 150 Then Portb = 10 'maju Waitms 1 Else ‘Robot Avoider Dim A As Byte Dim B As Byte Config Portb = Output Dim W As Byte , Channel As Byte Declare Sub Bacajarak() Config Adc = Single , Prescaler = 32 , Reference = Avcc Enable Adc Enable Interrupts Do call Bacajarak ‘panggil fungsi bacajarak Loop Sub Bacajarak() Channel = 0 W = Getadc(channel) Start Adc If W < 150 Then Portb = 10 'maju Waitms 1 Else Portb = 0 'mundur Portb = 1 'belok kanan Waitms 2 End If End Sub
Line Follower Dim A As Byte Dim B As Byte Config Portb = Output Config Pinc.0 = Input Config Pinc.1 = Input Dim W As Byte , Channel As Byte Declare Sub Bacajarak() Config Adc = Single , Prescaler = 32 , Reference = Avcc Enable Adc Enable Interrupts Do A = Pinc.0 B = Pinc.1 If A = 1 And B = 1 Then Portb = 10 'maju Waitms 5 End If If A = 1 And B = 0 Then Portb = 4 'belok kanan Waitms 10 If A = 0 And B = 0 Then Portb = 0 'mundur Loop
Hexapod Avoider dengan Sharp GP2D12 Dim A As Byte Dim B As Byte Config Portb = Output Dim W As Byte , Channel As Byte Declare Sub Bacajarak() Config Adc = Single , Prescaler = 32 , Reference = Avcc Enable Adc Enable Interrupts Do Call Bacajarak ‘panggil fungsi bacajarak Loop Sub Bacajarak() Channel = 0 ‘sensor di ch 0 W = Getadc(channel) Start Adc If W < 150 Then Portb = 10 Waitms 30 Else Portb = 5 Waitms 5 Portb = 0 ‘mundur Wait 2 Portb = 4 'belok kanan Wait 1 End If End Sub
Hexapod Avoider dengan SRF04 Declare Sub Initialize_ultrasonic() Declare Function Ultrasonic_depan() As Integer Dim Jarakdepan As Integer Dim W As Word Config Portb = Output Config Portd = Input Config Portc = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc 'configurasi ADC Start Adc Call Initialize_ultrasonic Portb = 2 'mundur dulu Waitms 500 Do Jarakdepan = Ultrasonic_depan() Print "jarak depan :" ; Jarakdepan If Jarakdepan > 40 Then Portb = 10 'maju Wait 1 Else Portb = 0 Waitms 500 'mundur Portb = 4 End If 'BELOK KANAN Loop End Function Ultrasonic_depan() As Integer Portc.0 = 0 ' Set initial state of trigger pin Pulseout Portc , 0 , 5 ' generate a 5us pulse @ 8 mhz Pulsein Ultrasonic_depan , Pinc , 1 , 1 ' measure the return pulse End Function Sub Initialize_ultrasonic Config Pinc.0 = Output Config Pinc.1 = Input End Sub
Pemadam Api
Serial Print “Data yang masuk” ; data
Code Vision AVR
Membuat proyek baru
Konfigurasi Port DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7 DDRD=0x00; // Port D dikonfigurasi sebagai input DDRB=0; // Port B dikonfigurasi sebagai input PORTB=0; //internal pull-up aktif PORTB=PINC; //Semua data di Port C dikirim ke Port B PORTB.0=PINC.0 ; //Data di Port C.0 dikirim ke Port B.0
Proyek baru IO1.c: // Mencoba Membuat Program CodeVision AVR // Percobaan Output dan delay pada Port B #include <mega16.h>//menyertakan library file mega16 #include <delay.h> //menggunakan delay jadi librarynya harus digunakan void main(void) { //Program Utama bertipe data void DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7 PORTB=255; //Semua Port B mengeluarkan logika 1, jadi semua LED mati // Program akan berulang terus while (1) { PORTB.0=0; //LED PB0 menyala PORTB.2=0; //LED PB2 menyala delay_ms(500); //Delay 0.5 detik PORTB.0=1; //LED PB0 mati PORTB.2=1; //LED PB2 mati delay_ms(1000); //Delay 1 detik }; //akhir looping } //Akhir program utama
Kompilasi dan Pengisian
Pengendalian relay
Out data Outportb.c: // Percobaan Output dan delay pada Port B #include <mega16.h>//menyertakan library file mega16 #include <delay.h> //menggunakan delay, jadi librarynya harus digunakan void main(void) { //Program Utama DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7 PORTB=255; //Semua Port B mengeluarkan logika 1 , jadi LED mati // Program akan berulang terus while (1) { PORTB.0=0; //LED PB0 menyala PORTB.1=1; // LED PB1 mati PORTB.2=0; //LED PB2 menyala delay_ms(500); //Delay 0.5 detik PORTB.0=1; //LED PB0 mati PORTB.1=0; // LED PB1 menyala PORTB.2=1; //LED PB2 mati delay_ms(1000); //Delay 1 detik }; //akhir looping } //Akhir program utama
Input Port C ke Port B // Percobaan Input di Port C dan Output pada Port B // Saklar di Port C, LED terhubung di Port B #include <mega16.h> //Menyertakan library file ATmega16 #include <delay.h> //menggunakan delay, jadi librarynya harus digunakan void main(void) { //Program Utama DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7 PORTB=255; //Semua Port B mengeluarkan logika 1, semua LED mati PORTC =0; //Matikan internal pull up karena sudah ada //eksternal pull up pada rangkaian input #asm ("nop") //persiapan // Program akan berulang terus while (1) { PORTB=PINC ; //Semua push button yang ditekan di Port C, datanya dikirim ke Port B }; //akhir looping } //Akhir program utama
Deteksi input Port C ke Port B DeteksiInputPortCkePortB.c: // Percobaan deteksi Input di Port C per pin dan Output pada Port B // Saklar di Port C, LED terhubung di Port B #include <mega16.h> //Menyertakan library file mega16 #include <delay.h> //menggunakan delay, jadi librarynya harus digunakan void main(void) { //Program Utama DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7 PORTB=255; //Semua Port B mengeluarkan logika 1 sehingga semua LED mati DDRC=0; //Port C dikonfigurasi sebagai input PORTC =0; //Matikan internal pull up karena sudah ada //eksternal pul up pada rangkaian input #asm ("nop") //persiapan // Program akan berulang terus while (1) { PORTB.1=PINC.0 ; //membaca data di PC0, datanya dikirim ke PB1 PortB.2= ~PINC.2 //Logika PB2 kebalikan dari PC2 }; //akhir looping } //Akhir program utama
Komunikasi Serial
Contoh program serial unsigned char judul[]={"Praktikum AVR"}; //Inisialisassi USART //Format frame; 8 data, 1 stop bit, no parity //USART Receiver & Transmitter ON //USART mode: Asinkron UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0X00; // Baud rate 9600bps, pada kristal 4 MHz UBRRL=0X19; puts(judul); //tampilkan pesan dan ganti baris UDR=’O’;
Konfigurasi Hyperterminal
Pembacaan sensor jarak SharpGP2D12.c: // Percobaan 10.1, percobaan baca data sensor jarak Sharp GP2D12 // LED terhubung di Port B #include <mega16.h> #include <stdio.h> #include <delay.h> #define ADC_VREF_TYPE 0x60 flash unsigned char string1[]={"data adc: %d; "};
ADC unsigned char read_adc(unsigned char adc_input) { // Baca 8 bit terpenting 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); // Mulai konversi ADC ADCSRA|=0x40; // Tunggu konversi ADC selesai while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } void main(void) { // Inisialisasi Port B PORTB=0xFF; DDRB=0xFF;
Pembacaan sensor pada robot // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19; // ADC initialization // ADC Clock frequency: 31,250 kHz // ADC Voltage Reference: AVCC pin // ADC Auto Trigger Source: Free Running // Menggunakan 8 bit data ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0xA7; SFIOR&=0x1F; }
Pembacaan sensr pada robot while (1) { PORTB=read_adc(0); // Baca data sensor di PA.0 printf(string1,PORTB); if (PORTB>100) PORTD=128; //Putar motor DC ke kanan } else PORTD=64; //Putar motor DC ke kiri };
Industrial Control
Robot for Human Don’t you want to develop these ???
Wireless Application Wireless Application Frequency Range: 2.4~2.524 GHz Modulate Mode: GFSK Data Rate: 1Mbps Multi channel operation: 125 channels, Data Rate:1,200 - 19.2 K baud Frequency:433.92 Mhz (UHF)Transmission 500 ft