User Tools

Site Tools


quadricone-python-urbaines

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
quadricone-python-urbaines [2013/03/10 21:23]
91.230.85.2 sQNMtsLpQFifhcIQ
quadricone-python-urbaines [2013/04/22 17:09] (current)
zoza old revision restored
Line 1: Line 1:
-You can send in a mail order form to us and we can post to youThe order form can be downloaded from our wbtsieeAt the same time, if you wish you can go to our member office at Sham Shiu Po to buySend me an email James+====== quadricone urbaines py ====== 
 + 
 + 
 +<code python>​ 
 +import serial, subprocess, glob, time, csv, random 
 + 
 + 
 +### assign arduino'​s serial port 
 +usbport=glob.glob("/​dev/​tty*"​)[0] 
 +### set up serial baud rate 
 +ser = serial.Serial(usbport,​ 9600, timeout=1) 
 + 
 + 
 +### the moving part ------------------- 
 + 
 +class Servo: 
 +    def __init__(self,​ servoID): 
 +        self.servoID=servoID 
 +        self.stop() # when initiated, stop! 
 + 
 +    def move(self, speed): 
 +        self.speed=speed 
 +        if (0 <= self.speed <= 180): 
 +            ser.write(chr(255)) 
 +            ser.write(chr(self.servoID)) 
 +            ser.write(chr(self.speed)) 
 +        else: 
 +            print "Servo position must be an integer between 0 and 180.\n"​ 
 + 
 +    def stop(self):​ 
 +        self.move(90) 
 +        print "​stop"​ 
 + 
 +    def down_slow(self):​ 
 +        self.move(100) 
 +        print "down slow"​ 
 + 
 +    def down(self):​ 
 +        self.move(120) 
 +        print "​down"​ 
 + 
 +    def up(self): 
 +        self.move(80) 
 +        print "​up"​ 
 + 
 +## initiate the morots and put them all in the STOP (90) position 
 +## alternative 
 + 
 +Servos = ["​raja","​gaja","​vlaja",​ "​zlaja"​] 
 +for i,servo in enumerate(Servos):​ 
 +    globals()[servo]=Servo(i+1) 
 +    globals()[servo].stop() 
 + 
 +random.shuffle(Servos) 
 + 
 +how_many_times = [0, 0, 0, 0] 
 + 
 + 
 +### the scanning part ----------------- 
 + 
 +# airodump-ng is running and logging the results into csv file 
 +# with the following command: sudo airodump-ng -o csv -w manuf mon0 
 +# subprocess looks for the last edited csv file in current folder 
 +# this file is parsed by the csv module ​to find the number of data packets that have passed through the network since the last check  
 + 
 +csvs=subprocess.Popen("​ls -t1 *csv | head -1", shell=True, stdout=subprocess.PIPE,​ stderr=subprocess.PIPE) 
 +csv_last=csvs.communicate()[0].strip() 
 + 
 +key_value=('​ # IV') # look up this value in the scan dump 
 + 
 +def lookup(dump):​ 
 +    datas=[] 
 +    results=[] 
 +    scan=open(dump,​ "​rU"​) 
 +    next(scan) 
 +    scanDict=csv.DictReader((line.replace('​\0',''​) for line in scan), delimiter=','​) 
 +    for adict in scanDict: 
 +        if adict.has_key(key_value) ​and adict.get(key_value)!=None:​ 
 +            try: 
 +                datas.append(int(adict.get(key_value))) 
 +            except: 
 +                pass 
 +    datas.sort(reverse=True) 
 +    for i in range(4): 
 +        results.append(datas[i]) 
 +    return results 
 + 
 +### the main loop ---------------------- 
 + 
 +packet_list=lookup(csv_last) 
 +print '​packet_list',​ packet_list 
 +#print '​servo_list',​ servo_list 
 +time.sleep(3) 
 + 
 +while True: 
 +    new_packet_list=lookup(csv_last) 
 +    print "////////////////////////"​ 
 +    print " " 
 +    print '​new_packet_list'​new_packet_list 
 +    print '​calculating the movements...'​ 
 +    for i,servo in enumerate(Servos):​ 
 +        print '​servo',​ servo 
 +        packet_diff=new_packet_list[i]-packet_list[i] 
 +        print '​packet_diff:',​ packet_diff 
 +        ​if packet_diff==0:​ 
 +            print '​packetdiff:',​ packet_diff,​ '; ​go back up' 
 +            globals()[servo].stop() 
 +            time.sleep(0.3) 
 +            globals()[servo].stop() 
 +        elif 0 < packet_diff < 7: 
 +            if how_many_times[i]<​=6:​ 
 +                print '​packetdiff:',​ packet_diff,​ '; up, little'​ 
 +                globals()[servo].down_slow() 
 +                time.sleep(0.5) 
 +                globals()[servo].stop() 
 +                how_many_times[i]+=0.5 
 +            else: 
 +                globals()[servo].stop() 
 +                time.sleep(0.3) 
 +                how_many_times[i]-=2 
 +        elif 40 > packet_diff >= 7: 
 +            if how_many_times[i]<​=6:​ 
 +                print '​packetdiff:',​ packet_diff,​ '; down, little'​ 
 +                globals()[servo].down() 
 +                time.sleep(0.5) 
 +                globals()[servo].stop() 
 +                how_many_times[i]+=0.5 
 +            else: 
 +                globals()[servo].stop() 
 +                time.sleep(0.3) 
 +                how_many_times[i]-=2 
 +        elif 90 > packet_diff >= 40: 
 +            if how_many_times[i]<​=6:​ 
 +                print '​packetdiff:',​ packet_diff,​ '; go down, 2' 
 +                globals()[servo].down() 
 +                time.sleep(1) 
 +                globals()[servo].stop() 
 +                how_many_times[i]+=1 
 +            else: 
 +                globals()[servo].stop() 
 +                time.sleep(0.3) 
 +                how_many_times[i]-=2 
 +        elif 130 > packet_diff >= 90: 
 +            if how_many_times[i]<​=6:​ 
 +                print '​packetdiff:',​ packet_diff,​ '; go down, 3' 
 +                globals()[servo].down() 
 +                time.sleep(1.5) 
 +                globals()[servo].stop() 
 +                how_many_times[i]+=1.5 
 +            else: 
 +                globals()[servo].stop() 
 +                time.sleep(0.3) 
 +                how_many_times[i]-=2 
 +        elif packet_diff >= 130: 
 +            print '​packetdiff:',​ packet_diff,​ '; go down, 4' 
 +            globals()[servo].down() 
 +            time.sleep(2) 
 +            globals()[servo].stop() 
 +            how_many_times[i]+=2 
 +    packet_list=new_packet_list # update packet list 
 +    print "how many times?",​ how_many_times 
 +    time.sleep(1) 
 + 
 +</​code>​
quadricone-python-urbaines.1362950588.txt.gz · Last modified: 2013/03/10 21:23 by 91.230.85.2