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.

Quadcopter

From

Revision as of 19:49, 12 June 2013 by Michiel brink (Talk | contribs)

Jump to: navigation, search
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);
       }
   }