. -. 
, . . . , - (61 %), (27 %) (12 %). . , 2/3 , 5%. «».
DIY- -?

- , 80 . 120 200 , . , 0,5 /. .
, , .
- -.

.

 -
- -
- X-Prize
X-Prize.
2000$. :)
The registration deadline is 30 June, 2016 (11:59 PM UTC/4:59 PM PST). The registration fee is $2,000.00 USD.
 , 
ROV'. (Remotely operated underwater vehicle).
Arduino nano + L293D + Bluetooth + 3 + Power bank ( -, 3 ). Power bank Samsung Galaxy S3 . Arduino Bluetooth.
« , , »
Android. Android, .
! , Arduino. . Samsung Galaxy S3 .
. . . . , .
! «Android GPS», « Android GPS» , Android Studio.
SL4A. Android, Python. , , 
.
SL4A Python
Android, . , .
QR-.
SL4A . Python .
Python . QPython3
QPython3, .
: 
http://habrahabr.ru/post/134184/, 9999 Android- (, 46136):
$ adb forward tcp:9999 tcp:46136
:
$ AP_PORT=9999
android.py Python', , , , . helloWorld Android- Python:
>>>import android
>>>droid = android.Android()
>>>droid.makeToast(«Hello, world!»)
android, droid, API Android'a. «Hello, World!» .
, API, SL4A.
.

. Google.maps . . .
[55.671110, 37.686625],[55.668448, 37.675467],[55.660847, 37.671776],[55.654649, 37.671175]
DIY- andoid 70 ?

import math,android,time
coordmas = [[55.671110, 37.686625],[55.668448, 37.675467],[55.660847, 37.671776],[55.654649, 37.671175]]
droid = android.Android()
droid.startSensingTimed(1,200)
droid.startLocating(5000, 30)
def getgps():
	locs = droid.getLastKnownLocation()
	gpspos = locs.result["gps"]
	return gpspos
def distazim(llat1,llong1,llat2,llong2):
	rad=6372795
	
	lat1=llat1*math.pi/180.
	lat2=llat2*math.pi/180.
	long1=llong1*math.pi/180.
	long2=llong2*math.pi/180.
	cl1=math.cos(lat1)
	cl2=math.cos(lat2)
	sl1=math.sin(lat1)
	sl2=math.sin(lat2)
	delta=long2-long1
	cdelta=math.cos(delta)
	sdelta=math.sin(delta)
	y=math.sqrt(math.pow(cl2*sdelta,2)+math.pow(cl1*sl2-sl1*cl2*cdelta,2))
	x=sl1*sl2+cl1*cl2*cdelta
	ad=math.atan2(y,x)
	dist=ad*rad
	x=(cl1*sl2)-(sl1*cl2*cdelta)
	y=sdelta*cl2
	z=math.degrees(math.atan(-y/x))
	if(x<0):
		z=z+180.
	z2=(z+180.)%360.-180.
	z2=-math.radians(z2)
	anglerad2=z2-((2*math.pi)*math.floor((z2/(2*math.pi))))
	angledeg=(anglerad2*180.)/math.pi
	return [dist,angledeg]
def servoangle(azdiff):
	if azdiff>10 or azdiff<-10:
		deg=azdiff
		if deg>90:
			deg=90
		if deg<-90:
			deg=-90
	return deg
gpspos=getgps()
oldlat = gpspos["latitude"]
oldlon = gpspos["longitude"]
for c in range(len(coordmas)):
	
	curcoord=coordmas[c]
	targetlat=curcoord[0]
	targetlon=curcoord[1]
	darange=11;
	while darange>10:
		gpspos=getgps()
		curlat = gpspos["latitude"]
		curlon = gpspos["longitude"]
		time.sleep(0.5)
		da=distazim(curlat,curlon,targetlat,targetlon)
		darange = da[0]
		dazimut = round(da[1])
		pol=droid.sensorsReadOrientation()
		pol2=pol.result
		turn = round(pol2[0])
		turn = (-turn) *180/ 3.2
		azdiff=turn-dazimut
		deg=servoangle(azdiff)
	oldlat = curlat
	oldlon = curlon
import math,android,time
coordmas = [[55.671110, 37.686625],[55.668448, 37.675467],[55.660847, 37.671776],[55.654649, 37.671175]]
droid = android.Android()
droid.startSensingTimed(1,200)
droid.startLocating(5000, 30)
def getgps():
	locs = droid.getLastKnownLocation()
	gpspos = locs.result["gps"]
	return gpspos
def distazim(llat1,llong1,llat2,llong2):
	rad=6372795
	
	lat1=llat1*math.pi/180.
	lat2=llat2*math.pi/180.
	long1=llong1*math.pi/180.
	long2=llong2*math.pi/180.
	
	cl1=math.cos(lat1)
	cl2=math.cos(lat2)
	sl1=math.sin(lat1)
	sl2=math.sin(lat2)
	delta=long2-long1
	cdelta=math.cos(delta)
	sdelta=math.sin(delta)
	
	y=math.sqrt(math.pow(cl2*sdelta,2)+math.pow(cl1*sl2-sl1*cl2*cdelta,2))
	x=sl1*sl2+cl1*cl2*cdelta
	ad=math.atan2(y,x)
	dist=ad*rad
	
	x=(cl1*sl2)-(sl1*cl2*cdelta)
	y=sdelta*cl2
	z=math.degrees(math.atan(-y/x))
	if(x<0):
	z=z+180.
	z2=(z+180.)%360.-180.
	z2=-math.radians(z2)
	anglerad2=z2-((2*math.pi)*math.floor((z2/(2*math.pi))))
	angledeg=(anglerad2*180.)/math.pi
	return [dist,angledeg]
def servoangle(azdiff):
	if azdiff>10 or azdiff<-10:
		deg=azdiff
		if deg>90:
			deg=90
		if deg<-90:
			deg=-90
	return deg
gpspos=getgps()
oldlat = gpspos["latitude"]
oldlon = gpspos["longitude"]
for c in range(len(coordmas)):
	
	curcoord=coordmas[c]
	targetlat=curcoord[0]
	targetlon=curcoord[1]
	
	darange=11;
	while darange>10:
		
		gpspos=getgps()
		curlat = gpspos["latitude"]
		curlon = gpspos["longitude"]
		time.sleep(0.5)
		
		da=distazim(curlat,curlon,targetlat,targetlon)
		darange = da[0]
		dazimut = round(da[1])
		
		pol=droid.sensorsReadOrientation()
		pol2=pol.result
		turn = round(pol2[0])
		
		turn = (-turn) *180/ 3.2
		
		azdiff=turn-dazimut
		
		deg=servoangle(azdiff)
		
	
	oldlat = curlat
	oldlon = curlon
Python For Android. ,:
droid.batteryStartMonitoring() — o .
droid.batteryStopMonitoring()
droid.batteryGetHealth() — (1-, 2-, 3 — , 4 — , 5 — , 6 — )
droid.batteryGetStatus() — (1 — , 2 — , 3 — , 4 — , 5 — )
droid.batteryGetTechnology()
droid.readBatteryData() — .
droid.batteryGetTemperature()
droid.batteryGetVoltage()
droid.batteryGetLevel()
Bluetooth:
droid.checkBluetoothState() — Bluetooth
droid.toggleBluetoothState() — True , False
droid.bluetoothAccept() —
droid.bluetoothActiveConnections() — ,
droid.bluetoothGetConnectedDeviceName()
droid.bluetoothMakeDiscoverable() —
droid.bluetoothStop()
Wi-Fi:
droid.checkWifiState() — Wi-Fi
droid.toggleWifiState() — True , False
droid.wifiStartScan()
droid.wifiGetScanResults()
droid.wifiGetConnectionInfo()
:
droid.checkAirplaneMode() — « »
droid.checkRingerSilentMode() —
droid.checkScreenOn() —
droid.toggleRingerSilentMode() —
droid.toggleAirplaneMode()
droid.toggleVibrateMode()
:
droid.getMaxMediaVolume()
droid.getMaxRingerVolume()
droid.getMediaVolume()
droid.getRingerVolume()
droid.getScreenBrightness()
droid.getScreenTimeout()
droid.getVibrateMode()
:
droid.setMediaVolume()
droid.setRingerVolume()
droid.setScreenBrightness()
droid.setScreenTimeOut()
 :
- Bluetooth arduino.
- arduino . .
- .
- . , . .
- , ,
P.S.: 
? . — . - ! 
. , - .
:
- 3 . . . -. .