Ker bo to “delavski” flight controller, ne bom investiral v drage GPS module, ampak bom uporabil kar imam doma. Torej… imam en cheap bluetooth modul, kateregea bi povezal na DIY MWC. Problem je, ker je serijski in prepocasen. Ta serial signal je treba spremenit v i2C. Poleg tega bi pa dodal se lcd 🙂
Tole je..par evrov vredni Bluetooth gps modul.
odprt izgleda takole. Tole na levi je bluetooth modul… tega ne potrebujem, zato ga bom odstranil. Lahko bi ga uporabil naprej za komunikacijo s programom na računalniku, samo je range preslab. Kako ga odstranit? Hint: olfa nož
Spodaj so neuporabljeni pini. Z multimetrom je brez problema poiskat vdd, gnd, tx in rx. Rx ne potrebujem, ker tiny-gps ne pošilja nič v gps, zato ga niti ne bom uporabil.
Žičke z leve: GND, TX, VCC 5v.
TinyGPS (https://github.com/wertarbyte/tiny-gps).
Tiny-GPS je po defaultu omogočen v MultiWii v2.2, zato bom uporabil to verzijo. Potrebno je spremenit ustrezno v config.h in naložit na MWC.
/* GPS protocol
NMEA – Standard NMEA protocol GGA, GSA and RMC sentences are needed
UBLOX – U-Blox binary protocol, use the ublox config file (u-blox-config.ublox.txt) from the source tree
With UBLOX you don’t have to use GPS_FILTERING in multiwii code !!! */#define NMEA
//#define UBLOX//#define INIT_MTK_GPS // initialize MTK GPS for using selected speed, 5Hz update rate and GGA & RMC sentence
//#define GPS_PROMINI_SERIAL 57600 // Will Autosense if GPS is connected when ardu boots
/* I2C GPS device made with an indeedent ATTiny[24]313 + GPS device and
optional sonar device. https://github.com/wertarbyte/tiny-gps/ */
/* get GPS data from Tiny-GPS */
#define TINY_GPS
/* get sonar data from Tiny-GPS */
//#define TINY_GPS_SONAR
Verzija 2.3 uporablja i2c-gps-nav, ki ne deluje z mojim GPSom.
Ta FW omogoca vse zgoraj nasteto, ampak je treba dodat se en dodatni mikrokontroler, da spremeni serijski komunikacijo v I2c. Načeloma bi delalo tudi če bi MultiWii priklopil na serijski port na atmegi, samo potem odpade bluetooth, pa še sama (ne)hitrost GPS bi bila najbrz problem. Ker imam odvec en attiny2313, bom uporabil tega. Ce bi imel 4313, bi lahko zraven dodal se sonar in/ali opticni senzor.
Najprej je treba omogocit potrebne zadeve v config.h. Jaz trenutno potrebujem samo GPS in LED indikator za GPS fix. Nastavit je treba tudi s kakšno hitrostjo naj bere iz GPSa. Moj GPS dela na 38400 baudrate. Ni ravno najhitrejse, ampak bo.
#define USE_GPS 1
//#define USE_SONAR 1 //Ga ne potrebujem
//#define USE_OPTICAL 1 //tudi ne
#define LED_FIX_INDICATOR 0 //imam, povezana za PD5
Ce imas GPS z nastavljivim baudratom, pa ce si sprememb ne zapomni, lahko TinyGPS nastavis da konfiguracijski stavek poslje po privzetem baudratu, ostalo pa po novem (lahko bi nalotal EEPROM na sam gps 😉 ).
Konfiguracijski stavek, ki spremeni hitrost na 115200
#define GPS_INIT_STRING “$PMTK300,200,0,0,0,0*2F\r\n$PMTK251,115200*1F\r\n”
in ga poslje po 9600
#define GPS_INIT_BAUD 9600
Ko je vse perfekt, je treba compilat. “make” bo OK 🙂
:tiny-gps-master spikey$ make
——– begin ——–
avr-gcc (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Size before:
tiny-gps.elf :
section size addr
.text 1798 0
.data 12 8388704
.bss 76 8388716
.stab 7152 0
.stabstr 5815 0
.comment 17 0
.debug_aranges 128 0
.debug_info 820 0
.debug_abbrev 80 0
.debug_line 386 0
Total 16284Size after:
tiny-gps.elf :
section size addr
.text 1798 0
.data 12 8388704
.bss 76 8388716
.stab 7152 0
.stabstr 5815 0
.comment 17 0
.debug_aranges 128 0
.debug_info 820 0
.debug_abbrev 80 0
.debug_line 386 0
Total 16284——– end ——–
Potem pa vse skupaj zapect na tinyja. Najlazje je kar z arduinoISP. Torej, ArduinoISP na arduinota, potem pa povezat pine 10-11-12-13 na attiny 1-17-18-19. Attiny pin 10 na gnd in attiny pin 20 na +5v. Lahko bi uporabil tudi USBtinyISP… Potem pecemo 20minut na 220C 🙂
Za USBtinyISP:
avrdude -c usbtiny -p t2313 -b 19200 -U flash:w:tiny-gps.hex -U lfuse:w:0xe4:m -U hfuse:w:0xdb:m
Za ArduinoISP:
avrdude -c avrisp -p t2313 -P /dev/tty.usbmodem411 -b 19200 -U flash:w:tiny-gps.hex -U lfuse:w:0xe4:m -U hfuse:w:0xdb:m
dev port je treba spremenit na tapravga. Če ne bo hotel zapisat, al pa javljal napake, je najbrz sam FW prevelik za 2313. 2313 lahko prebavi SAMO eno napravo in LED. Za več, bo treba nabavit 4313, ki ima več prostora za flashat.
Ko imamo tinyja spečenega, ga lahko povežemo na GPS, da vidimo če dela. Takole se poveže:
.--v--. -| |- VCC GPStx <--| T |--> I²C SCL -| i |--> Optical CSEL Optical DIO <--| n |--> I²C SDA Optical CLK <--| y |- Sonar Trigger <--| 4 |- -| 3 |- -| 1 |- LED -| 3 |- GND -| |--> Sonar Echo `-----´
Pri meni to izgleda takole. Za sam test MultiWii ni potreben, attiny deluje avtomatsko. Tule ledica gori, tako da GPS fix ocitno je 🙂
Še malo testiranja in igranja z VFDjem 😀 V sobi:
Aja, tiny-GPS pošilja podatke v bytih. Pošlje lahko 26 bytov, zadnjih šest samo če obstajata sonar in optika za pretok zraka. Ok, tega ni potrebno vedt, če bo šla zadeva na helikopter hehe.
Copy-paste iz originalne strani:
byte content 0 bit flags (from lsb to msb): 0 NMEA signal is valid (1<<NMEA_RMC_FLAGS_STATUS_OK) 1 latitude alignment North (1<<NMEA_RMC_FLAGS_LAT_NORTH) 2 longitude alignment East (1<<NMEA_RMC_FLAGS_LON_EAST) 1 day 2 month 3 year (2 digits) 4 hour 5 minute 6 second 7 latitude degrees 8 latitude minutes 9/10 latitude fractions of a minute, BCD format 11 longitude degrees 12 longitude minutes 13/14 longitude fractions of a minute, BCD format 15/16 altitude in m (signed, 16 bit) 17 altitude fractions of metres, BCD format 18 signal quality 19 number of satellites used Additionaly, a sonar device can be connected to PD2 (trigger) and PD6/ICP (echo): when configured, the controller continuously uses the ultrasonic sensor to measure the distance to any obstacle in direction of the device, which is offered via TWI and presented in cm. 20/21 distance in cm (unsigned, 16 bit) An optical flow sensor can also be fitted to the controller via PA0 (CLK) and PA1 (DIO); the detected movement is accumulated in the optical_data_t struct accessible via TWI, the registers are cleared once the entire nav_data_t struct is read. 22/23 movement in x direction (signed, 16 bit) 24/25 movement in y direction (signed, 16 bit)
OK OK, tole je vse kul, ampak kaj pa na quadcopterju? Let’s see…
MultiWiiGUI. GPS omogočen, prikaže tudi vse kar je potrebno… torej… deluje 🙂
Čimprej bo potrebno poizkusit GPS HOME in GPS HOLD. Najbolj natančno sicer ne bo, bo pa za igrat se. HOLD me ne zanima najbolj, predvsem uporabljam HOME, sploh če je copter predaleč 🙂
Za vsak slučaj sem si naročil 3 tiskana vezja, da se mi ne bo potrebno ubadat s kablovjem…