Sensor Pengukur Jarak dengan Jangka Sorong Digital menggunakan Arduino Nano, Presisi 0.01mm dan Murah
Keadaan mendesak dan waktu yang sempit terkadang membuat kita menjadi lebih smart dengan ide ide. Jadi cerita nya kemarin kita mau buat alat agar bisa mengukur suatu jarak, tepat nya jarak regang suatu benda. Awal nya kami ingin mencoba menggunakan sensor ping sebagai pengukur jarak, tapi konstruksi nya tidak pas, terlalu besar. kemudian menggunakan resistor geser dan akhir nya menggunakan jangka sorong digital.
Prinsip resistor geser ini adalah dengan menggunakan pembagi tegangan, jadi jika ada perubahan jarak / resistor geser tersebut maka akan ada perubahan pada output tegangan. output ini akan dibaca melalui ADC pada mikrokontroller ATMEGA16. Ternyata setelah di uji, pengukur jarak dengan menggunakan resistor geser kurang baik. mulai dari resolusi data yang didapatkan terlalu kecil. Sehingga perubahan jarak dengan data adc terlalu jauh, kemarin kalo saya tidak salah ingat. setiap perubahan 1cm baru ada perubahan data adc.
jadi tidak mungkin, searching sana sini, nemu lah satu video, membaca data jangka sorong digital dengan arduino. walah mak, ternyata bisa juga menggunakan jangka sorong digital sebagai sensor jarak, presisi sampai 0.01mm lagi.
cari refrensi sana sini, akhir nya mentok karena ada masalah di level tegangan. jangka sorong digital ini menggunakan battrey 1.5v sementara arduino berada di level tegangan 3.3v minimal. Jadi bingung sendiri nih. jelas gak kebaca di arduino nya,. karena tegangan 1.5v masih di anggap logika low di arduino.
terpikir lah untuk membuat konversi tegangan melalui transistor 2n2222.

coba membuat rangkaian di pcb bolong,. ehh capek capek buat nya ternyata tidak bisa juga, ternyata rangkaian nya inverting, berkebalikan, mungkin programnya yang harus di rubah atau tambah transistor satu lagi. tapi yang jelas kemarin gak berhasil juga. akhir nya nemu nih di salah satu web di luar cara membaca sensor pengukur jarak digital ini di arduino. Tegangan suplay jangka sorong digital di supplay dengan 3.3v dari tengangan arduino. jadi sebelum nya dia menggunakan batrei 1.5v, ini battrei nya kita lepas dan menggunakan tegangan 3.3v dari arduino.

Coba lihat pin out dari jangka sorong digital ini. Awal nya sih ragu juga, apa bisa jangka sorong ini di supplay tengan 3.3v karena batrei yang di gunakan adalah 1.5v. Karena gak ada solusi yang lain akhir nya dicoba. ehh berhasil. Nambah lagi pustaka di dunia mikro ini. nah bagaimana kah isi program di arduino nano nya.
interface caliper arduino nano

Program nya adalah sebagai berikut,
int bit_array[25]; unsigned long time_now; int CLOCK_PIN = 5; int DATA_PIN = 4; void setup() { Serial.begin(9600); pinMode(CLOCK_PIN, INPUT); pinMode(DATA_PIN, INPUT); Serial.println("caliper ready"); } void loop() { while (digitalRead(CLOCK_PIN) == LOW) {}; time_now = micros(); while (digitalRead(CLOCK_PIN) == HIGH) {}; if ((micros() - time_now) > 500) { //decode(); } } void decode() { int sign = 1; int i = 0; float value = 0.0; float result = 0.0; bit_array[i] = digitalRead(DATA_PIN); while (digitalRead(CLOCK_PIN) == HIGH) {}; for (i = 1; i <= 24; i++) { while (digitalRead(CLOCK_PIN) == LOW) {}; bit_array[i] = digitalRead(DATA_PIN); while (digitalRead(CLOCK_PIN) == HIGH) {}; } for (i = 0 ; i <= 24; i++) { Serial.print(bit_array[i]); // print binary data output caliper Serial.print(" "); } Serial.println(); for (i = 1; i <= 20; i++) { value = value + (pow(2, i - 1) * bit_array[i]); } if (bit_array[21] == 1)sign = -1; if (bit_array[24] == 1) { result = (value * sign) / 2000.00; Serial.print(result, 3); Serial.println("in"); } else { result = (value * sign) / 100.00; Serial.print(result, 2); //Serial.print(result,2) --> untuk dua digit Serial.println("mm"); } delay(500); }

akhir nya masalah besar saya terselesaikan, nah setelah itu saya tinggal transfer data nya ke atmega16 menggunakan komunikasi serial. Untuk di olah,
Semoga artikel ini membantu, kritik saran monggo.
refrensi: http://wei48221.blogspot.co.id/2016/01/using-digital-caliper-for-digital-read_21.html