sidenote

Archívum
A(z) „hardver” kategória bejegyzései

I have been working on a project since last (2014) spring. I have been building a mirror inspired by Michael Teeuw’s Magic Mirror and now I have finished it! It is called Mirror π, and it is a “smart mirror”.

Mirror π

What’s this all about? How is it smart? More posts to come (I hope sooner than later), until than you can already browse the source code on GitHub.

Megosztás, like stb.

Múlt héten jött a hír, hogy rendelhető a Raspberry Pi-hez készített infravörös filter nélküli kamera a Pi NoIR.

Pi NoIR

Kép: adafruit industries blog

Azonnal rendeltem is egyet, majd írtam egy kommentet a HUP-ra, hogy én mire használom a kamera modult. trey-nek megtetszett, amit írtam, és írt is egy bejegyzést az ételdobozból és Raspberry Pi-ból készített time-lapse kamerámról.

Ennek eredményeképpen több megkeresést kaptam, hogy mennyibe kerül egy ilyen hordozható time-lapse kamerát összeállítani, illetve milyen szoftvereket használok, ezt próbálom most összefoglalni.

Szeretném megjegyezni, hogy az eddig elkészült felvételek még nincsenek kész, nincsenek megvágva, nincs rajtuk javítás stb. A cél egy hosszabb videó, vagy klip vagy ilyesmi készítése, és még nagyon az elején járok a dolognak.

Miből áll és mennyibe kerül?

A legegyszerűbb, ha felsorolom az alkatrészeket. (Az árak mellett feltüntettem, hogy milyen pénznemben értendők, mert pár dolgot külföldről rendeltem.)

  • Raspberry Pi Model B (rev2): 35 USD – Napi árfolyam kérdése, hogy Forintban mennyi.
  • Raspberry Pi Camera Board: 16.56 GBP – Napi árfolyam kérdése, hogy Forintban mennyi.
  • Wi-Fi USB adapter: ~2000–4000 HUF – Nagyon fontos, hogy elég legyen neki az az áram, amit az RPi közvetlenül le tud adni, különben powered hubot kellene használni.
  • SD kártya: ~5000+ HUF – Legalább 16 GB-os, class 10-es SD kártyát ajánlok, mert egy-egy fotózás alkalmával simán összejön 4–5 GB fotó.
  • 2 db 4-es AA elemtartó: ~150 HUF – Bármelyik elektronikai üzletben kapható.
  • kapcsoló: ~25 HUF – Nem emlékszem, hogy mennyibe került, 100 HUF alatt van az biztos.
  • 8 db 2500 mAh-ás 1,2 V-os NiMH akkumulátor: ~4000–8000 HUF – Az ár a márkától függ, nekem eléggé noname van. :)
  • ételdoboz: ~1000 HUF – Fontos, hogy légmentesen zárható legyen, így eső esetén nem folyik be a víz, a köd nem okoz gondot stb.
  • matt akrilfesték spray (fekete és fehér): ~2000 HUF – Az ételdoboz belülről feketére, kívülről fehérre van fújva. Belül fekete, hogy a különböző ledek fényét, villogását elnyelje nehogy becsillanjon a kamerába. Kívülről azért fehér, hogy visszaverje a fényt a melegedést elkerülendő.
  • UV szűrő: használtan ~500–1200 HUF
  • csavarok, alátétek: ~100 HUF
  • fényképezőgép állvány: Ehhez inkább nem írok árat (nekem korábbról volt már egy). Viszont nagyon fontos, hogy ha állvánnyal dolgozom, akkor legyen az állványon alul valami kampó, vagy más, hogy súly lehessen akasztani az aljára. Ugyanis az ételdoboz nagyobb, mint egy átlagos fényképezőgép, és a súlya még elemmel együtt is kicsi, ezért könnyen belekap a szél.
  • egyebek: maszkolószalag, szigetelőszalag, drót, forrasztópáka, forrasztóón, fenyőléc, laminált padlódarab. Utóbbi rögzíti a dobozt az állványra; úgy „faragtam”, hogy az állvány fejébe illeszkedjen. Ezek mind voltak itthon, árat nem tudok mondani.

Végösszeg: 28284 HUF (mindenből a legolcsóbbal és a mai USD és GBP árfolyammal számoltam).

Ebben nincs benne a fényképezőgép állvány, az itthon talált felhasznált anyagok, alkatrészek, sem az a készíttetett gyűrű, amelybe az UV szűrő illeszkedik. Nem gondoltam volna, hogy ennyit költöttem rá. Sőt, nekem 32 GB-os SD kártyám van, és nem is mindenből a legolcsóbb cucc, ráadásul több kamera modulom is van (NOiR is)… Szóval én valahol 50 ezer felett járok.

Szoftver

A legutóbb ennyit írtam a szoftverről:

A fényképezés mobiltelefonról vezérelhető:

  • A Pi egy USB-s WiFi modul hostapd és isc-dhcp-server segítségével szolgáltat hálózatot.
  • Egy SSH klienssel be lehet jelentkezni a Pi-re.
  • Egy egyszerű shell script a raspistill alkalmazással preview képet készít, amit netcat-tal browserbe továbbítva lehet megtekinteni.
  • Szintén egy shell scripttel lehet elindítani a fényképezést (5000 ms timeout).

Most ezt megpróbálom kicsit jobban kifejteni.

Az RPi-n „gyári” Raspbian fut, a fényképezéshez pedig a raspistill programot használom. Az SSH szerver szintén a „gyári”, a hostapd és az isc-dhcp-server konfigurációját pedig egyszerűen innen puskáztam:

A használt scriptek pedig letölthetők:

Nincs bennük semmi magic. A fényképezésre külön scriptek vannak (capture-*.sh), amelyekben csak a két kép közötti timeout az eltérő. Preview-t pedig a preview.sh scripttel lehet készíteni. Ez utóbbi ahhoz kell, hogy a fényképezés elindítása előtt rendesen be lehessen állítani az állványt és a kamerát.

Képek feldolgozása

A képek bizgetéséhez ImageMagick-et használok. Itt egy szokásos, csak croppoláshoz és átméretezéshez használt parancs, ami végigmegy a megadott könyvtárban található összes jpg fájlon:

mogrify -gravity northwest -crop 2592x1458+0+308 +repage -resize 1920x -format png \
-path /media/szantaii/Tibor/capture/cap1_processed/ /media/szantaii/Tibor/capture/cap1/*.jpg

Egy másik paraméterezéssel már a színeket is állítgattam (ennek az eredménye látható a poszt végén):

mogrify -gravity northwest -contrast -contrast -color-matrix "1.2 -0.1 -0.1 -0.1 1.2 -0.1 -0.1 -0.1 1.2" \
-crop 2592x1458+0+243 +repage -resize 1920x -format png \
-path /media/szantaii/Tibor/capture/cap28_processed_enhanced/ /media/szantaii/Tibor/cap28/*.jpg

Az utolsó példában pedig egy 1,6 fokos forgatás, vágás és átméretezés van:

mogrity -gravity center -background "rgb(0,255,0)" -rotate "1.60" +repage -gravity northwest \
-crop 2446x1376+54+176 +repage -resize 1920x -format png \
-path /media/szantaii/Tibor/capture/cap30_processed/ /media/szantaii/Tibor/capture/cap30/*.jpg

A felsoroltakon kívül még az ImageMagick -sigmoidal-contrast operátorával „játszottam”.

Az eddigi parancsokkal csak a képeket dolgoztam fel. A képekből a videót pedig FFmpeg-gel fűzöm össze. A végeredményt 30 és 60 fps-be is ki szoktam renderelni, hogy lássam melyik néz ki jobban. A 30 és a 60 fps generálása között csak annyi a különbség, hogy az FFmpeg-nek meg kell adni, hogyan értelmezze a bemenetként szolgáló képeket, vagyis az -r kapcsoló után 30-at vagy 60-at kell írni.

ffmpeg -r 30 -i %06d.png -vcodec libx264 -vprofile high444 -vlevel 4.2 -pix_fmt yuv420p ~/Desktop/test_30fps.mp4
ffmpeg -r 60 -i %06d.png -vcodec libx264 -vprofile high444 -vlevel 4.2 -pix_fmt yuv420p ~/Desktop/test_60fps.mp4

Hirtelen (az elmúlt másfél órában) ennyi jutott eszembe.

Megosztás, like stb.

Raspberry Pi stencil

Nem a stencilen. Azon Király András dolgozott: aprólékos munkával kivágta az 5 cm magas mintát, és ráfújta arra a dologra, amin „dolgozom”.

A legutóbbi befuccsolt projektem után, arra gondoltam, hogy valami egyszerűbbel próbálkozom: építek egy hordozható kamerát. Mindehhez egy Raspberry Pi-t, a hozzá tartozó kamera modult, néhány újratölthető elemet és egy hermetikusan zárható ételdobozt használtam fel.

Raspberry Pi camera Raspberry Pi camera

A célom, hogy kihozzam a maximumot a Raspberry Pi kamera moduljából, hogy megmutassam… Valamit, amit még meg kell, hogy fogalmazzak. Igazából ez nekem hobbi és játék. Szeretnék egy érdekes, Budapestet bemutató timelapse videót összerakni.

A működéséről röviden, tömören – és valószínűleg a többség számára érthetetlenül – a képek után.

Raspberry Pi camera Raspberry Pi camera
Raspberry Pi camera Raspberry Pi camera
Feeding Raspberry Pi through GPIO

A táp 2 × 4 db sorban kötött 1.2 V-os 2500 mAh-ás akkumulátor párhuzamosan kötve. Így jön össze a 4.8 V és az 5000 mAh, amivel kb. 4,5–5 órát tényleg ki is bír a Pi.

A fényképezés mobiltelefonról vezérelhető:

  • A Pi egy USB-s WiFi modul hostapd és isc-dhcp-server segítségével szolgáltat hálózatot.
  • Egy SSH klienssel be lehet jelentkezni a Pi-re.
  • Egy egyszerű shell script a raspistill alkalmazással preview képet készít, amit netcat-tal browserbe továbbítva lehet megtekinteni.
  • Szintén egy shell scripttel lehet elindítani a fényképezést (5000 ms timeout).

A következő playlistben láthatók 30 és 60 fps-sel lejátszva az eddig készített felvételek. Tudom, hogy nem jó az optika – hisz ez csak egy kis fix fókuszos „vacak” –, amatőr stb., de mint mondtam, ez nekem hobbi és játék. Remélem, azért másnak is tetszik majd az eredmény.

Végül álljon itt a Raspberry Pi Foundation-t vezető Eben Upton előadása a napokban tartott LinuxCon North America 2013 konferenciáról. (Nagyon jó.)

Megosztás, like stb.

About a month and a half ago I planned to build a Raspberry Pi controlled car. The idea was to control it through WiFi with live video feedback. Unfortunately the car won’t be built due to lack of money and time, etc.

However I gathered a little experience during this “project”, so I’m sharing it through a guide on how to put together all the necessary hardware and software parts together. First, though, here are the main weaknesses of my setup:

  • The live video feed takes about 30–50% the Pi’s CPU, depens on motion.
  • High lag (up to 2 seconds).
  • Jittery software PWM.

In sum, this guide shows how to control a DC and a servo motor with live video feedback, but the end result will be slow and imprecise.

Hardware

I planned to use two motors for the car, a DC motor for driving and a servo motor for steering. I followed The Adafruit Learning System’s guides for controlling a DC and a servo motors using the Raspberry Pi, so I won’t go into the details of the hardware setup and PWM signaling.

I combined the circuit diagrams of the two guides into one using Fritzing. You can download the Fritzing format of the diagram, it’s included in the downloadable tarball (doc directory) towards the end of the post.

Circuit diagram

Software

The idea was to control the car through a simple webpage with embedded live video. This had set the course which led me to use the following software setup.

Architectural diagram

Note: As for the OS I stayed with Raspbian, and since I didn’t have a camera board I used a webcam.

Necessary packages

First let’s install the necessary packages.

$ sudo apt-get install subversion libjpeg8-dev imagemagick python-rpi.gpio lighttpd

Subversion will be needed to checkout MJPG-Streamer’s source from SourceForge, while ImageMagick and libjpeg8-dev are needed for building MJPG-Streamer. RPi.GPIO is a Python package which we’ll use to control the GPIO pins, and lighttpd will serve the web page to the client.

MJPG-Streamer

Now we’ll checkout MJPG-Streamer’s source from SourceForge, enter the proper directory, modify the Makefile, and build MJPG-Streamer.

$ svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer/mjpg-streamer
$ sed -i 's/$(CC) $(CFLAGS) $(LFLAGS) $(OBJECTS) -o $(APP_BINARY)/$(CC) $(CFLAGS) $(OBJECTS) $(LFLAGS) -o $(APP_BINARY)/g' Makefile
$ make

If MJPG-Streamer was built successfully, edit your /etc/rc.local file.

$ sudo nano /etc/rc.local

Add the following lines right before the exit 0 statement. This command will launch MJPG-Streamer at system startup.

1
2
3
4
5
6
# Start MJPG-Streamer on multiuser runlevels
/home/pi/mjpg-streamer/mjpg-streamer/mjpg_streamer \
-i "/home/pi/mjpg-streamer/mjpg-streamer/input_uvc.so \
-f 30 \
-r 640x480"
\
-o "/home/pi/mjpg-streamer/mjpg-streamer/output_http.so"

Lighttpd

Edit lighttpd’s config file.

$ sudo nano /etc/lighttpd/lighttpd.conf

Make sure that lighttpd’s document root is the /var/www directory.

server.document-root        = "/var/www"

Add the following lines to the end of the file. These will load the CGI module, create an error log at /var/log/lighttpd/breakage.log, run Python scripts with a “custom” binary, and map the /usr/lib/cgi-bin/ directory to the document root as cgi-bin/.

server.modules             += ( "mod_cgi" )
server.breakagelog          = "/var/log/lighttpd/breakage.log"
cgi.assign                  = ( ".py" => "/usr/bin/python-root" )
alias.url                   = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

Make lighttpd start on system startup, and restart lighttpd to use the updated configuration.

$ sudo update-rc.d lighttpd defaults
$ sudo service lighttpd restart

Nasty Python hack

I was using RPi.GPIO version 0.5.3a for controlling the GPIO pins and at the moment RPi.GPIO needs root permission to do this. So I needed to run the Python scripts as root, but since lighttpd can not be run as root – which would be a sechole – I needed to hack a little bit.

I found the solution in Dav’s Raspberry Pi – Controlling GPIO from the Web post: I made a copy of Python’s executable and gave it the setuid attribute.

$ sudo cp /usr/bin/python2.7 /usr/bin/python-root
$ sudo chmod u+s /usr/bin/python-root

Note: All Python scripts executed by lighttpd will now run as root. DO NOT USE THIS ON ANY PUBLIC SERVER AS THIS IS “A POTENTIALLY DANGEROUS TECHNIQUE”.

Control scripts

You can download the GPIO control scripts and the client web site by either clicking the link below or typing the following command.

$ wget http://sidenote.hu/wp-content/uploads/2013/07/motorcontrol.tar.gz

Now all we have to do is to extract the archive, copy all the files to the proper places, and add some permissions.

$ tar -xvzf motorcontrol.tar.gz
$ cd motorcontrol
$ sudo cp cgi-bin/* /usr/lib/cgi-bin/
$ sudo chmod +x /usr/lib/cgi-bin/*.py
$ sudo cp -R www/* /var/www/

The code in the archive is mostly uncommented especially the JavaScript part, but it’s not complicated.

The client side uses jQuery, so you’ll have to download jQuery 2.0.2 minified and copy it to /var/www/js/, or use the following command.

$ sudo wget http://code.jquery.com/jquery-2.0.2.min.js -O /var/www/js/jquery-2.0.2.min.js

The final step is to download a HTML5 CSS reset and place it in /var/www with the name reset.css.

$ sudo wget http://reset5.googlecode.com/hg/reset.css -O /var/www/reset.css

Using the software

If everything was setup correctly then all you have to do is to enter your Pi’s IP in your browser’s address bar, and you should see the webpage with the controls and the live video.

Controlling motors with mouse Controlling motors with keyboard

You can either use the mouse or the keyboard to control the motors. If you use the mouse, then you can turn the servo by clicking on the left or right arrows (this will toggle the direction), and drive motor by holding down left click on the forwards or backwards arrow. When you use the keyboard you have to keep the arrow keys pressed to turn or drive the motors.

Megosztás, like stb.

Crazyflie

Megosztás, like stb.

5. Retro video- és kvarcjáték kiállítás

Inkább képes beszámoló lesz ez, mintsem leírnám mi volt. Annyit mégis, hogy jó volt látni, ahogy a kisgyerekek élvezettel tolták a Wizard of Wor-t, a Super Mario-t, vagy a Pong-ot.

Kvarcjátékok

Orosz csodák Kvarcjátékok Mortal Kombat kvarcjáték
Kinyitható Nintendo megoldás Kétjátékos Nintendo cucc kontrollerrel Super Mario karóra – kéne!

Néhány régi gép

ZX gépek További ZX csodák Commodore
Amiga Híradástechnika Szövetkezet HT1080Z Iskolaszámítógép Magyar Pong!

5. Retro video- és kvarcjáték kiállítás

Apple

Newton Macintosh SE Macintosh PowerBook Duo 2300c

A képekért köszönet Rednek.

Megosztás, like stb.

Valamint egy egész alapos poszt az egész gyártási folyamatról:

Pete Lomas is a trustee of the Raspberry Pi Foundation, and designed the final hardware that turned into the Raspberry Pi. We’ve had so many questions from you about the manufacturing process that Pete decided to put this post together—he’s been working on it for a couple of months, and we’re very, very grateful. Thanks Pete—and thank you to everybody at the Sony factory!

Sony, the Pi makers – a post from Pete Lomas

Megosztás, like stb.

A legutóbbi kernelfrissítés után vettem észre, hogy akárhányszor újraindítom a Raspberry Pi-t mindig ki kell húznom és újra be kell dugnom a billentyűzet USB vevőjét, hogy működjön.

1
2
$ uname -a
Linux raspberrypi 3.2.27+ #160 PREEMPT Mon Sep 17 23:18:42 BST 2012 armv6l GNU/Linux

Mondjuk ez egészen addig nem is zavart, amíg csak SSH-n értem el a RasPi-t, de most, hogy néha odaülök elé és LHX-et játszok rajta ez így elég gáz.

Íme egy workaround. A következő néhány sort az /etc/rc.local fájlban kell elhelyezni közvetlenül az exit 0 sor elé.

1
2
3
# Reload 'hid-logitech-dj' kernel module to get the Logitech K400 Keyboard work properly after startup
rmmod hid-logitech-dj
modprobe hid-logitech-dj

A megoldásra a Raspberry Pi fórumban bukkantam rá.

Megosztás, like stb.

Alant látható a Raspberry Pi-on futtatott OpenTTD szerver teljesítményadatai (processzor-, és memóriahasználat). Az ábrából kiderül, hogy egész jól bírta a RasPi a terhelést.

A képre kattintva pdf-ben is megtekinthető a diagram, lent pedig a kirajzoló LaTeX fájlt lehet letölteni.

Megosztás, like stb.

Pár napja dedikált OpenTTD szervert futtatok a Raspberry Pi-omon. Bárki játszhat rajta, a szerverek között [HU] RPiTTD néven szerepel. Mérsékelt égövi, 64×64-es térkép, egy AI (OtviAI) két AI, villamosok és sokféle közúti jármű (lovaskocsi is!), 2000–2050. Ezek vannak.

A térkép azért ilyen kicsi, mert a RasPi nem egy erőgép, és a játék vége felé, ha többen játszanak, a processzorhasználat simán felmegy 70% fölé is. A kis térkép ne riassza vissza a hardcore OpenTTD játékosokat (ha van ilyen), mert a helyszűke miatt igazi kihívás az AI és egy-két másik játékos mellett elférni a mapon.

Igazából arra vagyok kíváncsi, hogy mit bír a RasPi. Mérem az OpenTTD processzor és memóriahasználatát. Csinálok majd szép grafikont, ha lesz elég mért adat. Addig is játsszatok!

Megosztás, like stb.