Search
ব্যাটারি চার্জ ইন্ডিকেটর
by : A.R | March 10, 2018 | 1 comments Skill Level: Beginner
Summary:
ATmega16 মাইক্রোকন্ট্রোলারভিত্তিক ব্যাটারি চার্জ ইন্ডিকেটর।

কখনও চলতে চলতে হঠাৎই রোবট থেমে যায়। কখনও পূর্ব ঘটনা ছাড়াই প্রজেক্টের ডিসপ্লে হয় অন্ধকার। এমন ঘটনা ঘটলে কম্পিটিশনের মাঝখানে কপাল চাপড়ানো আর প্রজেক্ট দেখাতে গিয়ে টিচারের বকা খাওয়া খুবই স্বাভাবিক ব্যপার। অথচ, প্রজেক্টে ব্যাটারির চার্জ দেখার  একটি ছোটখাটো ব্যবস্থা থাকলে এইসব বিড়ম্বনায় আর পড়তে হয় না। ব্যাটারি চার্জশূন্য হয়ে যাবার আগেই জরুরীভিত্তিতে চার্জ দিয়ে ফেলা যায়। এই এক্সপেরিমেন্টে আমরা খুব সাধারন একটি ব্যাটারি চার্জ ইন্ডিকেটর তৈরী করব।

 

প্রয়োজনীয় যন্ত্রপাতি

পরিমাণ

ATmega16A

1

Breadboard

1

Male to female jumpers

13

Male to male jumpers

5

1

Ceramic capacitor 104

1

Resistor 10K

2

Any 3.7V battery

1

 

এবং প্রোগ্রামিং এর জন্য যেকোনো এভিআর অথবা ইউনিভার্সাল প্রোগ্রামার

সার্কিট কানেকশনঃ

নিচের চিত্র অনুযায়ী সার্কিট কানেকশন সম্পন্ন করুন।

 

 

কোডঃ কোডটি লিখতে ব্যবহার করা হয়েছে AVR studio 4. AVR studio তে কোডটি লিখে কম্পাইল করুন এবং মাইক্রোকন্ট্রোলারে আপলোড করুন।

 

/*
 * ADCintro.c
 *
 * Created: 5/5/2015 5:37:45 PM
 *  Author: tlia
 */ 
#define F_CPU 8000000UL 
#include <avr/io.h>
#include <util/delay.h>

void main(void)  
{
    volatile int hi,low;
    volatile float adc_value;
	       
    DDRA=0x00;         // Declaring PORTA as input
    DDRC=0xFF;        // Declaring PORTB as output
    DDRD=0xFF;        // Declaring PORTD as output
	
    ADCSRA|=(1<<ADEN);        // ADC enable
	
    ADMUX|=(1<<REFS0);       // Voltage Reference Selection,Internal 2.56V Voltage Reference with external capacitor 
                                                 at AREF pin

    ADMUX|=(1<<REFS1);
    
    ADCSRA|=((1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0));   // ADC Prescaler Selections,selecting division factor=128
     
    while(1)
    {
	ADCSRA|=(1<<ADSC);      // ADC Start Conversion
        
        low = ADCL;        // Store lower eight bits of ADC conversion in 'low'
        hi = ADCH;         // Store upper two bits of ADC conversion in 'hi'
        adc_value = (hi<<8)+low; //Shift 'hi' 8 steps right and add 'low' with it
		
		adc_value = (((2.56*adc_value)/1023.0)*2.0); //Analog to digital conversion, Precision=5/1023.   
		_delay_ms(100);   
		
		if(adc_value<2.7)
        {
         PORTC=0;
         PORTD=0;
        }
        
        else if(adc_value>=2.7 && adc_value<2.8)
        {
        PORTD=0b00000010;
        PORTC=0b00000000;
        }
        
        else if(adc_value>=2.8 && adc_value<2.9)
        {
         PORTD=0b00000011;
         PORTC=0b00000000;
         }
         else if(adc_value>=2.9 && adc_value<3.0)
         {
         PORTD=0b00000011;
         PORTC=0b10000000;
         }
		 
		 else if(adc_value>=3.0 && adc_value<3.1)
         {
         PORTD=0b00000011;
         PORTC=0b11000000;
         }
		 
		 else if(adc_value>=3.1 && adc_value<3.2)
         {
         PORTD=0b00000011;
         PORTC=0b11100000;
         }
		 
		  else if(adc_value>=3.2 && adc_value<3.3)
         {
         PORTD=0b00000011;
         PORTC=0b11110000;
         }
		 
		  else if(adc_value>=3.3 && adc_value<3.4)
         {
         PORTD=0b00000011;
         PORTC=0b11111000;
         }
		 
		  else if(adc_value>=3.4 && adc_value<3.5)
         {
         PORTD=0b00000011;
         PORTC=0b11111100;
         }
		 
		 else if(adc_value>=3.5 && adc_value<3.7)
         {
         PORTD=0b00000011;
         PORTC=0b11111110;
         }
		 
		 
         else if(adc_value>=3.7)
         {  PORTC=0xFF;
            PORTD=0b00000011;
         }  
        
    }
}

 

 

 

 

 

 


এই এক্সপেরিমেন্টে PA0 অর্থ্যাৎ ADC0 পিন ব্যবহার করা হয়েছে। এডিসির রেফারেন্স ভোল্টেজ হিসেবে আমরা সিলেক্ট করছি ইন্টারন্যাল ২.৫৬ ভোল্ট। এই মোডে রেফারেন্স ভোল্টেজের চেয়ে বেশি ভোল্ট এডিসি পিনে ইনপুট দিলে আমরা সঠিক রিডিং পাব না। আমাদেরকে খেয়াল রাখতে হবে এডিসি পিনে প্রযুক্ত ভোল্টেজ যেন ২.৫৬ ভোল্টের বেশি না হয়। এইজন্য আমরা দুটি ১০ কিলোওহম রেজিস্টর সিরিজ করে একটি ভোল্টেজ ডিভাইডার সার্কিট বানিয়ে নিয়েছি।  

যেহেতু এই এক্সপেরিমেন্টে আমরা একটি ৩.৭ ভোল্ট ব্যাটারির চার্জ পর্যবেক্ষন করব সেহেতু আমরা সেই অনুযায়ী রেজিস্টরের মান সিলেক্ট করেছি এবং সেই অনুযায়ী কোডে এডিসি ভ্যালুকে  মাল্টিপ্লাইয়িং ফ্যাকটর 2 দিয়ে গুন করেছি। ব্যাটারিতে পরিপূর্ণ চার্জ থাকা অবস্থায় বার গ্রাফের সবগুলো সেগমেন্ট জ্বলে থাকবে। চার্জ কমার সাথে সাথে সেগমেন্টগুলোও নিভতে শুরু করবে। ব্যাটারির ভোল্টেজ ২.৭ ভোল্ট থেকে ৩ ভোল্টের মধ্যে থাকা অবস্থায় শুধুমাত্র নিচের তিনটি সেগমেন্ট জ্বলে থাকবে। ২.৭ ভোল্টের নিচে নামলে আর কোনো সেগমেন্ট জ্বলবে না।

আমাদের সেটআপটি দেখতে ছিল এরকম।


Login to post comments.
anon
Nargisakhter | Apr 4,2018 at 06:23 PM
How do i upload the code to atmega16a
anon
A.R | Apr 5,2018 at 03:08 PM
The answer is already given in the parts list. AVR microcontrollers are programmed by AVR programmers/trainer boards. Universal programmers can be also used. Please see the series from the beginning.


Copyright © 2012-13 Techshop Bangladesh. All rights reserved.