Jumat, 20 Juni 2014

Membuat Sensor Anti Maling

Pengalaman saya waktu rumah saya Kemalingan sangat menggelikan.
Karena Saya Sering iseng Dengan Mengutak-atik Bahan Elektronik, saya pun membuat suatu rangkaian anti maling yg cukup unik. Rangkaian ini bekerja berdasarkan Sensor, terdiri dari 2 bagian.
Yaitu Bagian Pemancar Infrared Dan Bagian Penerima, jika Sensor tersebut di lewati/terhalang benda/manusia maka sensor tersebut akan berbunyi. Pengalaman saya waktu rumah saya Kemalingan sangat menggelikan. Waktu itu maling sudah masuk kerumah, saat melintasi sensor alarm pun berbunyi, Malingnya kesibukan mencabut cok listrik disekitarnya tetapi alarm tidak mau mati juga. Akhirnya terperogok oleh orang tua saya, Malingnya langsung melarikan diri. Sementara dalam waktu yg sama Orangtua Saya pun Lari masuk kekamar Dan mengunci kamar sambil berteriak maling.
Orang Tua Saya Lari Karena Tidak tahu berapa banyak maling yg masuk kerumah, jika satu masih bisa dilawan tetapi kalau ada dua atau tiga bagaimana melawannya ( pikir orang tua saya ) lebih baik lari mencari tempat yg aman.
Beruntung Sensor yg saya pasang sangat berguna. Jika Teman-teman Mau membuatnya sendiri nanti saya posting rangkaiannya. Gampang kok Cara membuatnya. Modalnya tidak sampai Rp.100.000 jika merakit sendiri.
Adapun komponen yg diperlukan adalah sebagai berikut :
Gambar sensor pemancar dilihat dari atas
Gambar sensor pemancar dilihat dari bawah
Komponen Rangkaian Pemancar
R1………………………….220k
C1……………………..….1 Kpf
C2………………………100 Kpf
IC……………………..MC-1455
D1,2,3,4………………Infra Red
Gambar Sensor Penerima Dilihat dari atas
Gambar Sensor Penerima dilihat daribawa
Komponen Rangkaian Penerima
R1………………………..220k
R2………………..….….470k
R3…………………..…….33k
R4, 7…………………….180k
R5, 11………………….….47k
R6………………………….22k
R8…………….…..470 ohm
R9, 10……………………….1k
R12 ……………………….4.7k
R13………………………….1 K
C1………………………4,7Kpf
C2……………………….10Kpf
C3……………..……….33Kpf
C4…………..……………10 uf
C5, 6………………….100 uf
Tr1, 2, 3, 4……….…..C828
Tr5………………….….C1815
D1…………………….…..LED
D2, 3, 4, 5, 6……..1N4148
D7………………….Zd 5.1 V
Relay…………….….6 V / 12 V
Sensor …………..… TV/Vcd
Ini adalah gambar yg sudah jadi
yang saya penggang di tangan adalah bagian dari penerima dilihat dari depan dan dari belakang.
gambar dibawah ini  adalah rangkaian penerima dan tempatnya.
ini adalah gambar dari rangkaian pemancar infra red yg sudah jadi
dan yg terakhir ini adalah gambar rangkaian yg sudah siap di pasang.
banyak ya !!  maklum dapat orderan buat pasang di rumah wallet.
sampai disini dahulu ya…
sorry kalau ada yg menunggu terlalu lama update yg terbaru dari saya.  Soalnya terlalu sibuk bekerja.
Selamat Mencoba !!!  jika tidak mengerti silakan tinggalkan pesan atau saran dari pembaca.
Mudah-mudahan gue balas…!!
12-06-2013
Ternyata banyak juga peminatnya, Oke ini hasil yg sudah saya perbaiki dan saya perbaharui sensor penerima  & sensor pemancar infra rednya yang uda gak pakai ic mc 1455 tapi pake rangkaian flip flop 2 Tr
SENSOR PENERIMA
sensor pemancar di lihat dari bawah
Di lihat dari bawah
sensor pemancar dari atas ok polossensor pemancar dari atas ok
Di lihat dari atas.
untuk komponen pemancarnya adalah sebagai berikut :
Tr ……………………..c 828  x2
R …………………….. 22 k    x2
c …………………….. 33nF  x2
R (yg bulat ) ……… 470 ohm   lihat gambar
Led  …………………. Lampu led ( jangan pasang terbalik ya…. )
tegangan masuk 12 volt
out nya pakai lampu infrared 4 bh di seri ( ingat di seri ) dan jangan pasang terbalik ( salah satu terbalik infra red gak bakalan berfungsi )
kalau ada yg mau pesan siap jadi juga bisa tapi order dulu ya soalnya buatnya manual gak pake mesin he..he..he…….
siap jadi   Rp 375.000   lain ongkir
hubungi email saya   sakuraqnet@gmail.com
oke sampai disini aja dulu,
mohon maaf kalau ada comment yg gak sempat saya balas
Salam dan TerimaKasih.

Program LFR

LFR Program membutuhkan bantuan dari tiga perpustakaan: - 

     LED lib (untuk mengaktifkan / menonaktifkan lima LED indikator) 
     Motor lib (untuk mengontrol kecepatan dan arah putaran motor) 
     ADC lib (untuk mengkonfigurasi dan menggunakan konverter analog ke digital dari ATmega8) 

Kode ini ditulis menggunakan bahasa C sehingga Anda perlu merasa nyaman dengan hal-hal berikut. 

     Sintaks bahasa C. 
     Konsep perpustakaan. 
     Sumber File, File Header dll 
     Preprocessor, Compiler dan Linker, apa yang mereka dan apa yang mereka lakukan dan bagaimana menggunakannya. 

IDE (Integrated Development Environment) yang merupakan software suite yang memungkinkan Anda memasukkan, mengedit, kompilasi, proyek debug dan mengelola file dalam proyek. IDE yang kita gunakan adalah Atmel Studio 6. Pengantar terbaru untuk AS6 sini. 

Sebuah proyek baru dibuat seperti yang dijelaskan dalam tutorial di atas dan dikonfigurasi maka file library LED, Motor dan ADC perlu ditambahkan ke proyek. Menambahkan sebuah perpustakaan untuk proyek AS6 saat ini dijelaskan dalam perpustakaan manual.
 
 /*
 * LFRM8.c
 *
 * Created: 5/26/2012 7:59:45 PM
 *  Author: Avinash Gupta
 */

#include <avr/io.h>
#include <util/delay.h>

#include "lib/adc/adc.h"
#include "lib/motor/motor.h"
#include "lib/led/led.h"

#define SENSOR_THRES 800

//Map Sensor Number to ADC Channel
#define SENSOR1 0
#define SENSOR2 1
#define SENSOR3 2
#define SENSOR4 3
#define SENSOR5 4

//Gloabal varriables
float pGain = 200;   //Proportional Gain
float iGain =  0.2;  //Integral Gain
float dGain =  120;  //Differential Gain
int delay = 10;

int32_t eInteg = 0;  //Integral accumulator
int32_t ePrev  =0;      //Previous Error


void  DelayMs(uint8_t ms);
float ReadSensors();
float PID(float cur_value,float req_value);


float control;
float s;

int main(void)
{
   //Initialize Motors subsystem.
   MotorInit();

   //Initialize LED subsystem
   LEDInit();

   //Initialize Analog to Digital Converter (ADC)
   InitADC();


    while(1)
    {
      //Previous Sensor Reading
      float sprev;

      //Take current sensor reading
      //return value is between 0 to 5
      //When the line is towards right of center then value tends to 5
      //When the line is towards left of center then value tends to 1
      //When line is in the exact center the the valeue is 3
        s=ReadSensors();

      //If line is not found beneath any sensor, use last sensor value. 
      if(s==0xFF)
      {
         s=sprev;
      }

      //PID Algorithm generates a control variable from the current value
      //and the required value. Since the aim is to keep the line always
      //beneath the center sensor so the required value is 3 (second parameter)
      //The first argument is the current sensor reading.
      //The more the difference between the two greater is the control variable.
      //This control variable is used to produce turning in the robot.
      //When current value is close to required value is close to 0.
      control = PID(s,3.0);

      //Limit the control
      if(control > 510)
         control = 510;
      if(control < -510)
         control = -510;

      if(control > 0.0)//the left sensor sees the line so we must turn right
      {
         if(control>255)
            MotorA(MOTOR_CW,control-255);
         else
            MotorA(MOTOR_CCW,255-control);

         MotorB(MOTOR_CW,255);
      }
      if(control <= 0.0)//the right sensor sees the line so we must turn left
      {
         if(control<-255)
            MotorB(MOTOR_CCW,-(control+255));
         else
            MotorB(MOTOR_CW,255+control);

         MotorA(MOTOR_CCW,255);
      }

      //Delay     
      DelayMs(delay);

      sprev=s;
    }
}

void DelayMs(uint8_t ms)
{
   uint8_t i;
   for(i=0;i<ms;i++)
   {
      _delay_ms(1);
   }
}

//Implements PID control
float PID(float cur_value,float req_value)
{
  float pid;
  float error;

  error = req_value - cur_value;
  pid = (pGain * error)  + (iGain * eInteg) + (dGain * (error - ePrev));

  eInteg += error;                  // integral is simply a summation over time
  ePrev = error;                    // save previous for derivative

  return pid;
}

float ReadSensors()
{
   uint16_t eright,right,middle,left,eleft;
   uint8_t     sensor1,sensor2, sensor3, sensor4,sensor5;

   float avgSensor = 0.0;

   eright=ReadADC(SENSOR5);
   if(eright>SENSOR_THRES)//Right black line sensor
   {
      sensor5 = 1;
      LEDOn(5);
   }
   else
   {
      sensor5 = 0;
      LEDOff(5);
   }

   // Read analog inputs
   right=ReadADC(SENSOR4);
   if(right>SENSOR_THRES)//Right black line sensor
   {
      sensor4 = 1;
      LEDOn(4);
   }
   else
   {
      sensor4 = 0;
      LEDOff(4);
   }

   middle=ReadADC(SENSOR3);
   if(middle>SENSOR_THRES)// Middle black line sensor
   {
      sensor3 = 1;
      LEDOn(3);
   }
   else
   {
      sensor3 = 0;
      LEDOff(3);
   }

   left=ReadADC(SENSOR2);
   if(left>SENSOR_THRES)// Left black line sensor
   {
      sensor2 = 1;
      LEDOn(2);
   }
   else
   {
      sensor2 = 0;
      LEDOff(2);
   }

   eleft=ReadADC(SENSOR1);
   if(eleft>SENSOR_THRES)// Left black line sensor
   {
      sensor1 = 1;
      LEDOn(1);
   }
   else
   {
      sensor1 = 0;
      LEDOff(1);
   }


   if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==0)
   {
      return 0xFF;
   }

   // Calculate weighted mean
   avgSensor = (float) sensor1*1 + sensor2*2 + sensor3*3 + sensor4*4 + sensor5*5 ;
   avgSensor = (float) avgSensor / (sensor1 + sensor2 + sensor3 + sensor4 + sensor5);

   return avgSensor;
}