Translate

Membuat Radar Deteksi Jarak Benda Dengan Arduino dan Sensor Ultrasonik

Membuat Radar Deteksi Jarak Benda Dengan Arduino dan Sensor Ultrasonik

        
             Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk mendeteksi jarak benda, sistemnya seperti radar yang bergerak memantau kondisi benda. jadi jika ada benda yang mendekat maka akan membunyikan buzzer dan menghidupkan led. alat ini terdiri dari sensor ultrasonik dan servo. mikroprosesor yang dipakai yaitu Arduino Mega. untuk lebih jelasnya berikut skema dan programnya.




a. Arduino Mega





b. Micro Servo





c. Sensor Ultrasonik SRF04





d. Program Arduino

#include <Servo.h>

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10

Servo myservo; 
int x = 50;
int y = 0;
int buzzer = 2;
int ledx = 3;


void setup() {
  myservo.attach(9);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(ledx, OUTPUT);
  pinMode(echoPin, INPUT);
  }

void loop() {
 
 
  myservo.write(x);
 
  if(y == 0){
  x = x + 5;
  }
 
  if(y == 1){
  x = x - 5;
  }
   
  if(x > 150){
  y = 1; 
  }
 
  if(x < 50){
  y = 0; 
  } 
 
  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");
 
  if (distance < 10) {  // This is where the LED On/Off happens
    digitalWrite(buzzer, HIGH);
    digitalWrite(ledx, LOW);
}
  else {
    digitalWrite(buzzer, LOW);
    digitalWrite(ledx, HIGH);
  }
 
  delay(200);
 
 
}






e. VIDEO HASILNYA











 

MEMBUAT PASIEN MONITOR DENGAN ARDUINO LOADCELL HX711 AMPLIFIER, HEARTBEAT PULSE SENSOR, TEMPERATURE SENSOR DS18B20

MEMBUAT PASIEN MONITOR DENGAN ARDUINO LOADCELL HX711 AMPLIFIER, HEARTBEAT PULSE SENSOR, TEMPERATURE SENSOR DS18B20


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk pasien monitor, alat ini dikhususkan untuk bayi jadi detak jantung, suhu tubuh dan beratnya harus sangat diperhatikan, maka dari itu sensor yang digunakan juga harus yang terbilang akurat, sensor yang dipakai yaitu loadcell 5Kg, pulse sensor, dan sensor suhu DS18B20. jika BPM lebih dari 150 maka buzzer akan berbunyi, dan juga jika ingin memulai counter BPM, bisa menekan tombol PLAY atau push button. untuk lebih jelasnya berikut skema dan programnya.



a. ARDUINO MEGA





b.PULSE SENSOR / HEART BEAT SENSOR





c.Loadcell + HX711





c. Sensor Suhu DS18B20 water proof






d. Program ARDUINO IDE

//library HX711 bisa di download di link berikut
//https://github.com/bogde/HX711 

#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#include "HX711.h"

// HX711.DOUT    - pin #21
// HX711.PD_SCK    - pin #20

HX711 scale(21, 20);        // parameter "gain" is ommited; the default value 128 is used by the library

OneWire  ds(10);  //output ds18b20 ke pin 10 arduino

int n = 0;
int bpm = 0;
int x = 0;
int suhux = 0;
int bpmx = 0;
int buzzer = 8;

const int buttonPin1 = 52;
int buttonState1 = 0;
const int buttonPin2 = 53;
int buttonState2 = 0;



void setup() {
 
  pinMode(buttonPin1, INPUT);
  digitalWrite(buttonPin1, HIGH);
  pinMode(buttonPin2, INPUT);
  digitalWrite(buttonPin2, HIGH);

  pinMode(buzzer, OUTPUT);
  digitalWrite(buzzer, LOW);

  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
  pinMode(13, OUTPUT);
  Serial.begin(9600);

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());            // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));      // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));        // print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);    // print the average of 5 readings from the ADC minus tare weight (not set) divided
                        // by the SCALE parameter (not set yet) 

  scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();                        // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));        // print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
                        // by the SCALE parameter set with set_scale

  Serial.println("Readings:");

 
//  lcd.setCursor(0, 0);
//  lcd.print("WELLCOME");
//  delay(20000);
//  lcd.clear();

}

void loop() {
 
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
   
  int berat = scale.get_units(10) * -1;
  float fix = (berat - 0.036) / 0.191;
 
  if (fix < 0 ) {
  fix = 0;
  }
 
 // Serial.print("one reading:\t");
 // Serial.print(scale.get_units(), 1);
 // Serial.print("\t| average:\t");
 // Serial.println(scale.get_units(10), 1);

  lcd.setCursor(0, 0);
  lcd.print("Berat= ");
  lcd.print(fix);
  lcd.print(" gr");

  scale.power_down();                    // put the ADC in sleep mode
  delay(1000);
  scale.power_up();
 
  if (buttonState1 == LOW) {
  lcd.clear();
  n = 0;
  bpm = 0;
  delay(200);
 
 // buttonState1 = digitalRead(buttonPin1);
 // buttonState2 = digitalRead(buttonPin2);

  while(n <= 300 ){
       
  n = n + 1;
  delay(200);
  int dataadc1 = analogRead(A0);         

  lcd.setCursor(0, 0);
  lcd.print("n = ");
  lcd.print(n);
  
  lcd.setCursor(0, 1);
  lcd.print("BPM = ");
  lcd.print(bpm);

  if (n > 300) {
  lcd.clear();
  }

  if ((dataadc1 > 512) && (x > 1)) { 
  digitalWrite(13, HIGH);
  x = 0;
  bpm = bpm + 1;
  }

  else if ((dataadc1 < 512) && (x < 1)) {
  x = 2;
  digitalWrite(13, LOW);

  }
 
  }
 
  }
 

//  if ( n > 300 ) {

  datatampil();
//  }


}


void datatampil() {
  n = 0;
 
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  int celsius, fahrenheit;

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }


  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end

  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr); 
  ds.write(0xBE);     

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();

  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;


  lcd.setCursor(0, 1);
  lcd.print("T= ");
  lcd.print(celsius);
  lcd.print("C");
 
 // lcd.clear();
 
  lcd.setCursor(9, 1);
  lcd.print("BPM= ");
  lcd.print(bpm);
 
  if (bpm > 150) {
     digitalWrite(buzzer, HIGH);
  }else
  {
     digitalWrite(buzzer, LOW); 
  }
 
  delay(200);
 // lcd.clear();
 
 
 // Serial.println(bpm);
 // Serial.println(celsius);


 // n = 0;
 // bpm = 0;
 // lcd.clear();

}





e. VIDEO HASILNYA












MEMBUAT ALAT DENGAN KENDALI RFID READER ID-12 dan ACCELEROMETER ( CV AVR ) CODE VISION AVR

MEMBUAT ALAT DENGAN KENDALI RFID READER ID-12 dan ACCELEROMETER ( CV AVR ) CODE VISION AVR


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk mengendalikan sepeda motor dengan menggunakan kartu atau tag card RFID. reader yang digunakan pada alat ini yaitu ID-12 atau bisa juga dengan RDM630 / 6300 sama saja. output pada alat ini seharusnya adalah relay namun simulasi kali ini hanya menggunakan led. sensor accelerometer yang digunakan adalah GY 61 sebagai detektor maling, jadi jika motor berubah kemiringannya, maka buzzer akan ON otomatis. untuk lebih jelasnya berikut adalah skema dan programnya.



 a. Minimum System





b. RFID Reader ID-12





c. Sensor ACCELEROMETER GY-61 








d. Program CV AVR (Code Vision AVR)

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

Project :
Version :
Date    : 6/23/2016
Author  : NeVaDa
Company : HP InfoTech s.r.l.
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>

#include <delay.h>
#include <string.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int 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 ADCW;
}

// Declare your global variables here

unsigned char pass[13] = "6F0085C0173";
unsigned char passx[13] = "780027BA5FB";

unsigned char code[13];
int val = 0;
int bytesread;
int count = 0;
int Dataadcx;
char tampungx[100];
int Dataadcy;
char tampungy[100];


void tampil(){

          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 0; 
       
         Dataadcx = read_adc(0);
    
         itoa(Dataadcx,tampungx);    
         lcd_gotoxy (0,1);
         lcd_puts(tampungx);
        
     if ((Dataadcx > 350 )||( Dataadcx < 300)){
       PORTB.6 = 1;
      }
      else{
       PORTB.6 = 0;
      }
 
         Dataadcy = read_adc(1);
    
         itoa(Dataadcy,tampungy);    
         lcd_gotoxy (5,1);
         lcd_puts(tampungy);
        
         delay_ms(1000);
     
       
      if (PIND.2 == 0){     
      tampil();     
      }
     

     
     
}


void main(void)
{
// Declare your local variables here

// 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

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

// 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=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// 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=FFh
// 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
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

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

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

PORTD.2 = 1;

// LCD module initialization
lcd_init(16);

while (1)
      {
     
      if (PIND.2 == 0){     
      lcd_clear();
      tampil();     
      }
     
     
     Dataadcx = read_adc(0);
     Dataadcy = read_adc(1);
    
           
    // Place your code here
    if((val=getchar()) == 2) {
    bytesread = 0;
    while(bytesread<11) {
      val = getchar();
      if((val==3)) {
        break;
      }
  
      code[bytesread] = val;
      bytesread++;
    }
   
    if(bytesread == 11) {
      lcd_clear();
      lcd_puts(code);
                    
    }        
   
          if( strcmp(code,pass) == 0 )
          {
          count++;
         
          if(count > 5 ){
          count = 1;
          }
         
         
          if(count == 1){
        
         Dataadcx = read_adc(0);
    
         itoa(Dataadcx,tampungx);    
         lcd_gotoxy (0,1);
         lcd_puts(tampungx);
 
         Dataadcy = read_adc(1);
    
         itoa(Dataadcy,tampungy);    
         lcd_gotoxy (5,1);
         lcd_puts(tampungy);
        
         delay_ms(1000);
 
          tampil();
         
         }
         
          if(count == 2){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 1 ON");
         
          PORTB.2 = 1;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 3){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 2 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 1;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 4){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 3 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 1;
          PORTB.5 = 0;
          }          
         
          if(count == 5){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 4 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 1;
         
          }
         
         
          } 
          else {
            lcd_gotoxy(0,1); 
            lcd_puts("salah");        
          }
          
         
         
           if( strcmp(code,passx) == 0 )
          {
          count++;
         
          
          if(count > 5 ){
          count = 1;
          }
         
         
          if(count == 1){
        
         Dataadcx = read_adc(0);
    
         itoa(Dataadcx,tampungx);    
         lcd_gotoxy (0,1);
         lcd_puts(tampungx);
 
         Dataadcy = read_adc(1);
    
         itoa(Dataadcy,tampungy);    
         lcd_gotoxy (5,1);
         lcd_puts(tampungy);
        
         delay_ms(1000);
 
          tampil();
         
         }
         
          if(count == 2){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 1 ON");
         
          PORTB.2 = 1;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 3){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 2 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 1;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 4){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 3 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 1;
          PORTB.5 = 0;
          }          
         
          if(count == 5){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 4 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 1;
         
          }
         
         
          } 
          else {
            lcd_gotoxy(0,1); 
            lcd_puts("salah");        
          }
            
    bytesread = 0;
  }
             
      };
}





e. VIDEO HASILNYA









 

Mengakses RFID ID-12 atau RDM6300 / RDM630 Menggunakan CV AVR ( Code Vision AVR )

Mengakses RFID ID-12 atau RDM6300 / RDM630 Menggunakan CV AVR ( Code Vision AVR )


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengekses RFID RDM630 / RDM6300 atau RFID ID-12, sebenarnya keduanya hampir sama output datanya maka dari itu pakai program ini bisa untuk kedua reader tersebut, yang perlu diketahui yaitu output dari reader ID-12 sebelum di filter adalah misal |||F6000657A780## maka dari itu harus dilakukan filter, jadi data dimulai dari pointer nomer 3 sampai 12. Untuk RFID RDM630 atau RDM6300 sama saja tergantung output yang didapat dan dilakukan filterisasi.untuk lebih jelasnya berikut adalah skema dan programnya. 



a. Minimum System 





b. RFID Reader ID-12





c. RFID Reader RDM6300 / RDM630





d. Program CV AVR 

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

Project :
Version :
Date    : 6/23/2016
Author  : NeVaDa
Company : HP InfoTech s.r.l.
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>

#include <delay.h>
#include <string.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int 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 ADCW;
}

// Declare your global variables here

unsigned char pass[13] = "6F0085C0173";
unsigned char code[13];
int val = 0;
int bytesread;


void main(void)
{
// Declare your local variables here

// 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

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

// 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=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// 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=FFh
// 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
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

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

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

// LCD module initialization
lcd_init(16);

while (1)
      {
     
    // Place your code here
    if((val=getchar()) == 2) {
    bytesread = 0;
    while(bytesread<11) {
      val = getchar();
      if((val==3)) {
        break;
      }
  
      code[bytesread] = val;
      bytesread++;
    }
   
    if(bytesread == 11) {
      lcd_clear();
      lcd_puts(code);
                    
    }        
   
          if( strcmp(code,pass) == 0 )
          {
          lcd_gotoxy(0,1); 
          lcd_puts("benar");
          } 
          else {
            lcd_gotoxy(0,1); 
            lcd_puts("salah");        
          }
 
   
    bytesread = 0;
  }

             
      };
}




e. VIDEO HASILNYA











MEMBUAT RUNNING LED /LED BERJALAN DENGAN PENGATUR KECEPATAN

MEMBUAT RUNNING LED /LED BERJALAN DENGAN PENGATUR KECEPATAN


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat RUNNING LED atau LED BERJALAN menggunakan rangkaian analog. IC yang dipakai adalah IC yang banyak dijual dipasaran, jadi sangatlah mudah untuk membuatnya, kecepatan RUNNING atau berjalannya led bisa diatur menggunakan potensiometer 200K. aplikasi dari alat ini yaitu untuk hiasan toko atau rumah saat hari raya atau bisa juga untuk hiasan dinding. untuk lebih jelasnya berikut adalah skema rangkaiannya. Untuk simulasi PROTEUS dari rangkaian ini bisa di download di LINK berikut.





a. Rangkaian / Skema Alat




 *Ket : Ganti Resistor 200K dengan potensiometer 200k atau 500k




b. Cara Penggunaan Alat

           Untuk menggunakan alat ini pertama yaitu berikan power supply 5v ke rangkaian, kemudian led akan berjalan searah, untuk mengatur kecepatannya, putar potensiometer perlahan dan lihat apa yang terjadi pada gerakan led. semakin diputar maka akan semakin cepat gerakannya, begitu sebaliknya, jika tombol ditekan maka gerakan led akan berhenti. 
 



c. VIDEO







 

Mengakses Rotary Encoder Untuk Menghitung Putaran Motor DC / DINAMO

Mengakses Rotary Encoder Untuk Menghitung Putaran Motor DC / DINAMO


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk menghitung jumlah putaran motor dc, fungsi dari alat ini yaitu untuk kontrol putaran motor, jadi misal ingin menggerakkan motor hanya 3 putaran atau 10 putaran saja bisa. sensor yang digunakan adalah rotary encoder, sebenarnya selain sensor rotary encoder juga bisa yaitu optocoupler atau sensor limit switch. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Minimum System




b. Rotary Encoder




c. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 11059200

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2

Cursor Off
Cls

Ddrb.0 = 1

Cha Alias Pind.2
Chb Alias Pind.3

Config Cha = Input
Config Chb = Input
Config Pind.6 = Output

Config Int0 = Falling
Const Debouncetime = 1

Dim Wtime As Byte
Dim Encounter As Integer
Dim Xn As Integer
Xn = 0

Set Chb

On Int0 Getencoder

Cls

Wtime = 100
Encounter = 0

Enable Interrupts
Enable Int0

Do
 Portb.0 = 1

  Set Portd.6
  Waitms Wtime
  Upperline
  Lcd "counter: " ; Encounter ; "     "
  Lowerline
  Lcd "putaran = " ; Xn

  If Encounter > 19 Then
  Incr Xn
  End If

  Reset Portd.6
  Waitms Wtime

Loop

Getencoder:
  Waitms Debouncetime
  If Cha = 0 Then
    If Chb = 0 Then Incr Encounter Else Decr Encounter
  End If
  Gifr = 64
Return

End





d. Program CV AVR (Code Vision AVR)

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

Project :
Version :
Date    : 6/30/2016
Author  : NeVaDa
Company : HP InfoTech s.r.l.
Comments:


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

#include <mega16.h>
#include <stdlib.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>



#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int 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 ADCW;
}

// Declare your global variables here
int pulsa;
int putaran;
int dataadc;

char count[10];
char countx[10];

char temp[10];

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
if(PIND.3==0)
{

if(PIND.2==0)
{
pulsa++;
}
else {
pulsa--;
}


if(pulsa > 19){
 putaran++;
 pulsa = 0;
 }
}
}




void main(void)
{
// Declare your local variables here

// 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

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

// 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=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// 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=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=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 Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
      {
      
     
      PORTB.0 = 1;
     
      dataadc = read_adc(0);
     
       lcd_gotoxy(0,0);
       lcd_putsf("arus= ");
       itoa(dataadc,temp);
       lcd_puts(temp);
      
       lcd_gotoxy(0,1);
       lcd_putsf("Putaran= ");
       itoa(putaran,count);
       lcd_puts(count);
//       lcd_putsf(" ");
//       itoa(pulsa,countx);
//       lcd_puts(countx);
      
      };
}




e. VIDEO HASILNYA














Membuat Detektor Gas LPG Menggunakan SMS GATEWAY SIM800L dan TGS2610 ARDUINO

Membuat Detektor Gas LPG Menggunakan SMS GATEWAY SIM800L dan TGS2610 ARDUINO


         Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai sebuah alat untuk detektor Gas LPG dengan output buzzer dan led, jadi alat ini sebenarnya adalah prototipe yang mana jika sensor TG2610 atau gas LPG terkena gas maka dia akan mengirimkan tegangan ke Arduino, data tegangan tersebut akan langsung diolah Arduino lalu akan memerintahkan modul SIM800L agar sms ke nomer yang tercantum. yang harus diperhatikan pada alat ini yaitu waktu heating atau pemanasan sensor sekitar 3 menit agar didapat hasil yang bagus serta akurat dan juga VCC untuk modul SIM800L maksimal 4.2 volt / 4.4 volt. untuk lebih jelasnya berikut adalah skema dan gambar rangkaiannya.




a. Arduino UNO





b. LED + Buzzer





c. SIM800L Module





d. Buck Converter





e. TGS2610 LPG Sensor





f. Program Arduino IDE

//VCC modul SIM800L = 4.0 volt
// Sambungkan Pin RX - TX Modul SIM800L ke pin 2 dan 3 Arduino Uno
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

int led1 = 5;
int led2 = 6;
int led3 = 7;
int buzzer = 4;
int mark =0;

void setup() {
 
     Serial.println("GSM Shield testing.");
    
     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(buzzer, OUTPUT);
 
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, LOW);
  digitalWrite(buzzer, HIGH);
  delay(10000);
   
}

// the loop routine runs over and over again forever:
void loop() {

  int sensorValue = analogRead(A0);

  Serial.println(sensorValue);
 
      if((sensorValue >= 100) && ( mark == 0 ))  {
       
          //Enable this two lines if you want to send an SMS.
          if (sms.SendSMS("085726496645", "BAHAYA ADA KEBOCORAN GAS LPG"))
          Serial.println("\nSMS sent OK");
         
            digitalWrite(led1, HIGH);
            digitalWrite(led2, LOW);
            digitalWrite(led3, LOW);
            digitalWrite(buzzer, LOW);
           
            delay(1000);
            mark = 1;
                  
     }
           
     if((sensorValue < 100) && (mark == 0)) {
    
            digitalWrite(led1, LOW);
            digitalWrite(led2, LOW);
            digitalWrite(led3, HIGH);
            digitalWrite(buzzer, HIGH);
    
     }
    
    if((sensorValue < 100) && (mark == 1)) {
           
            mark = 0;
    
            digitalWrite(led1, LOW);
            digitalWrite(led2, LOW);
            digitalWrite(led3, HIGH);
            digitalWrite(buzzer, HIGH);
    
     }

}




g. VIDEO HASILNYA












Membuat Alat Deteksi AIR / Water Detector / Rain Detector

Membuat Alat Deteksi AIR atau Hujan  / Water Detector / Rain Detector


       Pada kesempatan kali saya akan membahas mengenai bagaimana cara membuat alat untuk mendeteksi hujan atau air, jadi saat alat terkena sentuhan air, alat akan mengeluarkan alarm atau bunyi suara dari buzzer. alat ini difungsikan untuk mendeteksi adanya banjir dan juga curah hujan di suatu daerah. pengembangan alat ini sangatlah banyak seperti bisa digunakan untuk early warning rain fall, jadi saat hujan turun alat akan memberikan kode atau bunyi, dan masih banyak contoh lainnya. untuk lebih jelasnya berikut adalah skemanya.



a. Skema / Rangkaian Alat





b. VIDEO HASILNYA











Membuat Alat Deteksi Gerakan / MOTION DETECTOR Menggunakan Sensor PIR

Membuat Alat Deteksi Gerakan / MOTION DETECTOR Menggunakan Sensor PIR


        Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk mendeteksi gerakan atau motion detector, alat ini biasanya digunakan untuk mendeteksi adanya manusia yang sedang berjalan baik itu mendekat maupun menjauh. sensor ini mendeteksi dua unsur, yaitu unsur panas tubuh manusia dan yang kedua yaitu gerakan, jadi jika benda yang bergerak tersebut tidak memiliki panas, maka sensor tidak akan mendeteksi biarpun ia bergerak, sebaliknya juga jika benda yang memiliki panas tidak bergerak atau diam, maka sensor juga tidak akan mendeteksi keberadaannya. Alat ini jika mendeteksi adanya gerakan maka akan mengaktifkan relay dan menghidupkan lampu. untuk lebih detailnya berikut skemanya.



a. Skema Rangkaian





b. VIDEO HASILNYA











Mengakses DAC0808 ( Digital to Analog Converter ) / DAC

Mengakses DAC0808 ( Digital to Analog Converter ) / DAC


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses DAC0808 menggunakan skema lain yaitu skema tanpa OP-AMP. kelebihan dari rangkaian ini yaitu maksimal tegangan bisa 5v dan minimal tegangan bisa -1 volt. tapi bisa juga menggunakan OP-AMP seperti yang tertera di datasheet. untuk lebih jelasnya berikut adalah skemanya.



a. Skema Rangkaian





b. Gambar Alat





c. VIDEO HASILNYA











Mengakses Wireless Modul RF LINK 433MHZ Menggunakan Arduino

Mengakses Wireless Modul RF LINK 433MHZ Menggunakan Arduino


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses modul wireless yang sangat umum dijumpai di masyarakat atau di toko elektronik, yaitu RF LINK 433MHZ. modul ini sangat terjangkau sekali harganya dan juga jarak tempuh sensor ini mencapai 500 meter open area.sensor ini ada dua tipe yaitu transmitter dan receiver. untuk mengetahui lebih lanjut berikut adalah program dan skemanya.

download library: LINK DOWNLOAD




a. Arduino Mega




b. Modul Wireless RF-Link 433MHZ




c. Skema Receiver




d. skema transmitter





e. Program Arduino Terima Data

// RF 433MHz Modules (Receiver Circuit)

#include <RH_ASK.h>
// Serial Peripheral Interface (SPI)
#include <SPI.h>               // Needed to compile

RH_ASK driver;

void setup () {
  Serial.begin (9600);         // Debugging ONLY
  if (!driver.init ())
    Serial.println ("init failed");
}

void loop () {
  uint8_t buf [12];
  uint8_t buflen = sizeof (buf);
  
  if (driver.recv (buf, &buflen)) {        // Non-blocking
    int i;
    // Message with a good cheksum received, dump it
    Serial.print ("Message: ");
    Serial.println ((char*) buf);
  }
}




f. Program Arduino Kirim Data

// RF 433MHz Modules (Transmitter Circuit)

#include <RH_ASK.h>
// Serial Peripheral Interface (SPI)
#include <SPI.h>               // Needed to compile

RH_ASK driver;

void setup () {
  Serial.begin (9600);         // Debugging ONLY
  if (!driver.init ())
    Serial.println ("init failed");
}

void loop () {
  const char *msg = "Hello World!";
  driver.send ((uint8_t *) msg, strlen (msg));
  driver.waitPacketSent ();
  delay (1000);
}




g. Program Arduino Transmitter Untuk ON/OFF 

#include "Wire.h"
#include <LiquidCrystal.h>
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

RH_ASK driver;

int relay = 8;

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
  Serial.begin(9600);
  pinMode(relay, OUTPUT);
  digitalWrite(relay, LOW); 

  if (!driver.init())
     Serial.println("init failed");

}

void loop() {
 
  int sensorpir = analogRead(A0); 
 
  int sensorValue = analogRead(A7);
  float voltage = sensorValue * (5.0 / 1023.0);
  float suhu = voltage * 100 ;

  if (sensorpir > 100) {
  
  digitalWrite(relay, HIGH); 
   
  lcd.setCursor(0, 0);
  lcd.print("Terdeteksi");
  lcd.setCursor(0, 1);
  lcd.print("HIDUPKAN AC");   
  delay(500);
  lcd.clear();
 
  } else {
 
  if (suhu  >= 20){
    //on AC 2
    const char *msg = "255";
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
   
  }
  if (suhu <= 18){
    //OFF AC 2
    const char *msg = "999";
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
   
  }
 
  lcd.setCursor(0, 0);
  lcd.print("suhu = ");
  lcd.print(suhu);
  lcd.setCursor(0, 1);
  lcd.print("PIR = ");
  lcd.print(sensorpir); 
  delay(500);
  lcd.clear();
 
  }
 
   
 
}





h. Program Arduino Terima data ON/OFF

#include "Wire.h"
#include <LiquidCrystal.h>
#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;


LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int relay = 8;

String a;

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
  Serial.begin(9600);
  pinMode(relay, OUTPUT);
  digitalWrite(relay, LOW);

 if (!driver.init())
         Serial.println("init failed");
 
}

void loop() {

  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  float suhu = voltage * 100 ;

  lcd.setCursor(0, 0);
  lcd.print("suhu = ");
  lcd.print(suhu);

 uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      // Message with a good checksum received, dump it.
      Serial.print("Suhu: ");
      Serial.println(suhu);
      Serial.print("Message: ");
      Serial.println((char*)buf);

     lcd.setCursor(0, 1);
     lcd.print((char*)buf);
    
     int nilai = atoi((char*)buf);
    
 //    if (nilai < 500 ){
 //      digitalWrite(relay, HIGH);
 //    }
    
 //    if (nilai > 500 ){
 //      digitalWrite(relay, LOW);
 //    }
    
           
    }

  delay(500);
  lcd.clear();
 

}

 



 i. VIDEO HASILNYA