اطلاعیه

Collapse
No announcement yet.

راهنمایی برای ساخت التراسونیک!

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راهنمایی برای ساخت التراسونیک!

    با سلام خدمت همه
    من میخام یه فاصله سنج درست کنم که فاصله بین 0 تا حداقل 60(بیشتر هم شد اشکال نداره) سانت با دقت یک سانت را اندازه بگیرم :job:
    میخاستم بدونم که اگه سنسور رو بگیرم میشه همچین فاصله ای رو اندازه بگیرم یا نه؟ :nerd:

    نمیخام ماژول مثلا srf05 رو که دیتا شیتش زده این فاصله رو جواب میده بگیرم!!!میخام مستقیم با سنسور کار کنم :job:
    سنسورش همچین دقتی داره؟؟؟
    اگ نه شماها چه سنسوری رو پیشنهاد میکنید؟ :read:

    پیشاپیش مرسی از راهنماییاتون :icon_razz:
    در اخر هم پروژه رو کامل قرار میدم رو سایت

    #2
    پاسخ : راهنمایی برای ساخت التراسونیک!

    برای این میزان سنسور ir sharp کاملا جواب میده

    دیدگاه


      #3
      پاسخ : راهنمایی برای ساخت التراسونیک!

      این شماتیکیه که من برای کارم استفاده می کنم البته زیاد خوب کار نمی کنه ولی مطمن هستم این که سیستم زیاد کار نمی کنه به خاطر برنامه است که دارم روش کار می کنم
      [i
      برنامه رو هم اگه خواستید براتون می ذارم
      البته همانطور که گفتم زیاد درست کار نمی کنه شاید به کمک هم درستش کردیم
      به هر حال من در خدمت هستم

      دیدگاه


        #4
        پاسخ : راهنمایی برای ساخت التراسونیک!

        در مورد برنامه هم من فعلا وجود شی در فاصله تا 1:50 متری برایم مهم است و فاصله شی هم اهمیت ندارد
        برنامه ای که نوشتم به ضمیمه گذاشتم
        البته حتما نیاز به اصلاح داره
        کد:
        [left]
        /*****************************************************
        
        
        Chip type        : ATmega16
        Program type      : Application
        AVR Core Clock frequency: 7.372800 MHz
        Memory model      : Small
        External RAM size    : 0
        Data Stack size     : 256
        *****************************************************/
        #define RXB8 1
        #define TXB8 0
        #define UPE 2
        #define OVR 3
        #define FE 4
        #define UDRE 5
        #define RXC 7
        
        #define FRAMING_ERROR (1<<FE)
        #define PARITY_ERROR (1<<UPE)
        #define DATA_OVERRUN (1<<OVR)
        #define DATA_REGISTER_EMPTY (1<<UDRE)
        #define RX_COMPLETE (1<<RXC)
        
        
        #define EN PORTB.0
        #define TRIG PORTB.1
        #define PLS PORTC.7
        #define RED PORTA.0
        #define GRN PORTA.1
        #define DIR_485 PORTD.3
        
        #include <mega16.h>
        
        #include <delay.h>
        #include <stdio.h>
        unsigned char ctime,address,rx_state,sbuff;
        unsigned char rx_buf[40];
        //float dist_val;
        unsigned int a;
        unsigned int t;
        eeprom unsigned char e2_max;
        eeprom unsigned char e2_min;
        eeprom unsigned char e2_tse2;
        
        //*******************************************88
        unsigned char key_check(void);
        void detect(void);
        
        //********************************************
        
        void main(void)
        {
        
          PORTA=0x00;
          DDRA=0x03;
        
        
          PORTB=0x00;
          DDRB=0x02;
        
        
          PORTC=0xff;
          DDRC=0x80;
        
        
          PORTD=0x00;
          DDRD=0x08;
        
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          // Mode: Normal top=0xFF
          // OC0 output: Disconnected
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;
        
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // 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
        ASSR=0x00;
        TCCR2=0x03;
        TCNT2=0xfe;
        OCR2=0x00;
        
        // External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: Any change
        // INT1: Off
        // INT2: Off
          GICR|=0x40;
          MCUCR=0x03;
          MCUCSR=0x00;
          GIFR=0x40;
        
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x40;
        
         // USART initialization
        // Communication Parameters: 8 Data, 1 Stop, No Parity
        // USART Receiver: On
        // USART Transmitter: On
        // USART Mode: Asynchronous
        // USART Baud Rate: 9600
        UCSRA=0x00;
        UCSRB=0x98;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x2f;
        
          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;
        
          // ADC initialization
          // ADC disabled
          ADCSRA=0x00;
        
          // SPI initialization
          // SPI disabled
          SPCR=0x00;
        
          // TWI initialization
          // TWI disabled
          TWCR=0x00; 
          #pragma optsize-
        //WDTCR=0x19;
        //WDTCR=0x09;
        #ifdef _OPTIMIZE_SIZE_
        #pragma optsize+
        #endif 
        
        if(e2_tse2!=0xaa)
        {
          e2_max=0x20;
          e2_min=2;
          e2_tse2=0xaa;
        }
        
          #asm("sei"); 
          delay_ms(100);    
          UDR=0x43;
          //delay_ms(800);    
          //sbuff=1;
          ///**********************************************************8
          while (1)
           {
             if(t<e2_max)
             { 
               if((a>40))
               {
                if((t>=e2_min))
                 {
                  RED=1;
                  GRN=0;   
                  #asm("wdr")
                 }
                else
                { 
                  RED=0;
                  GRN=1;
                } 
              }
            } 
            // UDR=address;
             delay_ms(100);
             #asm("wdr")
        
             address=key_check(); 
             if(sbuff==1) detect();
           }
        }
        /***************************** SER RUT(S) ************************************/ 
        /****************************************************************************/
        interrupt [TIM2_OVF] void timer2_ovf_isr(void)
        {
          ctime++;  
          a++;
          if(a<36)//36
          {
            if(ctime>1)
            {
              ctime=0;
              PLS=1;
              t=0;
             // if(t>=2) t--;
            } 
            else  PLS=0;
          } 
          else if(a<3312)
            PLS=0;
          if(a>=30312) a=0;  
        	TCNT2=0xFe;
        }
        //**************************************************
        // External Interrupt 0 service routine
        interrupt [EXT_INT0] void ext_int0_isr(void)
        {
        //
        #asm("cli")
        if((a>40)&&(a<4500))
        t=(unsigned char)(a*0.053175);
        #asm("sei");
        }
        //*****************************************88
        
        [/left]

        دیدگاه

        لطفا صبر کنید...
        X