[Share] Sensor reading on android and send to UDP network
#1
snippet ini bertujuan untuk membaca sensor di android dan mengirimnya via UDP dengan multithreading yang sangat cepat.

snippet ini bukan untuk end user, melainkan di kembangkan ke keperluan lain seperti controller interface via network, atau mungkin drone controller with android gyroscope (memungkinkan, karena rentang waktu kecil sehingga latency juga kecil - karena multithreading)

dan juga algoritma untuk menyingkirkan noise (untuk stabilitas) yang dihasilkan oleh sensor ada di dalamnya.

android client :
Code:
import android
import time
import socket

import androidhelper
droid = androidhelper.Android()

UDP_IP = "192.168.1.100" #server IP
UDP_PORT = 5005

dt = 10 #100ms between sensings
endTime = 20000 #sample for 3000ms
timeSensed=0
droid.startSensingTimed(1,dt)
while timeSensed <= endTime:
    sensor = droid.sensorsReadAccelerometer().result
    orientation = droid.sensorsReadOrientation().result
    #print sensor
    time.sleep(dt/1000.0)
    timeSensed+=dt
    sock = socket.socket(socket.AF_INET, # Internet
             socket.SOCK_DGRAM) # UDP
    sock.sendto( str(sensor+orientation) , (UDP_IP, UDP_PORT))

droid.stopSensing()

untuk server :

Code:
# testing number: 5
# @gunslinger_
from sys import stdout, exit
from decimal import Decimal
from math import fabs
from datetime import datetime
import time
import SocketServer

class read_sensor_udp(SocketServer.BaseRequestHandler):
    # Ctrl+C to kill every spawned threads
    daemon_threads = True
    # faster for rebinding
    allow_reuse_address = True
    def setup(self):
        self.before = 0
        self.noise = 1.5
        self.noise_f = 0.5
        self.invert = True # If you want invert control
        self.mouse_debug = True
    
    def handle(self):
        global delta_z, delta_x, curr_x, curr_y
        data = self.request[0].strip()
        socket = self.request[1]
        start = time.clock()
        ndata = data.replace("[","")
        ndata = data.replace("]","")
        ndata = ndata.split(", ")        
        try:
            # feedback x sensor
            ndata[0] = ndata[0].replace("[","")
            ndata[0] = ("%.4f" % float(ndata[0]))
            # feedback z sensor
            ndata[1] = ("%.4f" % float(ndata[1]))
            
            z_sensor = ndata[1]
            x_sensor = ndata[0]
            
            range_z = fabs(float(z_sensor)-float(delta_z)) # used here
            range_x = fabs(float(x_sensor)-float(delta_x)) # used here
            if range_z > self.noise_f:
                if delta_z < z_sensor:
                    goto_y = curr_y + 1
                    curr_y = goto_y
                elif delta_z > z_sensor:
                    goto_y = curr_y - 1
                    curr_y = goto_y
                print "Selisih_Z -> %.4f" % float(range_z)
                print "Selisih_X -> %.4f" % float(range_x)
                
                print "Sensor_Z -> %.4f" % float(z_sensor)
                print "Sensor_X -> %.4f" % float(x_sensor)
                delta_z = z_sensor # and updated here
                delta_x = x_sensor
                
                if self.invert:
                    value_move_y = ( int(int(float(z_sensor)*10)) )
                    value_move_x = ( int(int(float(x_sensor)*10)) )
                end = time.clock()
                print "Timing Latency -> %.2gs" % (end-start)
                
            delta_z = z_sensor # or updated here
            delta_x = x_sensor # or updated here
                
        except KeyboardInterrupt:
            exit(1)

if __name__ == "__main__":
    UDP_IP = "192.168.1.100"
    UDP_PORT = 5005
    delta_z, delta_x = 0, 0
    curr_y, curr_z = 100, 100
    
    HOST, PORT = UDP_IP, UDP_PORT
    server = SocketServer.UDPServer((HOST, PORT), read_sensor_udp)
    server.serve_forever()

#2
wah keren guns ... ini dapat banyak pencerahan gw ...trims yoo
FOLLOW @DutaLinux
for more question and sharing about security and Opensource only

#3
(01-22-2014, 10:22 AM)zee eichel Wrote: wah keren guns ... ini dapat banyak pencerahan gw ...trims yoo

yoo sama2 om bro zee

#4
mantap bro,,,

#5
maaf om,ane kurang ngerti nih, bisa tolong lebih dijelaskan ? hehe Tongue

#6
Big Grin masih bingung ane minta pencerahan dunk um
Every Second, Every Minutes, Every Hours, Every Days Its Never End

#7
(01-25-2014, 06:12 AM)ekawithoutyou Wrote: Big Grin masih bingung ane minta pencerahan dunk um

singkatnya, ini buat membaca orientasi yang menggunakan acceclometer kemudian dikirim ke server untuk dibaca menggunakan protokol udp biar cepet, tapi connectionless.

ane pikir udp emang tepat untuk membaca sensor ini karena emang butuh ke-aktual an lebih akurat Big Grin

CMIIW

#8
:-bd:-bd:-bd nice one bro , keep up

#9
wah boleh nih..rencana ane mau bikin drone...
pangkalan bun sweet city

#10
wew keren om, ini buat baca aja ya om? klo ditambah gps bisa buat "maenan" nih Big Grin






Users browsing this thread: 1 Guest(s)