Difference between revisions of "Quadcopter"
From
(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 | ||
}} | }} | ||
− | + | ||
+ | |||
+ | == 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}}} | |
---|---|
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); } }