This wiki has been archived and made read-only.
For up-to-date information about TkkrLab and it's projects please visit our main website at tkkrlab.nl.

Difference between revisions of "Quadcopter"

From

Jump to: navigation, search
(Created page with "{{Project |Name=quadcopter |Initiator=Michielbrink en Vondel |Sumary=awesome quadcopter with a lot of sensors }} tekst")
 
Line 4: Line 4:
 
|Sumary=awesome quadcopter with a lot of sensors
 
|Sumary=awesome quadcopter with a lot of sensors
 
}}
 
}}
tekst
+
 
 +
 
 +
== De quadcopter ==
 +
om een beetje een indruk te krijgen in de quadcopter hebben we hier wat leuke futures staan:
 +
* gyroscoop
 +
* acceleratiemeter
 +
* kompas
 +
* in alle hoeken ultrasoon sensoren
 +
* besturing via wifi
 +
* live webcam stream
 +
* volgens een reactie op de gekochte motortjes: bij 1,3Kg, 75km/h
 +
* servo om webcam op en neer te bewegen.
 +
* accu meting door middel van een adc naar uart programma, geprogrammeerd in een msp430g2553.
 +
* een stm32f3 discovery board als brein.
 +
* een raspberry pi voor de webcam stream en de aansturing en nog meer leuke dingen.
 +
* gps (ooit in de verre toekomst)
 +
* en nog veel meer!!
 +
 
 +
 
 +
== de firmware voor de msp430g2553 (adc naar uart) ==
 +
 
 +
(alle vakjes horen bij elkaar maar heb even geen zin om uit te zoeken hoe ik dat in 1 van krijg)
 +
    #include <msp430.h>
 +
    #include <stdbool.h>
 +
    #include <stdio.h>
 +
 
 +
    #define GND        BIT4
 +
    #define DAT        BIT5
 +
    #define RXD     BIT1
 +
    #define TXD     BIT2
 +
 
 +
    char buffer[4];
 +
    int adc_new;
 +
    int adc_old;
 +
    char * adc_string;
 +
 
 +
    void uart_putc(unsigned char c);
 +
    void uart_puts(const char *str);
 +
    int adc_read();
 +
    void Delay_ms(unsigned int ms);
 +
 
 +
    int main(void)
 +
    {
 +
        //msp430 init
 +
        WDTCTL = WDTPW + WDTHOLD;        // Stop WDT
 +
        BCSCTL1 = CALBC1_1MHZ;            // Set DCO to 1MHz
 +
        DCOCTL = CALDCO_1MHZ; 
 +
       
 +
        //pin init
 +
        P1SEL  = RXD + TXD;                   
 +
        P1SEL2 = RXD + TXD;
 +
        P1DIR |= GND;
 +
        P1OUT&=~GND;
 +
       
 +
        //uart init
 +
        UCA0CTL1 |= UCSSEL_2;                    // SMCLK
 +
        UCA0BR0 = 104;                            // 1MHz 9600
 +
        UCA0BR1 = 0;                              // 1MHz 9600
 +
        UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
 +
        UCA0CTL1 &= ~UCSWRST;                    // Initialize USCI state machine
 +
        IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt 
 +
       
 +
        //adc init
 +
        ADC10CTL1 = INCH_5 + ADC10DIV_3 ;        // Channel 5, ADC10CLK/4
 +
        ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;  //Vcc & Vss as reference
 +
        ADC10AE0 |= BIT5;                        //P1.4 ADC option
 +
       
 +
        __enable_interrupt();
 +
       
 +
        Delay_ms(1);                  // Wait for ADC Ref to settle
 +
       
 +
        while(1)                   
 +
        {
 +
            Delay_ms(500); 
 +
            adc_new = adc_read()*10/1023;
 +
            if(adc_new != adc_old)
 +
            {
 +
                sprintf(adc_string, "%d",adc_new);
 +
                uart_puts(adc_string);
 +
                adc_old = adc_new;
 +
            } 
 +
        }
 +
    }
 +
 
 +
    //uart
 +
 
 +
    void uart_putc(unsigned char c)
 +
    {
 +
        while (!(IFG2&UCA0TXIFG));              // USCI_A0 TX buffer ready?
 +
        UCA0TXBUF = c;                    // TX
 +
    }
 +
 
 +
    void uart_puts(const char *str)
 +
    {
 +
        while(*str) uart_putc(*str++);
 +
    }
 +
 
 +
    //adc
 +
 
 +
    int adc_read()
 +
    {                 
 +
        ADC10CTL0 |= ENC + ADC10SC;            // Sampling and conversion start
 +
        __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled
 +
        return(ADC10MEM);
 +
    }
 +
 
 +
    __attribute__((interrupt(ADC10_VECTOR)))
 +
    void ADC10_ISR(void)
 +
    {
 +
      __bic_SR_register_on_exit(CPUOFF);        // Return to active mode
 +
    }
 +
 
 +
    //delay
 +
 
 +
    void Delay_ms(unsigned int ms)
 +
    {
 +
        while(ms--)
 +
        {
 +
        __delay_cycles(1000);
 +
        }
 +
    }

Revision as of 19:49, 12 June 2013

Project: {{{ProjectName}}}
Quadcopter Picture.jpg
Name {{{ProjectName}}}
Initiator {{{Owner}}}
Status {{{Status}}}
Skills {{{Skillz}}}
Summary {{{Summary}}}


De quadcopter

om een beetje een indruk te krijgen in de quadcopter hebben we hier wat leuke futures staan:

  • gyroscoop
  • acceleratiemeter
  • kompas
  • in alle hoeken ultrasoon sensoren
  • besturing via wifi
  • live webcam stream
  • volgens een reactie op de gekochte motortjes: bij 1,3Kg, 75km/h
  • servo om webcam op en neer te bewegen.
  • accu meting door middel van een adc naar uart programma, geprogrammeerd in een msp430g2553.
  • een stm32f3 discovery board als brein.
  • een raspberry pi voor de webcam stream en de aansturing en nog meer leuke dingen.
  • gps (ooit in de verre toekomst)
  • en nog veel meer!!


de firmware voor de msp430g2553 (adc naar uart)

(alle vakjes horen bij elkaar maar heb even geen zin om uit te zoeken hoe ik dat in 1 van krijg)

   #include <msp430.h>
   #include <stdbool.h>
   #include <stdio.h>
   #define GND         BIT4
   #define DAT         BIT5
   #define RXD		    BIT1
   #define TXD		    BIT2
   char buffer[4];
   int adc_new;
   int adc_old;
   char * adc_string;
   void uart_putc(unsigned char c);
   void uart_puts(const char *str);
   int adc_read();
   void Delay_ms(unsigned int ms);
   int main(void)
   {
       //msp430 init
       WDTCTL = WDTPW + WDTHOLD;         // Stop WDT
       BCSCTL1 = CALBC1_1MHZ;            // Set DCO to 1MHz
       DCOCTL = CALDCO_1MHZ;  
       
       //pin init
       P1SEL  = RXD + TXD;                     
       P1SEL2 = RXD + TXD;
       P1DIR |= GND;
       P1OUT&=~GND;
       
       //uart init
       UCA0CTL1 |= UCSSEL_2;                     // SMCLK
       UCA0BR0 = 104;                            // 1MHz 9600
       UCA0BR1 = 0;                              // 1MHz 9600
       UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
       UCA0CTL1 &= ~UCSWRST;                     // Initialize USCI state machine
       IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt  
       
       //adc init
       ADC10CTL1 = INCH_5 + ADC10DIV_3 ;         // Channel 5, ADC10CLK/4
       ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;  //Vcc & Vss as reference
       ADC10AE0 |= BIT5;                         //P1.4 ADC option
       
       __enable_interrupt();
       
       Delay_ms(1);                   // Wait for ADC Ref to settle
       
       while(1)                    
       { 
           Delay_ms(500);  
           adc_new = adc_read()*10/1023;
           if(adc_new != adc_old)
           {
               sprintf(adc_string, "%d",adc_new);
               uart_puts(adc_string);
               adc_old = adc_new;
           }   
       }
   }
   //uart
   void uart_putc(unsigned char c)
   {
       while (!(IFG2&UCA0TXIFG));              // USCI_A0 TX buffer ready?
       UCA0TXBUF = c;                    		// TX
   }
   void uart_puts(const char *str)
   {
       while(*str) uart_putc(*str++);
   }
   //adc
   int adc_read()
   {                  
       ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
       __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled
       return(ADC10MEM);
   }
   __attribute__((interrupt(ADC10_VECTOR)))
   void ADC10_ISR(void) 
   {
     __bic_SR_register_on_exit(CPUOFF);        // Return to active mode
   }
   //delay
   void Delay_ms(unsigned int ms)
   {
       while(ms--)
       {
       __delay_cycles(1000);
       }
   }