Get the Flash Player to see this player.

time2online Joomla Extensions: Simple Video Flash Player Module
RaspCar 2.1v RAM

W poprzedniej wersji pokazałem jak uruchomić nasz samochód za pomocą WiFi. Niestety tamta wersja miała kilka niedociągnięć, a najważniejszą z nich było częste zapisywanie na karcie pamięci. Każda zamiana kierunku jazdy wiązała się z zapisem na karcie, w ten sposób nasza karta nie wytrzymałaby zbyt długo. Aby uniknąć zapisu na karcie należy stworzyć wirtualny dysk w pamięci RAM, czyli ulotnej pamięci komputera. Dobry opis tego jak skorzystać z RAM w Raspberry jest na stronie:

http://rembiejewski.pl/blog/raspberry-pi-ramdisk/

W systemie mamy już dodaną obsługę pamięci RAM można to sprawdzić poleceniem:

ls /dev/ -l | grep ram

Teraz wystarczy któreś z tych urządzeń zamontować w postaci dysku i przypisać je do konkretnego katalogu. Dlatego najpierw tworzymy katalog, formatujemy odpowiedni dysk ram jako 2MB i montujemy ram1 do tego katalogu:

sudo mkdir /mnt/ramdisk
sudo mkfs -q /dev/ram1 2048
sudo mount /dev/ram1 /mnt/ramdisk

Poleceniem "df -h" można sprawdzić, czy dysk został zamontowany:

df -h

Mając już przetestowaną pamięć RAM możemy dodać te polecenia przy uruchamianiu systemu. Aby tego dokonać wystarczy w pliku /etc/rc.local dodać polecenia:

sudo mkfs -q /dev/ram1 2048
sudo mount /dev/ram1 /mnt/ramdisk

Po dopisaniu tych komend resetujemy RPI komendą:

sudo shutdown -h now

Teraz wystarczy kilka modyfikacji w programie, które przekierują plik z danymi do pamięci RAM. Dzięki temu będziemy mogli swobodnie pobierać dane i zapisywać je do pliku w pamięci RAM nie niszcząc karty SD.

Doróbmy także jakieś sterowanie podobne do tego z pierwsze wersji. Najlepiej użyć do tego celu JavaScript. Dzięki bibliotekom JQuery można osiągnąć niezły efekt. Ja do testów stworzyłem program, który sczytuje położenie myszki w postaci X i Y, a następnie wysyła dane do pliku. Plik odczytywany jest przez program w C, który interpretuje współrzędne X i Y na moc silników.

index.html wygląda tak:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title> RaspCar2.0</title>
 <style>
 body {background-color: #eef; }

 </style>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta http-equiv="content-language" content="pl" />
 <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
 <div id="page">
 <img src="http://192.168.1.106:8083/?action=stream" width="640" height="480"/>
 <div id="log"></div>
 </div>
 <script>$(document).bind('mousemove',function(e){ 
 var x=0;
 var y=0;
 var resX=34;
 var resY=26;
 if (parseFloat(e.pageX)>resX*19){
 x=0;
 }else 
 {
 if (parseFloat(e.pageY)>resY*19){
 x=0;
 }
 else if (parseFloat(e.pageY)>resY*18){
 y=-9;
 }else if (parseFloat(e.pageY)>resY*17){
 y=-8;
 }else if (parseFloat(e.pageY)>resY*16){
 y=-7;
 }else if (parseFloat(e.pageY)>resY*15){
 y=-6;
 }else if (parseFloat(e.pageY)>resY*14){
 y=-5;
 }else if (parseFloat(e.pageY)>resY*13){
 y=-4;
 }else if (parseFloat(e.pageY)>resY*12){
 y=-3;
 }else if (parseFloat(e.pageY)>resY*11){
 y=-2;
 }else if (parseFloat(e.pageY)>resY*10){
 y=-1;
 }else if (parseFloat(e.pageY)>resY*9){
 y=0;
 }else if (parseFloat(e.pageY)>resY*8){
 y=1;
 }else if (parseFloat(e.pageY)>resY*7){
 y=2;
 }else if (parseFloat(e.pageY)>resY*6){
 y=3;
 }else if (parseFloat(e.pageY)>resY*5){
 y=4;
 }else if (parseFloat(e.pageY)>resY*4){
 y=5;
 }else if (parseFloat(e.pageY)>resY*3){
 y=6;
 }else if (parseFloat(e.pageY)>resY*2){
 y=7;
 }else if (parseFloat(e.pageY)>resY){
 y=8;
 }else if (parseFloat(e.pageY)<resY){
 y=9;
 }    
 
 if (parseFloat(e.pageX)>resX*18){
 x=9;
 }else if (parseFloat(e.pageX)>resX*17){
 x=8;
 }else if (parseFloat(e.pageX)>resX*16){
 x=7;
 }else if (parseFloat(e.pageX)>resX*15){
 x=6;
 }else if (parseFloat(e.pageX)>resX*14){
 x=5;
 }else if (parseFloat(e.pageX)>resX*13){
 x=4;
 }else if (parseFloat(e.pageX)>resX*12){
 x=3;
 }else if (parseFloat(e.pageX)>resX*11){
 x=2;
 }else if (parseFloat(e.pageX)>resX*10){
 x=1;
 }else if (parseFloat(e.pageX)>resX*9){
 x=0;
 }else if (parseFloat(e.pageX)>resX*8){
 x=-1;
 }else if (parseFloat(e.pageX)>resX*7){
 x=-2;
 }else if (parseFloat(e.pageX)>resX*6){
 x=-3;
 }else if (parseFloat(e.pageX)>resX*5){
 x=-4;
 }else if (parseFloat(e.pageX)>resX*4){
 x=-5;
 }else if (parseFloat(e.pageX)>resX*3){
 x=-6;
 }else if (parseFloat(e.pageX)>resX*2){
 x=-7;
 }else if (parseFloat(e.pageX)>resX){
 x=-8;
 }else if (parseFloat(e.pageX)<resX){
 x=-9;
 }
 }

 $.get("http://192.168.1.106/cgi-bin/rasp",{"X":x,"Y":y});
 $("#log").text("X=" + x + ";Y=" + y); 
 }); 
 </script>
</body>
</html>


Cały projekt można pobrać tu