- Beranda
- Hobby & Community
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
...
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Proyek2 micro yg sudah jadi
I.N.D.E.X F.O.R.U.M
Biar ngiler, ane kasih contoh hasil karya TS...
.

Spoiler for apa aja sih yang dibahas?:
Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":
UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Spoiler for Buka Jika Mau Paket Belajar:
Proyek2 micro yg sudah jadi
Quote:
I.N.D.E.X F.O.R.U.M
Quote:
Biar ngiler, ane kasih contoh hasil karya TS...
Spoiler for Contact TS lewat dimari yahh:
.
Diubah oleh ahocool 14-06-2025 11:27
0
1M
8.6K
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.5KThread•7.2KAnggota
Tampilkan semua post
TS
ahocool
#6828
[TUTORIAL] Clinometer (pengukur ketinggian) Sederhana Memanfaatkan ADC
Persiapan sebelum memulai project :
Bahan-bahan yang dibutuhkan :
Project ini adalah request dari anak SMA yang mendapatkan tugas matematika dimana gurunya cukup "Gila" untuk menantang anak didiknya membuat alat clinometer atau pengukur ketinggian. Sang murid mencari di google dan didapatkan rangkaian yg menggunakan acelerometer tapi kendalanya harga yang mahal dan dia pun kesulitan mengerjakannya. Solusi saya cukup sederhana dengan memanfaatkan putaran sudut yg dikonversikan ke putaran potensiometer (variable resistor) yang kemudian dirubah ke dalam level tegangan dan dibaca ADC.
![kaskus-image]()
Gambar diatas merupakan ilustrasi trigonometri dari sebuah clinometer dengan mencoba memanfaatkan rumus trigonometri. Keuntungan rumus diatas adalah tidak perlu menentukan jarak pengamat ke benda yang diukur,akan tetapi karena mengandalkan rumus tangen maka dari grafik tangen berikut terjadi sedikit anomali pengukuran jika sudut mendekati kelipatan 90 derajat, dimana tangent 90 adalah tak berhingga !.
![kaskus-image]()
grafik tangen yang tidak linear sedikit mempengaruhi keakuratan
Pemilihan potensiometer yang akan digunakan sebagai penerjemah dari sudut ke tegangan (menggunakan prinsip pembagian tegangan) juga perlu diperhatikan karena pada umumnya potentiometer yg dijual dipasaran adalah potentiometer audio yg bersifat logaritmik. Jadi potentiometer yang dipilih adalah berjenis "wire wound" atau yang umum di pasaran bernama "potensiometer nikel".
![kaskus-image]()
Output dari project kali ini menggunakan lcd 16x2 yang akan menampilkan nilai sudut alpha, beta dan nilai hasil pengukuran ketinggian.
![kaskus-image]()
Perputaran sudut pengukuran vs tegangan yg dihasilkan dapat menggunakan rumus pembagian 10 bit adc (0 - 1023) sehingga didapat sudut yang mewakili per bit. Tentunya potensiometer tidaklah terlalu linear karena banyak faktor dan untungnya kita hanya menggunakan sudut 0-90 derajat saja untuk alpha maupun beta. Saya mendapatkan untuk sudut 0-90 dapat menggunakan pembagian nilai bulat per bit ADC yaitu "pembacaan adc / 3". Jadi sesuaikan dulu dengan respon nilai potensiometer yang kamu punya dengan sudut yang dihasilkan.
Untuk pengukuran tangen pada WinAvr akan digunakan library "math.h" dimana pengukuran sudut akan dirubah menjadi satuan radian. Rumus yang digunakan tentunya akan sangat memakan memory akibat nilai "float" yang digunakan. Hal ini kita akali saja dengan menggunakan unsigned integer 32 bit dengan pendekatan seperti berikut :
tana = tan((M_PI*adcalpha)/180)*1000;
tanb = tan((M_PI*adcbeta)/180)*1000;
tinggi= (tanb/tana) + 1 ;
Kita ingat juga konversi dari derajat ke radian digunakan rumus :
RADIAN = (PI * sudut ) /180
Pengali 1000 pada rumus diatas digunakan untuk mendapatkan nilai float (pecahan / koma) menjadi ratusan sehingga pembagian menjadi agak bulat.
Skematiknya adalah sebagai berikut ini :
klik untuk memperjelas
Script selengkapnya seperti dibawah ini, diasumsikan bahwa tinggi pengamat 1 meter :
[/size]
SELAMAT MENCOBA
Persiapan sebelum memulai project :
Bahan-bahan yang dibutuhkan :
- Minimum System / ATmega 8535/ ATmega 16
- Display LCD 16 x 2
- Potensiometer linear (nickel) 10K ohm(2 buah)
- Resistor 1K (2 buah)
Project ini adalah request dari anak SMA yang mendapatkan tugas matematika dimana gurunya cukup "Gila" untuk menantang anak didiknya membuat alat clinometer atau pengukur ketinggian. Sang murid mencari di google dan didapatkan rangkaian yg menggunakan acelerometer tapi kendalanya harga yang mahal dan dia pun kesulitan mengerjakannya. Solusi saya cukup sederhana dengan memanfaatkan putaran sudut yg dikonversikan ke putaran potensiometer (variable resistor) yang kemudian dirubah ke dalam level tegangan dan dibaca ADC.

Gambar diatas merupakan ilustrasi trigonometri dari sebuah clinometer dengan mencoba memanfaatkan rumus trigonometri. Keuntungan rumus diatas adalah tidak perlu menentukan jarak pengamat ke benda yang diukur,akan tetapi karena mengandalkan rumus tangen maka dari grafik tangen berikut terjadi sedikit anomali pengukuran jika sudut mendekati kelipatan 90 derajat, dimana tangent 90 adalah tak berhingga !.

grafik tangen yang tidak linear sedikit mempengaruhi keakuratan
Pemilihan potensiometer yang akan digunakan sebagai penerjemah dari sudut ke tegangan (menggunakan prinsip pembagian tegangan) juga perlu diperhatikan karena pada umumnya potentiometer yg dijual dipasaran adalah potentiometer audio yg bersifat logaritmik. Jadi potentiometer yang dipilih adalah berjenis "wire wound" atau yang umum di pasaran bernama "potensiometer nikel".

Output dari project kali ini menggunakan lcd 16x2 yang akan menampilkan nilai sudut alpha, beta dan nilai hasil pengukuran ketinggian.

Perputaran sudut pengukuran vs tegangan yg dihasilkan dapat menggunakan rumus pembagian 10 bit adc (0 - 1023) sehingga didapat sudut yang mewakili per bit. Tentunya potensiometer tidaklah terlalu linear karena banyak faktor dan untungnya kita hanya menggunakan sudut 0-90 derajat saja untuk alpha maupun beta. Saya mendapatkan untuk sudut 0-90 dapat menggunakan pembagian nilai bulat per bit ADC yaitu "pembacaan adc / 3". Jadi sesuaikan dulu dengan respon nilai potensiometer yang kamu punya dengan sudut yang dihasilkan.
Untuk pengukuran tangen pada WinAvr akan digunakan library "math.h" dimana pengukuran sudut akan dirubah menjadi satuan radian. Rumus yang digunakan tentunya akan sangat memakan memory akibat nilai "float" yang digunakan. Hal ini kita akali saja dengan menggunakan unsigned integer 32 bit dengan pendekatan seperti berikut :
tana = tan((M_PI*adcalpha)/180)*1000;
tanb = tan((M_PI*adcbeta)/180)*1000;
tinggi= (tanb/tana) + 1 ;
Kita ingat juga konversi dari derajat ke radian digunakan rumus :
RADIAN = (PI * sudut ) /180
Pengali 1000 pada rumus diatas digunakan untuk mendapatkan nilai float (pecahan / koma) menjadi ratusan sehingga pembagian menjadi agak bulat.
Skematiknya adalah sebagai berikut ini :
klik untuk memperjelas
Script selengkapnya seperti dibawah ini, diasumsikan bahwa tinggi pengamat 1 meter :
Code:
[size="2"]#define F_CPU 4000000UL
#include <string.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <math.h>
#include "lcd.h"
char derajat = 0xDF; // karakter derajat
void reverse(char s[]) //rutin untuk merubah angka ke ascii
{
int c, i, j;
for (i = 0, j = strlen(s)-1; i < j; i++, j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void itoa(uint16_t n, char s[])
//rutin untuk merubah angka ke ascii
{
uint16_t i;
i = 0;
do { // generate digits in reverse order
s[i++] = n % 10 + '0'; // get next digit
} while ((n /= 10) > 0); // delete it
s[i] = '\0'; // add null terminator for string
reverse(s);
}
void initADC() //inisialisasi ADC
{
ADMUX=(1<<REFS0);// Aref=AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}
uint16_t ReadADC(uint8_t ch) //pembacaan ADC
{
//Select ADC Channel ch must be 0-7
ch=ch&0b00000111;
ADMUX|=ch;
//Start Single conversion
ADCSRA|=(1<<ADSC);
//Wait for conversion to complete
while(!(ADCSRA & (1<<ADIF)));
//Clear ADIF by writing one to it
ADCSRA|=(1<<ADIF);
return(ADC);
}
int main(void)
{
uint16_t baca1,baca2,tana,tanb,tinggi;
char dum;
lcd_init(LCD_DISP_ON);//inisialisasi LCD
lcd_clrscr(); //bersihkan LCD
while(1)
{
initADC();
baca1=ReadADC(6) / 3; //baca alpha
if(baca1 <90){ //jika hasil tidak lewat 90 derajat
lcd_gotoxy(0,0);
lcd_putc(224); //ascii alpha
lcd_puts(" =");
itoa(baca1,&dum);
lcd_puts(&dum);
lcd_putc(derajat);
lcd_putc(' ');
}
else{ //jika lebih 90 di warning
lcd_gotoxy(0,0);
lcd_putc(224);
lcd_puts(" =max");
}
_delay_ms(100);
initADC();
baca2= ReadADC(5) / 3; //baca beta
if(baca2 <90){ // jika perhitungan < 90 derajat
lcd_gotoxy(8,0);
lcd_putc(226);
lcd_puts(" =");
itoa(baca2,&dum);
lcd_puts(&dum);
lcd_putc(derajat);
lcd_putc(' ');
}
else{ //jika lebih 90 di warning
lcd_gotoxy(8,0);
lcd_putc(226);
lcd_puts(" =max");
}
_delay_ms(100);
lcd_gotoxy(0,1);
if(baca1 <90 && baca2 <90){
//PERHITUNGAN TINGGI
tana = tan((M_PI*baca1)/180)*1000;
tanb = tan((M_PI*baca2)/180)*1000;
tinggi= (tanb/tana) + 1 ;
lcd_puts(" TINGGI:");
itoa(tinggi,&dum);
lcd_puts(&dum);
lcd_puts(" m");
lcd_puts(" ");
}
else{
lcd_gotoxy(0,1);
lcd_puts(" TINGGI: Error !");
}
}
return 0;
}
[/size]
SELAMAT MENCOBA
0
