Translate

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