changeset 49:6ec1356c03ae

Add accelerometer
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Thu, 21 Aug 2014 20:58:00 +0200
parents dda48811342a
children 6f765bd70359
files accel.py kubik.py robot.py scad/board.scad servo.py
diffstat 5 files changed, 38 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accel.py	Thu Aug 21 20:58:00 2014 +0200
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import serial
+import kubik
+
+
+def show_accel(robot):
+    while True:
+        print robot.get_accel()
+        yield
+
+
+robot = kubik.Robot(serial.Serial('/dev/rfcomm0', 9600))
+robot.run_animations([show_accel(robot)], 6)
--- a/kubik.py	Thu Aug 21 11:12:55 2014 +0200
+++ b/kubik.py	Thu Aug 21 20:58:00 2014 +0200
@@ -20,6 +20,8 @@
 
 
 class Robot(robot.Robot):
+    accel_trim = [91.75, 89.5, 90.5]
+
     def __init__(self, serial):
         self.legs = (
             Leg(Servo(serial, 11, reverse=True),
--- a/robot.py	Thu Aug 21 11:12:55 2014 +0200
+++ b/robot.py	Thu Aug 21 20:58:00 2014 +0200
@@ -8,6 +8,7 @@
 
 class Robot(object):
     legs = ()
+    accel_trim = [90.0, 90.0, 90.0]
 
     def __init__(self):
         self.shift = [0.0, 0.0, 0.0]
@@ -49,6 +50,16 @@
         for leg in self.legs:
             leg.update(self.shift)
 
+    def get_accel(self):
+        probes = 4
+        accels = []
+        for probe in range(probes):
+            accels.append(self.legs[0].hip.get_sensors())
+        values = [0, 0, 0]
+        for i in range(3):
+            values[i] = int(float(sum(a[i] for a in accels)) / probes - self.accel_trim[i])
+        return values
+
     def _run_animations(self, animations, fps=12):
         clock = pygame.time.Clock()
         while animations:
--- a/scad/board.scad	Thu Aug 21 11:12:55 2014 +0200
+++ b/scad/board.scad	Thu Aug 21 20:58:00 2014 +0200
@@ -127,7 +127,7 @@
             rotate([0, 180, 0]) short_pin();
         }
     }
-    translate([1.8, 22.8, -3]) rotate([0, 90, 0]) capacitor();
+    // translate([1.8, 22.8, -3]) rotate([0, 90, 0]) capacitor();
 }
 
 
@@ -135,6 +135,7 @@
 arduino_pro_mini_goldpins();
 translate([2.54, 0, -1.75]) board();
 translate([17.72, 33 - 2.54, -1]) rotate([0, 180, 90]) jumper();
+translate([17.72 - 7.62, 33 - 1.27 * 5 - 0.5, -3]) color("Orange") cube([7.62, 1, 1]);
 for (y=[0:3]) {
     translate([0, y * 2.54, -2.1]) rotate([0, 180, -90]) SG90_plug();
 }
--- a/servo.py	Thu Aug 21 11:12:55 2014 +0200
+++ b/servo.py	Thu Aug 21 20:58:00 2014 +0200
@@ -31,10 +31,17 @@
     def update_all(cls, servos):
         serial = servos[0].serial
         servos = sorted(servos, key=lambda servo: servo.index)
-        command = '0xfe%s' % ''.join('%c' % servo.calculate_angle()
+        command = '\xfe%s' % ''.join('%c' % servo.calculate_angle()
                                      for servo in servos)
         serial.write(command)
 
+    def get_sensors(self):
+        command = '\xfd'
+        self.serial.write(command)
+        while self.serial.read(1) != '\xff':
+            pass
+        return [ord(c) for c in self.serial.read(3)]
+
     def calculate_angle(self):
         position = self.position
         if self.reverse: