User Tools

Site Tools


raspberrypi:servo

Skaitmeniniu servo varikliu kontrole daroma siunčiant jiems impulsus nuo 0,5ms iki 2,5 ms ir jie pasisuka reikiamu kampu. pabnadem suklijuoti 2 servo ir padaryti lazerine taikymosi sistemą:

Šiaip nieko gero bet užtat nebrangūs - pažaidimui labai gerai.

import time
import pigpio
import curses
import os
 
os.environ.setdefault('ESCDELAY', '25')
stdscr = curses.initscr()
curses.noecho()
curses.cbreak()
stdscr.keypad(1)
 
servo_pos = 1400
servo_pos2 = 1000
step = 1
ecounter = 0
 
try:
    pi = pigpio.pi() # Connect to local Pi.
 
    while 1:
        stdscr.nodelay(1)
        key = stdscr.getch() #getkey()      
        ecounter = ecounter + 1   
 
    #119 115 97 100
        if key == 119:
            servo_pos = servo_pos + step        
 
        if key == 115:
            servo_pos = servo_pos - step
 
        if key == 97:
            servo_pos2 = servo_pos2 + step
 
        if key == 100:
            servo_pos2 = servo_pos2 - step
 
        if key == 121:
            st = 1
            for i in range(1,10):            
                pi.set_servo_pulsewidth(21, 1400)
                pi.set_servo_pulsewidth(20, 1000)
                time.sleep(st)
                pi.set_servo_pulsewidth(21, 1500)
                pi.set_servo_pulsewidth(20, 1000)
                time.sleep(st)
                pi.set_servo_pulsewidth(21, 1500)
                pi.set_servo_pulsewidth(20, 900)
                time.sleep(st)
                pi.set_servo_pulsewidth(21, 1400)
                pi.set_servo_pulsewidth(20, 900)
                time.sleep(st)
 
        if key == 117:
            for i in range(1,10):
                pi.set_servo_pulsewidth(21, 1400)
                time.sleep(0.2)
                pi.set_servo_pulsewidth(21, 1500)
                time.sleep(0.2)
 
        # exit program
        if key == 27:
            curses.endwin()
            pi.set_servo_pulsewidth(21, 0)
            pi.set_servo_pulsewidth(20, 0)
            exit(1)            
 
        if servo_pos < 500: servo_pos = 500
        if servo_pos > 2500: servo_pos = 2500
 
        if servo_pos2 < 500: servo_pos2 = 500
        if servo_pos2 > 2500: servo_pos2 = 2500
 
        pi.set_servo_pulsewidth(21, servo_pos)
        pi.set_servo_pulsewidth(20, servo_pos2)
 
        stdscr.clear()                
        stdscr.addstr("Detected key:") 
        stdscr.addstr(str(key)) 
 
        stdscr.addstr("\nservo1:") 
        stdscr.addstr(str(servo_pos)) 
 
        stdscr.addstr("\nservo2:") 
        stdscr.addstr(str(servo_pos2)) 
 
        time.sleep(0.01)
 
 
except Exception as e: 
    curses.endwin()
    print str(e)
 
finally:
    curses.endwin()
 
    exit(1)                 
 
 
# switch servo off
pi.set_servo_pulsewidth(21, 0)
 
pi.stop()
raspberrypi/servo.txt · Last modified: by aistis