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/23 11:01]
85.218.109.130
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 $HOME/​rknfg/​*csv | head -1", shell=True, stdout=subprocess.PIPE,​ stderr=subprocess.PIPE)
-listlasted=subprocess.Popen("​ls -ct1 *csv | head -1", shell=True, stdout=subprocess.PIPE,​ stderr=subprocess.PIPE)+
 lasted=listlasted.communicate()[0].strip() lasted=listlasted.communicate()[0].strip()
 +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):​
-    scan=open(dump)+    ​datalist=[] 
 +    ​scan=open(dump, "​rU"​)
     next(scan)     next(scan)
-    scanDict=csv.DictReader(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: 
 +                 ​pass 
 +    ​return ​sum(datalist)
  
-#airodump='/​home/​selena/​doc/​synergia/​sator/​scanning/​salzamt1109-01.csv'+packets=lookup(lasted) 
 +print 'packets', packets
  
 # moving part ------------------- # moving part -------------------
Line 39: Line 50:
  
 my_board=Arduino(portz) my_board=Arduino(portz)
-my_board.output([9, ​11]) +my_board.output([9, ​10]) 
-linearone=my_board.attachServo(9) +linear_one=my_board.attachServo(9) 
-lineartwo=my_board.attachServo(11)+linear_two=my_board.attachServo(10)
  
-position=40 +# !!!! motors are not in sync!!!! 
-linearone.write(position),​ lineartwo.write(position) +# extreme positions of the motor one and two:
-time.sleep(1)+
  
-packets=int(lookup(lasted)) +# |   ​linear one          | 
-print '​packets', ​packets +# 72 - - - - - - - - - - 139 
-time.sleep(10)+ 
 +# |   ​linear two          | 
 +# 87 - - - - - - - - - - 121 
 + 
 +# 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:​[(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)]} 
 + 
 +# the main loop ----------------- 
 + 
 +# lookup function checks for difference in the number of packets 
 +# it sends the motors to a new position accordingly 
 + 
 +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:
-    newPackets=int(lookup(airodump))+    newPackets=int(lookup(lasted))
     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+    # case 1: motors will shrink for one position each; the initial key_pos value needs to be bigger than 0 
-        ​newPosition=position+(packetsDiff/​5) +    if packetsDiff>​=8 and packetsDiff<​50 and key_pos>​0
-        print 'should stretch', ​newPosition +        ​new_key=key_pos-1 
-        ​if newPosition <=140: +        print 'case 1: new_key=',​ new_key, '​position:​', ​positions[new_key] 
-            print 'and will do+        ​#print '​linear1 will shrink',​positions[new_key][0][0] 
-            ​linearone.write(newPosition), lineartwo.write(newPosition)+        #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) 
 +        linear_two.write(positions[new_key][0][1]) 
 +        time.sleep(0.3) 
 +        key_pos=new_key #update position 
 + 
 +    # case 2: motors will shrink for 5 positions; the initial value must be bigger than 5 
 +    elif packetsDiff>​=50 and key_pos>​0:​ 
 +        new_key=key_pos-5 
 +        if new_key<​=0:​ 
 +            print 'case 2: but cannot shrink more'​ 
 +            new_key=1 #reset position 
 +            key_pos=new_key #update position
         else:         else:
-            print 'already at maximum+            print 'case 2: new_key=', new_key, '​position:',​ positions[new_key] 
-            # reset +            #print '​linear1 will shrink',​positions[new_key][0][0] 
-            ​position=120 +            ​#print '​linear2 will shrink',​positions[new_key][0][1] 
-    elif packetsDiff<​=0:​ +            linear_one.write(positions[new_key][0][0]) 
-        ​newPosition=position-10 +            time.sleep(0.3) 
-        print '​shrinking',​ newPosition +            linear_two.write(positions[new_key][0][1]) 
-        if newPosition ​>= 40+            time.sleep(0.3) 
-            print 'will do+            key_pos=new_key #update position 
-            ​linearone.write(newPosition),​ lineartwo.write(newPosition)+    # 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:         else:
-            print 'already at minumum+            print 'case 3: new_key=', new_key, '​position:',​ positions[new_key] 
-            position=50 +            ​#print '​linear1 will stretch',​positions[new_key][0][0] 
-    time.sleep(5+            #print '​linear2 will stretch',​positions[new_key][0][1] 
-    packets=newPackets #resets ​the packets +            #print '​current key_pos: ' + str(new_key) + " .. was oldkey: " + str(key_pos) 
-    ​position=newPosition #resets the position (so the next time it will compare with the updated value)+            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 
 +    else: 
 +        print "else: packetDiff is too little",​ packetsDiff 
 +        new_key=key_pos 
 +        #print '​nothing changed, will stay in the position',​ positions[new_key] 
 +    time.sleep(3
 +    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