User Tools

Site Tools


motors-scanner-test-1

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
motors-scanner-test-1 [2012/09/24 21:54]
81.10.185.142
motors-scanner-test-1 [2012/10/08 16:45]
85.218.109.130
Line 7: Line 7:
  
 <code python> <code python>
 +#​!/​usr/​bin/​python
 +
 +# -*- coding: utf-8 -*-
 +
 import subprocess, glob, time, csv import subprocess, glob, time, csv
 from arduino import Arduino, Servo from arduino import Arduino, Servo
Line 14: Line 18:
 # airodump-ng is running and logging the results into a csv file # airodump-ng is running and logging the results into a csv file
 # subprocess looks for the last edited csv file in current folder # 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 +# 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 
  
-listlasted=subprocess.Popen("​ls -ct1 *csv | head -1", shell=True, stdout=subprocess.PIPE,​ stderr=subprocess.PIPE)+listlasted=subprocess.Popen("​ls -ct1 $HOME/​rknfg/​*csv | head -1", shell=True, stdout=subprocess.PIPE,​ stderr=subprocess.PIPE)
 lasted=listlasted.communicate()[0].strip() lasted=listlasted.communicate()[0].strip()
 print lasted print lasted
  
 # reading the scan log from a csv file # reading the scan log from a csv file
 +
 +lookup_key='​ # IV'
  
 def lookup(dump):​ def lookup(dump):​
 +    datalist=[]
     scan=open(dump,​ "​rU"​)     scan=open(dump,​ "​rU"​)
     next(scan)     next(scan)
     scanDict=csv.DictReader((line.replace('​\0',''​) for line in scan), delimiter=','​)     scanDict=csv.DictReader((line.replace('​\0',''​) for line in scan), delimiter=','​)
     for adict in scanDict:     for adict in scanDict:
-         if adict.has_key(' # IV'): +         if adict.has_key(lookup_keyand adict.get(lookup_key)!=None
-            data=adict.get(' # IV'+             try: 
-            return ​data +                 ​datalist.append(int(adict.get(lookup_key))) 
-  +             ​except:​ 
-packets=int(lookup(lasted))+                 pass 
 +    return ​sum(datalist) 
 + 
 +packets=lookup(lasted)
 print '​packets',​ packets print '​packets',​ packets
  
 # moving part ------------------- # moving part -------------------
- +
 portz=glob.glob("/​dev/​ttyUSB*"​)[0] portz=glob.glob("/​dev/​ttyUSB*"​)[0]
 #print portz #print portz
- +
 my_board=Arduino(portz) my_board=Arduino(portz)
 my_board.output([9,​ 10]) my_board.output([9,​ 10])
-linearone=my_board.attachServo(9) +linear_one=my_board.attachServo(9) 
-lineartwo=my_board.attachServo(10)+linear_two=my_board.attachServo(10)
  
 # !!!! motors are not in sync!!!! # !!!! motors are not in sync!!!!
 # extreme positions of the motor one and two: # extreme positions of the motor one and two:
-linearone_max = 139 
-lineartwo_max = 121 
-linearone_min = 72 
-lineartwo_min = 87 
  
 # |   ​linear one          | # |   ​linear one          |
Line 59: Line 64:
  
 # thus a dictionary of compatible values tupples is used to make sure the two motors are always in the same position # thus a dictionary of compatible values tupples is used to make sure the two motors are always in the same position
-positions = {0:​[(72,​87)],​1:​[(73,​88)],​2:​[(74,​88)],​3:​[(75,​89)],​4:​[(76,​90)],​5:​[(77,​90)],​6:​[(78,​91)],​7:​[(82,​92)],​8:​[(88,95)],9:[(93,98)],10:[(100,101)],11:[(110,108)],12:[(114,109)],13:[(120,111)],14:[(124,113)],15:[(125,114)],16:[(128,115)],17:[(129,116)],18:[(130,117)],19:[(132,118)],20:[(135,119)],21:[(137,120)],22:[(139,121)]+positions = {0:​[(72,​87)],​1:​[(73,​88)],​2:​[(74,​88)],​3:​[(75,​89)],​4:​[(76,​90)],​5:​[(77,​90)],​6:​[(78,​91)],​7:​[(82,​92)],​8:​[(83,92)],9:[(84,92)],10:[(86,94)],11:[(88,95)],12:[(90,96)],13:[(92,97)],14:[(93,98)],15:[(95,99)],16:[(98,100)],17:[(100,101)],18:[(102,102)],19:[(103,103)],20:[(104,104)],21:[(106,105)],22:[(107,106)],23:[(109,​107)],​24:​[(110,108)],25:[(114,109)],26:[(117,110)],​27:​[(120,​111)],28:[(122,​112)],​29:​[(124,113)],30:[(125,114)],31:[(128,115)],​32:​[(129,​116)],33:[(130,117)],​34:​[(132,​118)],​35:​[(135,​119)],​36:​[(137,​120)],​37:​[(139,​121)]}
- +
-# put the motors in the minimum position +
-linear_one.write(positions[0][0][0]) +
-linear_two.write(positions[0][0][1]) +
- +
-time.sleep(10)+
  
 # the main loop ----------------- # the main loop -----------------
Line 72: Line 71:
 # it sends the motors to a new position accordingly # it sends the motors to a new position accordingly
  
-key_pos=0 
 max_pos=len(positions)-1 max_pos=len(positions)-1
 +key_pos=max_pos
 +
 +# put the motors in the minimum position
 +linear_one.write(positions[key_pos][0][0])
 +linear_two.write(positions[key_pos][0][1])
 +time.sleep(5)
  
 while True: while True:
Line 79: Line 83:
     packetsDiff=newPackets-packets     packetsDiff=newPackets-packets
     print '​packetsDiff',​ packetsDiff     print '​packetsDiff',​ packetsDiff
-    # decide whether to stretch or shrink:  +    # decide whether to stretch or shrink ​(when shrinking the height of the space increases) 
-    if packetsDiff>​=10 and packetsDiff<​50 and key_pos<max_pos+    # case 1: motors will shrink for one position each; the initial key_pos value needs to be bigger than 0 
-        new_key=key_pos+2 +    if packetsDiff>​=and packetsDiff<​50 and key_pos>0
-        print '​linear1 ​should stretch',​positions[new_key][0][0] +        new_key=key_pos-1 
-        print '​linear2 ​should stretch',​positions[new_key][0][1] +        print 'case 1: new_key=',​ new_key, '​position:',​ positions[new_key] 
-        print '​current key_pos: ' + str(new_key) + " .. was oldkey: " + str(key_pos) +        ​#print '​linear1 ​will shrink',​positions[new_key][0][0] 
-        ​linearone.write(positions[new_key][0][0])+        ​#print '​linear2 ​will shrink',​positions[new_key][0][1] 
 +        ​#print '​current key_pos: ' + str(new_key) + " .. was oldkey: " + str(key_pos) 
 +        ​linear_one.write(positions[new_key][0][0])
         time.sleep(0.3)         time.sleep(0.3)
-        ​lineartwo.write(positions[new_key][0][1])+        ​linear_two.write(positions[new_key][0][1])
         time.sleep(0.3)         time.sleep(0.3)
         key_pos=new_key #update position         key_pos=new_key #update position
-        ​ + 
-    elif packetsDiff>​50 and key_pos<max_pos+    # case 2: motors will shrink for 5 positions; the initial value must be bigger than 5 
-        new_key=key_pos++    elif packetsDiff>​=50 and key_pos>0
-        ​print '​linear1 should stretch',​positions[new_key][0][0] +        new_key=key_pos-
-        print 'linear2 should stretch',​positions[new_key][0][1] +        ​if new_key<=0: 
-        ​linearone.write(positions[new_key][0][0]) +            print 'case 2: but cannot shrink more
-        time.sleep(0.3) +            new_key=#reset position 
-        lineartwo.write(positions[new_key][0][1]) +            key_pos=new_key ​#update ​position
-        time.sleep(0.3) +
-        if key_pos>​=max_pos: ​   ​ +
-            key_pos=max_pos ​#reset position+
         else:         else:
 +            print 'case 2: new_key=',​ new_key, '​position:',​ positions[new_key]
 +            #print '​linear1 will shrink',​positions[new_key][0][0]
 +            #print '​linear2 will shrink',​positions[new_key][0][1]
 +            linear_one.write(positions[new_key][0][0])
 +            time.sleep(0.3)
 +            linear_two.write(positions[new_key][0][1])
 +            time.sleep(0.3)
 +            key_pos=new_key #update position
 +    # case 3: motors will stretch for two positions; the initial value must not be bigger than max_pos
 +    elif packetsDiff<​=0 and key_pos<​max_pos:​
 +        new_key=key_pos+2
 +        if new_key>​=max_pos:​
 +            print 'case 3: but cannot stretch more'
 +            new_key=max_pos
 +            key_pos=new_key #update position
 +        else:
 +            print 'case 3: new_key=',​ new_key, '​position:',​ positions[new_key]
 +            #print '​linear1 will stretch',​positions[new_key][0][0]
 +            #print '​linear2 will stretch',​positions[new_key][0][1]
 +            #print '​current key_pos: ' + str(new_key) + " .. was oldkey: " + str(key_pos)
 +            linear_one.write(positions[new_key][0][0])
 +            time.sleep(0.3)
 +            linear_two.write(positions[new_key][0][1])
 +            time.sleep(0.3)
             key_pos=new_key #update position             key_pos=new_key #update position
-    elif packetsDiff<​=0 and key_pos>​0:​ 
-        new_key=key_pos-2 
-        print '​linear1 should shrink',​positions[new_key][0][0] 
-        print '​linear2 should shrink',​positions[new_key][0][1] 
-        print '​current key_pos: ' + str(new_key) + " .. was oldkey: " + str(key_pos) 
-        linearone.write(positions[new_key][0][0]) 
-        time.sleep(0.3) 
-        lineartwo.write(positions[new_key][0][1]) 
-        time.sleep(0.3) 
-        key_pos=new_key #update position 
     else:     else:
         print "else: packetDiff is too little",​ packetsDiff         print "else: packetDiff is too little",​ packetsDiff
         new_key=key_pos         new_key=key_pos
-        print '​nothing changed, will stay in the position',​ positions[new_key]+        ​#print '​nothing changed, will stay in the position',​ positions[new_key]
     time.sleep(3)     time.sleep(3)
     packets=newPackets #updates the packets     packets=newPackets #updates the packets
 +                                                                 
  
 </​code>​ </​code>​
 +
 +TODO
 +
 +  * positions resolution
 +  * main loop flow: first add or first decide on the limit
 +  * exceptions, restart....
 +
motors-scanner-test-1.txt · Last modified: 2012/10/08 16:45 by 85.218.109.130