K2 Kickboard ev mod – analog to pdm controller

April 15th, 2014

After I avoided programming my own microcontroller to get the thing rolling in as little time as possible (sidetracking kills a lot of drive) – I finally decided it was time to take it on.

Actually the realisation that the cheap servo tester assumes the poti position when powering up as middle position convinced me that it was necessary to write my own speed controller – since I can’t (or at least not realiably/comfortably) use the braking functionality of the alien power sytem esc.

Also this way I can – or at least I can try to – write my own soft-start routine so people don’t fall off the back.

@phrewfuf encouraged me to program the arduino nano I tucked in a box some months back for when the time was right ;-)
Since he didn’t send me the code I just set down myself today and took the first steps.

Also I had to wildlarize the freaking busted poti I pulled out of a part drawer. If you’re  not familiar with the term:

“widlarize” (invented by Bob Widlar): You take the bad component to the anvil part of the vice and beat it with a hammer। It will make you feel so good, for no damaged parts will appear in your latest application।

It sucks so hard wasting time and money with  broken components that I consider not reusing old parts - or at least not the parts lying around shackspace ;-)

Here is already another poti hooked up to an analogue pin linked to the pin the servo is connected to:

#include <Servo.h>

//onboard led
int ledPin = 13;

//servo pin
int escPin = 3;  // servo signal connected to digital pin 3
Servo escServo;

int potiPin = 7; // potentiometer wiper (middle terminal) connected to analog pin 3
int potiVal = 0;     // variable to store the value read from the poti

void setup()
{
  pinMode(ledPin, HIGH);
  escServo.attach(escPin);
  //initial Servo Position
  escServo.write(0);
}

void loop()
{

  potiVal = analogRead(potiPin);    // read the input pin
  potiVal = map (potiVal, 0, 1023, 0, 180); //convert input range to servo range
  escServo.write(potiVal);

}

Result:

Next up I need want to get interrupts working.

I claim first driving 20 screens with 10 gpu’s in a single computer

April 15th, 2014

*gnarf* … it seems I wrote this 2 months ago and never published it to the blog …

Used hardware:
5x Nvidia NVS 440 dual gpu, dual head -> 2xDMS-59 -> 2xDVI
2 A$$rock X79 Extreme 7 mainboards never buy Asrock. I mean it.
1 P9X79_WS mainboard
1 i7 3930k CPU (because I wanted it … not because it was necessary)
1 SilenX EFZ-120HA5
1 Enermax Liberty ELT500AWT 80Plus
4x 4GB (Quad-kit) Mushkin Redline DDR3 1866MHz
2x Noctua NF-P12 PWM silent fans

20 resuscitated Samsung 940B/BF/T screens
20 DVI-cables from 1.5m to 5m, 20 VESA mounts, 4×5-port socket ports

For now:

And a video … from a few weeks back

Build log/pictures and details will follow.

P.S.: And then there’s this *jealousy dripping out of my eyes* … for ~20k$.
(and it doesn’t even give you any trouble with MS OS gpu limits since there are only 4 driving 24 screens)

[Idea] Get it done platform

Februar 12th, 2014

So lets just throw it out in the hope someone else does it.

Else I … and makefu have to ;-)

I would like to have a plattform that works somewhat similar to kickstarter – but different.
The focus would mainly be on open source software – but maybe also tangible products.

Let’s say you use a piece of open source software – e.g. Openwrt and you stumble upon a broken DYNDNS package. Now you may still be able to set up dynamic DNS through a script – but it would also be nice to have the luci-app-ddns package working as
intended.

So on the get it done platform I would state the wish for the luci-app-ddns package to be fixed and throw in 20€ for someone to do it.

If others would also like to get it fixed they could also pledge some money.
Now the more money is on the table – the more likely it would get for someone - or even groups of people to start working on getting it done.

Ubuntu auf dem Nexus 4

Februar 11th, 2014

Makefu hat auf sein altes (wie kurzlebig doch Handys sind) Nexus 4 Ubuntu geworfen.
Ich bin gespannt auf den Erfahrungsbericht in ein paar Wochen ;-)

Jedenfalls muss man im Moment ein Radio Rom Downgrade fahren wenn man unter Ubuntu das wlan zum funktionieren überreden möchte.

Howto:

$ wget https://dl.google.com/dl/android/aosp/occam-jwr66y-factory-74b1deab.tgz
$ tar xvfz occam-jwr66y-factory-74b1deab.tgz
$ adb reboot bootloader
$ fastboot flash radio flash occam-jwr66y/radio-mako-m9615a-cefwmazm-2.0.1700.84.img

cleanup

$ rm  rm occam-jwr66y-factory-74b1deab.tgz 
$ rm -rf occam-jwr66y/

Netzwerk-Durchsatz messen mit iperf (OpenWrt router <-> Linux / Windows wlan)

Februar 6th, 2014

Auf OpenWrt haben makefu und ich schon USB-over-wlanInstacam und one button realisiert und erst kürzlich einen workshop zum hardware hacking unseres Lieblings-OpenWrt Geräts wr703 (auch bekannt als minikrebs) gegeben. Ich habe OpenWrt auf einem TP-Link WDR4300 sowohl zu Hause – als auch neuestens in der Arbeit am Laufen und kann das Gerät nur wärmstens empfehlen.

Weil ich öfter zu faul bin ein Kabel zum Backup des Laptops auf ein NAS anzuschließen und es über wlan noch nicht so schnell geht wie ich das gerne hätte habe ich gerade eine Intel 633anhmw  N6300 wireless karte (half-size mini pci-express) mit angeblich 450 MBit besorgt und muss jetzt natürlich kurz den Durchsatzgewinn (hoffentlich!) gegenüber der aktuell eingesetzten Atheros AR928X messen.

Dazu verwende ich iperf wie folgt:

Installation von iperf auf der OpenWrt box:

# opkg install iperf

Starten des iperf Servers:

# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Installation von iperf auf der Ubuntu Mühle:

$ sudo apt-get install iperf

Benchmark starten:

$ iperf -c

In diesem Falle die OpenWrt box

$ iperf -P5 -f M -c 192.168.1.1

^^ die Parameter findet man mit “iperf -h” oder siehe weiter unten. Ergebnis von Qualcomm Atheros AR928X [168c:002a]:

[ 3] 0.0-10.1 sec 36.1 MBytes 3.59 MBytes/sec

Intel Corporation Centrino Ultimate-N 6300 [8086:422b] sucks ass

[ 5] 0.0-10.5 sec 4.50 MBytes 0.43 MBytes/sec

^^ na da habe ich mir ja was großartiges gegönnt …

Und der Gewinner ist: Centrino(R) Ultimate-N 6300 AGN - die alte Karte aus meinem Notebook, die ich in Nadia’s Windows Laptop gesteckt habe, damit Sie auch 5GHz hat ;-)
Da fällt mir auch ein, warum ich die Atheros Karte gekauft habe … weil die Intel Karten nach meiner Erfahrung (2200gb 2915abg, 6300n, jetzt: 633anhmw) in Linux einfach immer nur Ärger machen. So auch in diesem Fall wieder.

[  3]  0.0-10.0 sec  88.4 MBytes  8.82 MBytes/sec

LAN ist besser … und wohl begrenzt durch IO auf dem OpenWrt Router … ich teste das gleich noch zum NAS

[ 3] 0.0-10.0 sec 316 MBytes 31.6 MBytes/sec

… und siehe da … zum NAS über den wdr4300

[ 3] 0.0-10.0 sec 1084 MBytes 108 MBytes/sec

Nachtrag: Mit Kernel 3.13. bin ich jetzt immerhin bei

[  3]  0.0-10.0 sec  74.2 MBytes  7.40 MBytes/sec

Nachtrag: Intel 7260 HMWB (702.11ac) (wartet noch auf den passenden AC wlan Router)

[  3]  0.0-10.0 sec  91.0 MBytes  9.06 MBytes/sec

Iperf Parameter:

$ iperf -h
Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Client/Server:
  -f, --format    [kmKM]   format to report: Kbits, Mbits, KBytes, MBytes
  -i, --interval  #        seconds between periodic bandwidth reports
  -l, --len       #[KM]    length of buffer to read or write (default 8 KB)
  -m, --print_mss          print TCP maximum segment size (MTU - TCP/IP header)
  -o, --output    <filename> output the report or error message to this specified file
  -p, --port      #        server port to listen on/connect to
  -u, --udp                use UDP rather than TCP
  -w, --window    #[KM]    TCP window size (socket buffer size)
  -B, --bind      <host>   bind to <host>, an interface or multicast address
  -C, --compatibility      for use with older versions does not sent extra msgs
  -M, --mss       #        set TCP maximum segment size (MTU - 40 bytes)
  -N, --nodelay            set TCP no delay, disabling Nagle's Algorithm
  -V, --IPv6Version        Set the domain to IPv6

Server specific:
  -s, --server             run in server mode
  -U, --single_udp         run in single threaded UDP mode
  -D, --daemon             run the server as a daemon

Client specific:
  -b, --bandwidth #[KM]    for UDP, bandwidth to send at in bits/sec
                           (default 1 Mbit/sec, implies -u)
  -c, --client    <host>   run in client mode, connecting to <host>
  -d, --dualtest           Do a bidirectional test simultaneously
  -n, --num       #[KM]    number of bytes to transmit (instead of -t)
  -r, --tradeoff           Do a bidirectional test individually
  -t, --time      #        time in seconds to transmit for (default 10 secs)
  -F, --fileinput <name>   input the data to be transmitted from a file
  -I, --stdin              input the data to be transmitted from stdin
  -L, --listenport #       port to receive bidirectional tests back on
  -P, --parallel  #        number of parallel client threads to run
  -T, --ttl       #        time-to-live, for multicast (default 1)
  -Z, --linux-congestion <algo>  set TCP congestion control algorithm (Linux only)

Miscellaneous:
  -x, --reportexclude [CDMSV]   exclude C(connection) D(data) M(multicast) S(settings) V(server) reports
  -y, --reportstyle C      report as a Comma-Separated Values
  -h, --help               print this message and quit
  -v, --version            print version information and quit

[KM] Indicates options that support a K or M suffix for kilo- or mega-

The TCP window size option can be set by the environment variable
TCP_WINDOW_SIZE. Most other options can be set by an environment variable
IPERF_<long option name>, such as IPERF_BANDWIDTH.

Report bugs to <iperf-users@lists.sourceforge.net>

 

K2 Kick Pro Kickboard mod with 3kw outrunner

Januar 6th, 2014

I still have a backlock of the past two years – but with this project I actually did quite a nice job documenting it.

Best of all it’s

and you can get all the CAD files on github.

Now to the build. Since I’m not big on baking cookies for Christmas – I invested my time in a project I was thinking about doing for some time: Building an electrified kickboard. This is the result:

The ingredients are:

from the shop:

from the parts bin:

cooking:

  • a day of CAD work
  • a day of milling aluminum (and some minutes on a lathe)
  • a day putting it all together + some soldering

I took the easy way – just to get the thing functioning (let’s deal with a microcontroller + programming later – if I need to) – and just soldered an extension cord + push potentiometer to the servo tester.

Also I desoldered everything unneeded from the servotester – but the better/faster method would have been just to cut the unneeded parts with pliers.

Next I sat down at the computer and let my ideas form in CAD. (This is the 3rd iteration)

First milled parts taking shape (these are the right and left axle mounts)

 

There is a mechanism for tensioning the belt by sliding the motor mount.

 

It looks nice enough … doesn’t hold up to the torque though – and so I had to redesign it later.

 

The process of milling the back plate:

The program used (XpertMILL):

and the finished part next to the original one:

 

The “gas pedal” fitted to the handle:

A video of the first motor test:

As a quick hack to get moving I made a big Y-cable to fit the batteries into the left and right trouser pocket with a really long cable down to the esc.

A test ride (video suffering from vvs)

She is having trouble keeping the front wheels on the ground during acceleration ;-)

The process of building the new battery pack from used Makita battery packs with 18650 cells:

balancing the Frankenstein pack:

Lasercut insulator rings and leads soldered across the top (3p configuration)

Soldered into a 7s 3p pack:

shrink wrapped:

Fitted to the kickboard:

For safety I should still put a 2mm aluminum sheet under the cells.

Some links and data:

Quite useful for calculating the drive train is http://smarthost.maedler.de/maedlertools/maedler.html

The data:

The measured no load rpm of the motor is 1295 which according to 4.2V*6*170rpm/V *12 / 40 = 1285 rpm … sounds legit.

This yields in 1295U/min * 11cm * pi / 100 cm/m / 1000 m/km * 60 min/h = 26.85 km/h @ no-load … or estimated 26.85 km/h * 0.8 = 21.5 km/h – theoretical.

The top speed – measured – is 22km/h with 6S, or 26km/h with 7S.

Energy consumption is about 13Wh/km (gunning it).

The battery pack holds 3.7V*3*7*2.5Ah=194.25Wh nominal … but since these are used and abused cells from Makita power drills the actual value should be lower.

Theoretical range is therefore about 15km – the real range is yet to be tested.

Max load was 38A – that would be 1kw of power to the motor – with a 100kg person on it and I guess the limiting factor are the cells and worn down T5 belt that will be replaced with an AT5 belt and pulleys.

http://www.youtube.com/watch?v=Wa9pRsZ2JA4

OpenWrt -> Linksys wag160n_v1

Juli 16th, 2013

Victory: one of my tiny white whales has been slain.

Flashing OpenWrt to your router is easy as pie – at least in some cases – in other only if you know what you’re doing and a suitable firmware file is available.
I have to admit it took me almost 2 years to get OpenWrt on my Linksys wag160n v1.
Today I conquered that tiny white whale of mine.

serial connection soldered

I bought the unit back in 2011 because it seemed like a good choice looking at the OpenWrt toh (supported hardware) – at the time.

After I got it I quickly soldered the serial connector to the board and dumped the configuration data for the ath chip as described in the OpenWrt wiki.

After that it took me quite some time trying to build my own firmware – incorporating all the patches which should yield in a usable firwmare.

I got that done enduring some pain (a few days of forcing myself to patching files and compiling the firmware).

So there I was with the untested firmware file that still wouldn’t upload through the webinterface of my Linksys router.

Frustrated I threw the unit into it’s box and then some corner.

While moving the box hit the light of day again so I saw myself forced to either conquer the box or throw it in the trash.

Today I managed to get it done – and here is how that works:

You need to get a tftp server up and running (I’m running some Ubuntu).

sudo apt-get install tftpd-hpa tftp

Be sure to test the setup – put some file in /var/lib/tftpboot  e.g.

sudo sh -c 'echo "hallo" > /var/lib/tftpboot/test'

tftp localhost
 get test
 Received 7 bytes in 0.0 seconds

So now you’re sure your tftp server works.

You can get the firmware for the wag160n v1 (Attitude Adjustment, r34073) here which is built by Virus or try the related wag160n_v1 forum thread.

Copy your downloaded/built openwrt image to to /var/lib/tftpboot


sudo cp openwrt-WAG160Nv1-squashfs-cfe-attitude-adjustment-beta-2.bin /var/lib/tftpboot/bcm963xx_fs_kernel

That file (and the name needs to be bcm963xx_fs_kernel because that’s the IP the wag160n CFE expects) is now waiting there to get pulled by your router.

Connect to your router with an ethernet cable.
Assign 192.168.1.100 to your box – because that’s what the wag160n will try pull the boot image from
(192.168.1.100 as gateway).

Next up you need to connect to the wag160n through telnet.

Setup minicom:

sudo minicom -s

-> serial port setup
A -> /dev/ttyUSB0 (or dev/ttyACM0 or whatever)
E -> E (115200) -> Q (8N1)
-> safe setup as dfl (or as <configuration_name>)

and connect with:

sudo minicom

or if you saved a named config with:


sudo minicom <configuration_name>

You should now be presented with a boot screen after plugging the power supply into the wag160n.

Wait for:

*** Press any key to stop auto run (1 seconds) ***

And press a key. Now you’re in CFE:

CFE>

press f.

Loading 192.168.1.100:bcm963xx_fs_kernel ...

Finished loading 2752516 bytes

Flashing root file system and kernel at 0xbfc10000: ............................

.
 *** Image flash done *** !
 Resetting board...

And that’s it. Next time you will be greeted by the openwrt screen.

</pre>
BusyBox v1.19.4 (2012-11-04 23:56:37 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.

_______ ________ __
 | |.-----.-----.-----.| | | |.----.| |_
 | - || _ | -__| || | | || _|| _|
 |_______|| __|_____|__|__||________||__| |____|
 |__| W I R E L E S S F R E E D O M
 -----------------------------------------------------
 ATTITUDE ADJUSTMENT (Attitude Adjustment, r34073)
 -----------------------------------------------------
 * 1/4 oz Vodka Pour all ingredients into mixing
 * 1/4 oz Gin tin with ice, strain into glass.
 * 1/4 oz Amaretto
 * 1/4 oz Triple sec
 * 1/4 oz Peach schnapps
 * 1/4 oz Sour mix
 * 1 splash Cranberry juice
 -----------------------------------------------------

Set a root password through telnet

passwd

and you’re good to connect through ssh.

Another option would be to hexedit the firmware file so you can load it through the Linksys firmware upgrade.
You would still need telnet to the box because ssh is only enabled after setting a root password with the above linked firmware file.

HDMI -> LVDS

Juni 21st, 2013

“The only difference between screwing around and science is writing it down.”

Na gut. Oder zumindest kann ich später nachschauen wie es geht.

Ich habe mal nachgeschaut, wie man die sich mit der Zeit ansammelnden TFT Displays nutzen könnte und bin dabei u.a. auf den hdmi lvds converter von chalk-elec.com gestoßen.

HDMI_LVDS_back

HDMI_LVDS_front

Diesen habe ich vor ein paar Monaten bestellt – und spontan gestern Nacht verdrahtet.

Damit würde sich u.a. ein Display am Multicopter realisieren lassen. Die Zeit wird es zeigen ob ich die Idee weiterverfolgen und umsetzen werde.

Bestellt habe ich den Adapter als 1920×1080 24bit Version – die programmierten EDID-Informationen sind aber leider falsch – so taucht ein LGD  10″ 1280×800 Display im System auf:

hdmi_lvds_LGD10
$ xrandr
HDMI1 connected 1280x800+1600+0 (normal left inverted right x axis y axis) 217mm x 136mm
1280x800       60.0*+   40.0

Na gut - erst mal schnell an ein herumliegendes Display (Samsung LTN141X8-L02) angekabelt.
Relevant ist dabei eigentlich nur die richtigen Pins miteinander zu verbinden.
Pinout vom Display
Samsung_LTN141X8-L02_pinout
Pinout vom LVDS Adapter:
hdmi_lvds_pinout
Das kam dabei raus:
HDMI_LVDS_cables

Dell_HDMI_LVDS_Samsung_10

Joa, nicht so toll:

HDMI_LVDS_fail

Der Versuch einfach die richtige Auflösung "rauszupusten":

$ xrandr --addmode HDMI1 1024x768

$ xrandr
HDMI1 connected 1024x768+1600+0 (normal left inverted right x axis y axis) 217mm x 136mm
1280x800       60.0 +   40.0
1024x768       60.0*

hdmi_lvds_LGD10_addmode

bringt den Erfolg:

HDMI_LVDS_success

proof of concept: done
Der nächste Schritt wäre einen 27" IPS Monitor zu schlachten und das Experiment zu wiederholen.

Petitionen

Januar 23rd, 2013

Die Entwicklung dass immer mehr Leute einfach ihre Meinung kundtun können – und sei es nur durch einen Klick zur Unterstützung einer Online-Petition ist positiv.

Dass man sich jedoch damit zum Bittsteller degradiert nicht.

Diese duckmäuserische Haltung sich nur innerhalb der vorgegebenen Wege zu bewegen,
die Fügung in die Rolle des ohnmächtigen Untertan lehne ich strikt ab.

Wir sind der Souverän – auch wenn uns diese Verantwortung nicht allzeit bewusst ist.

[Android] HTC Desire upgrade auf Gingerbread – 2.3.1 [Oxygen]

Januar 19th, 2011

Frei aus dem Kopf:

  1. One-Click Root -> hiermit: unrevoked³
  2. Falls Apps + Daten gerettet werden sollen:
    1. My Backup [Android market] installieren – QR ->
    2. "My Backup Android market link"

      My Backup

    3. Backup Application & Media
    4. Backup Data
  3. ROM Manager [Android market] installieren – QR ->

    ROM Manager Android market lin

    ROM Manager

  4. geeignete Radio Firmware downloaden z.B.: 32.54.00.32U_5.14.05.17.zip (Quelle)
    1. auf die SD Karte (oberste Ebene (\)) im Desire schieben
    2. per ROM Manager -> Reboot into Recovery (geht auch über den Bootloader)
    3. Datei auswählen und installieren
    4. rebooten
  5. Gewünschtes ROM downloaden z.B.: Oxygen 2.0 RC6 [Quelle]
  6. auf die SD Karte (oberste Ebene (\)) im Desire schieben
  7. per ROM Manager installieren (oder auch per Recovery)
    1. Install ROM from SD Card
    2. Backup Existing ROM (-> pfft)
    3. Wipe Data and Cache!
  8. Glücklich sein ;-)