Thursday, April 9, 2015

Sensor Analog di Arduino, dengan monitor via bluetooth

KProgram ini digunakan untuk melihat nilai sensor (berupa tegangan) di port analog 0 (A0) di ATMega328.

Di sini sensor diwakili oleh potensiometer yang kaki tepinya masing-masing dihubungkan ke vcc dan ground, kaki tengah dihubungkan ke port analog 0.

Microcontroler membaca port analog 0 yang nilainya kemudian dikirimkan secara serial via bluetooth, juga untuk menyalakan empat led sesuai dengan nilai pembacaan sensor.

Karena ATMega328 memliliki resolusi pembacaan analog sebesar 10-bit, maka led diset sedemikian sehingga led 1 menyala jika nilai kurang dari 255, led 1 dan 2 menyala jika nilai sensor antara 255 dan 512, dst.

Sebagai tambahan, perintah yang digunakan untuk menyalakan led adalah analogWrite() bukan digitalWrite() sehingga meski nilai sensor kurang dari 255, kita masih bisa membedakan levelnya dengan tingkat redup-terangnya led pertama (0 mati, 50 redup, 255 nyala terang).





I also use it to blink led without delay, fade without delay, write to serial via Bluetooth module (HC-05) AND USB-to-TTL.

Notice that I have two TX and two RX, the default pin (0 and 1) for usb communication (upload sketch and debugging), the software serial TX,RX (pin 8 and 7) is used for bluetooth communication.


Here the code.  I use some function to isolate some group of commands for easy debugging.

#include <softwareserial .h>

SoftwareSerial mySerial(8, 7); // RX, TX

int led = LOW;        
int dterang = 5;
int terang = 11;
unsigned long t0 = 0;
const long dt = 1000;       

void setup() {
  setupSerial();
  pinMode(13, OUTPUT);
 
}

void loop() {
  fadeLed(5);
  blinkNoD(13);
  adcToLed(0);
  bacaAnalog(0);
  delay(100);
}

void adcToLed(int pin){//3,9,10,11
  int nilai = analogRead(pin);
  int sisa = nilai % 256;
  if (nilai<256 data-blogger-escaped--1="" data-blogger-escaped-512="" data-blogger-escaped-768="" data-blogger-escaped-analogwrite="" data-blogger-escaped-dterang="" data-blogger-escaped-else="" data-blogger-escaped-fadeled="" data-blogger-escaped-if="" data-blogger-escaped-int="" data-blogger-escaped-nilai="" data-blogger-escaped-pin="" data-blogger-escaped-sisa="" data-blogger-escaped-terang="" data-blogger-escaped-void="">=255 ){
    terang = 255;
    dterang *= -1;
  }
  analogWrite(pin, terang);
}

void blinkNoD(int pin) {
  unsigned long t = millis();
  if(t - t0 >= dt) {
    t0 = t;
    led=!led;   
    digitalWrite(pin, led);
  }
} 

void bacaAnalog(int pin) {
  int sensor = analogRead(pin);
  mySerial.print("Pin ");
  mySerial.print(pin);
  mySerial.print(" bernilai ");
  mySerial.println(sensor);
  Serial.println("Output dilewatkan port serial via bluetooth");
  delay(10);    
}

void setupSerial(){
  Serial.begin(9600);
  Serial.println("Hello, world? Ini kabel");
  mySerial.begin(9600);
  mySerial.println("Hello, world? Ini bluetooth");
}
/*
PWM: 3, 5, 6, 9, 10, and 11. 
PI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
Serial: 0 (RX) and 1 (TX)
*/
.