Recreativa dards, darts-machine

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Projecte a /home/joan/projectes/recreativa_dards.

Hi ha dos possibles solucions. Una primera solució és òptica.

El projecte està basat en:

Discussió:

L'altra solució està basada en ESD Foam: Electrostatic Dissipation Foam:

El projecte que es descriu en aquest enllaç funciona i és un tema per explorar:

Per trobar el ESD Foam (material antiestàtic i que és resistiu):

C. Gomis,1
08023 BARCELONA
Tel. 93 351 61 51
Fax 93 352 38 45
info@estanflux.com

Una alternativa és fer-se un mateix el material conductor. És interessant mirar el següent enllaç. Per ex, seria interessant provar barrejar cola de contacte amb pols de grafit, i empestifar una fusta o un suro, a veure si funciona...

Trobar suro a Barcelona:

Enllaços

Hi ha gent fent el mateix projecte.

Grup discussió del Facebook: DIY steel darts scoring

Display

En les màquines bartop arcade s'utilitza una pantalla d'ordinador de 15-17 (entrada VGA), amb tots els problemes que comporta la conversió HDMI a VGA.

En el cas del joc de dards, la pantalla de 15 és massa gran i no és necessària. El millor són els monitors TFT de 7 que s'utilitzen en els cotxes.

   http://www.raspberrypi.org/forums/viewtopic.php?f=41&t=15273
   http://www.ebay.es/itm/7-Pantalla-en-Color-TFT-LCD-Monitor-Coche-Car-DVD-Camara-de-Marcha-Atras-/171567590342?pt=LH_DefaultDomain_186&hash=item27f239abc6 

Són més petits (fàcils d'integrar en el moble), la resolució és suficient, i no són cars.

Habilitar la càmera a la Raspberry Pi

sudo apt-get update
sudo apt-get upgrade
sudo raspi-config
(Habilitar el mòdul de la càmera)

OpenCV a la Raspberry Pi

Para aquellos que nos gusta toquetear con CV (Computer Vision o Visión Computerizada) OpenCV es un regalo caído del cielo. Se trata de una sencilla pero muy potente librería que dispone de infinitud de algoritmos de análisis de vídeo, imagen, reconocimiento de patrones, objetos, rostros, etc. Hoy vamos a instalar OpenCV en una Raspberry Pi.

OpenCV es una librería de Visión por Computador y Análisis de Imagen, 100% de código libre. Con pocas líneas de código es posible realizar operaciones complejas tales cómo identificar personas en movimiento (¡lo cuál es ideal para construir adorables torretas automáticas!), detectar objetos en movimiento y separarlos del fondo estático, encontrar rostros humanos en una imagen…

sudo apt-get install libopencv-dev python-opencv
sudo apt-get -f install
sudo apt-get install libopencv-dev python-opencv
python
import cv2

Llibreria RaspiCam C++ API

RaspiCam: C++ API for using Raspberry camera with/without OpenCv. És a dir, per utilitzar RaspiCam no cal tenir instal.lar OpenCV, però si està instal.lat, perfecte, també es pot utilitzar (mirar l'enllaç).

Primer de tot hem d'actualitzar el firmware:

$ sudo rpi-update
$ sudo apt-get install cmake

Descarreguem la llibreria: (la versió 0.0.5 no ha funcionat)

$ http://downloads.sourceforge.net/project/raspicam/raspicam-0.0.7.tgz
$ tar xvzf raspicam-0.0.7.tgz
$ cd raspicam-0.0.7
$ mkdir build
$ cd build
$ cmake ..

Finally compile, install and update the ldconfig

$ make
$ sudo make install
$ sudo ldconfig

Funcionen els fitxers d'exemple, raspicam_test i raspicam_cv_test, i també:

$ g++ simpletest_raspicam.cpp -o simpletest_raspicam -I/usr/local/include -lraspicam -lmmal -lmmal_core -lmmal_util -L/opt/vc/lib
$ ./simpletest_raspicam

$ g++ simpletest_raspicam_cv.cpp -o  simpletest_raspicam_cv -I/usr/local/include/ -lraspicam -lraspicam_cv -lmmal -lmmal_core -lmmal_util -lopencv_core -lopencv_highgui -L/opt/vc/lib
$ ./simpletest_raspicam_cv

Aquests exemples també es poden compilar amb cmake:


For cmake users,  create a file named CMakeLists.txt and add:
#####################################
cmake_minimum_required (VERSION 2.8) 
project (raspicam_test)
find_package(raspicam REQUIRED)
add_executable (simpletest_raspicam simpletest_raspicam.cpp)  
target_link_libraries (simpletest_raspicam ${raspicam_LIBS})
#####################################
 
Finally, create build dir,compile and execute
mkdir build
cd build
cmake ..
make
./simpletest_raspicam

Octave a la Raspberry Pi per a processat d'imatges

Referència:

$ apt-cache policy octave
octave:
 Installed: (none)
 Candidate: 3.6.2-5
 Version table:
    3.6.2-5 0
       500 http://mirrordirector.raspbian.org/raspbian/ wheezy/main armhf Packages

Instal.lem:

$ sudo apt-get update
$ sudo apt-get install octave

Paquets relacionats amb octave:

$ apt-cache search octave-

D'entrada m'interessen els següents paquests, que instal.lo:

  • liboctave-dev - Development files for the GNU Octave language
  • octave-general - provide extra general functions for Octave
  • octave-image - image manipulation for Octave

Per exemple, per fer detecció de vores:

I = imread ("raspicam_cv_image.jpg");
S = edge (I, "Sobel");
imwrite (S, "raspicam_cv_image_edge.jpg");

Ara bé, quan vull utilitzar imabsdiff per fer la diferència entre dues imatges em dóna un error, com si la funció imabsdiff no estigués instal.lada, quan de fet està dins el paquet octave-image:

raspberry error: `imabsdiff' undefined near line

Ara bé, el processament de les imatges no cal fer-lo amb octave, es pot fer directament amb opencv.

Python i OpenCV

$ sudo apt-get install libopencv-dev python-opencv

(ja estan instal.lats)

OpenCV has released two types of Python interface called cv and cv2. If you are googling for further information it's worth keeping this in mind. We are going to use cv2 in this tutorial.

script detectar_monedes.py:

import os
import cv2
import math

##Resize with resize command
def resizeImage(img):
    dst = cv2.resize(img,None, fx=0.25, fy=0.25, interpolation = cv2.INTER_LINEAR)
    return dst

##Take image with Raspberry Pi camera
os.system("raspistill -o image.jpg")

##Load image
img = cv2.imread("/home/pi/image.jpg") 
grey = cv2.imread("/home/pi/image.jpg",0) #0 for grayscale

##Run Threshold on image to make it black and white
ret, thresh = cv2.threshold(grey,50,255,cv2.THRESH_BINARY)

##Use houghcircles to determine centre of circle
circles = cv2.HoughCircles(thresh,cv2.cv.CV_HOUGH_GRADIENT,1,75,param1=50,param2=13,minRadius=0,maxRadius=175)
for i in circles[0,:]:
    #draw the outer circle
    cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),2)
    #draw the centre of the circle
    cv2.circle(img,(i[0],i[1]),2,(0,0,255),3)

##Determine co-ordinates for centre of circle
x1 = circles[0][0][0]
y1 = circles[0][0][1]
x2 = circles[0][1][0]
y2 = circles[0][1][1]
##Angle betwen two circles
theta = math.degrees(math.atan((y2-y1)/(x2-x1)))

##print information
print "x1 = ",x1
print "y1 = ",y1
print "x2 = ",x2
print "y2 = ",y2
print theta
print circles

##Resize image
img = resizeImage(img)
thresh = resizeImage(thresh)
##Show Images 
#cv2.imshow("thresh",thresh)
#cv2.imshow("img",img)

cv2.imwrite("/home/pi/thresh.jpg",thresh)
cv2.imwrite("/home/pi/img.jpg",img)

cv2.waitKey(0)
$ python detectar_monedes.py 
x1 =  475.5
y1 =  1139.5
x2 =  1421.5
y2 =  1039.5
-6.03422715184

C++ i OpenCV

Està explicat en aquestes dues entrades:

Una ronda de dards consisteix en què el jugador tira 3 dards. L'algorisme per detectar la posició dels dards bàsicament seria:

  1. parteixo d'una captura dels dartboard sense dards
  2. Les càmeres (hi ha dues càmeres) van fent captures periòdiques del dartboard.
  3. faig la diferència entre la imatge original i la nova captura. Si és que hi ha diferència, és que s'ha detectat un dard.
  4. calculo la posició del dard. Agafo aquesta imatge com a referència.
  5. Capturo i torno a fer la diferència. Es detecta el segon dard.
  6. Capturo i torno a fer la diferència. Es detecta el tercer dard.
  7. Recollim els dards i anem al següent torn.

Detectar el dard amb materials resistius (descartat)

nota. a la drogueria del C/Providència tenen làtex. A Dalmau tenen pedres de colofònia.

Una alternativa al reconeixement d'imatges és tenir sota el taulell dels dards una malla elèctrica o material resistiu, de manera que es pugui saber on es punxa sobre la malla. Amb els dards, però, aquesta malla es farà malbé, i és serà difícil de substituir.

Una possibilitat és utilitzar material ESD. En aquesta línia, una opció interessant és utilitzar una pasta feta a base de grafit (conductora), tal com s'explica en els links de més amunt. He comprat el grafit a la drogueria Dalmau (C/Villarroel). La idea és barrejar el grafit amb cola blanca o latex (la cola blanca està basada en làtex). També hi ha làtex a la drogueria Dalmau. El resultat hauria de ser que quan es solidifiqui no faci esquerdes.

1a prova. Cola blanca amb grafit. Efectivament no fa esquerdes, però la pasta (que és fàcil d'untar) passa a ser molt resistiva (de l'order de mega-ohms). Tanmateix, la resistència depèn de la quantitat de grafit.

2a prova. Cola blanca amb grafit, però ben saturat de grafit. Com era d'esperar, tendeix a fer esquerdes. Perd l'elasiticitat que caracteritza el làtex (la cola blanca està basada en làtex). (Em sembla que es pot soldar un electrode, TBD)

3a prova: cola blanca + sal dissolta + grafit. És una solució de compromís interessant. Tanmateix, perd la resistència linial i passa a ser conductor (falten més proves). (Em sembla que es pot soldar un electrode)

Totes aquestes proves s'haurien de provar amb làtex en comptes de cola blanca.

4a prova. I què tal utilitzar un gel de la dutxa? No fa esquerdes i és resistiu, per tant és interessant. La única cosa és que no és prou elàstic i no es pot soldar un electrode.

Conductive paints and inks and glues: (link interessant)

Electrònica

En l'article de referència es veu com són necessaris 4+22=26 entrades analògiques. Les entrades han de ser analògiques perquè si dos darts estan en el mateix sector, s'ha de poder detectar una diferència de tensió entre el primer i el segon dart (i si ho fes digitalment 0 o 1 això no podria ser). Per tant el repte és com aconseguir 26 entrades analògiques.

La idea és utilitzar 4 xips MCP3008 (4x8=32 entrades). I els xips MCP3008 incorporen el protocol SPI igual que la RPi. Però el problema és que de forma nativa només tenim dues adreces SPI a la RPi, i només podríem utilitzar dos xips MCP3008. Això es pot solucionar amb un decodificador 1-to-4 (el 74HCT139), que significa que l'entrada va a una de les 4 sortides, en funció dels pins A0 i A1 que codifiquen una de les 4 sortides.

An option is to use the 74HC139.
Connect 2 output enabled GPIO pins to A and B.
And a /SPI0_CE line to G.
This will give you 4 SPI /CS lines per SPI0_CE

La manera com funciona el 74HC139 és que amb A0 i A1 seleccionem la sortida, i el que tindrem a la sortida és el valor de G/E (la nomenclatura és variable). Per tant, utilitzant dos pins GPIO de sortida podem seleccionar 4 xips MCP3008 que ens dónen 4x8=32 entrades analògiques, utilitzant una sola línia CE de la RPi. També puc utilitzar les dues línies, però tant se val, perquè necessitaré 4 xips MCP3008.

La manera com es farà l'escombrat és un problema únicament de software. Vaig canviat els valor dels dos pins GPIO de sortida (selecciono un dels xips), i llegeixo les 8 entrades analògiques. I així vaig fent dins del bucle principal del programa, que té per missió detectar darts.

Havia llegit valors del xip MCP3008 des de la RPi al projecte del Temco.

Hem de vigilar molt a l'hora d'escollir el xip 74HCT139, doncs vull que tota la meva lògica vagi a 3.3V perquè aquest és el valor que ha de tenir les entrades GPIO i també és la lògica del MCP3008. No tots els xipus 74HC139/74HCT139 que es troben a Farnell funcionen.

  • ref Farnell: 1739823: Vcc de 4.5 a 5.5V

És important mirar el datasheet. Per ex, en el 382036 Recommended operating conditions diu que supply voltage és entre 4.5 i 5.5, però de fet el mínim és 2.5. I això és important perquè jo el vull alimentar des dels 3,3V (igual que el MCP3008).

  • ref Farnell: 1105977
Supply Voltage Range, V
CC
HC Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2V to 6V
HCT Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.5V to 5.5V
  • ref Farnell: 1163643: Supply voltage range, VCC −0.5 V to 7 V

Ara bé, de fet no hi hauria d'haver cap problema en alimentar el 74HCT139 a 5V. El tema és que a la sortida hi ha el mateix valor que a l'entrada. I encara que alimenti el xip a 5V, si alimento l'entrada a 3,3V, aleshores suposo que a la sortida també tinc 3,3V (o potser 5V). Mirar el datasheet, o bé fer proves.

Webcams a la Raspberry Pi

Logitech QuickCam Express

NOTA. S'ha provat amb la RPi B+ i la RPi3, obtenint resultats similars. La resolució que s'aconsegueix és de 352x288 (S561) i 176x144 (SBRG8). Amb la RpiB+, S561 funcionava i després va deixar de funcionar (o només funcionava la primera vegada). En canvi, amb la Rpi3 (amb openCV 3.0.1 acabat d'instal.lar, tot i que no té res a veure), funciona correctament. Tanmateix, la càmera és bastant senzilla i no dóna molt resolució i qualitat.

La Rasperry Pi té les webcams oficials, però seria molt més econòmic si puc utilitzar webcams USB, doncs ara van barates i es poden trobar per exemple a Wallapop.

A més, podria conenctar dues càmeres directament a una sola Raspberry Pi (potser s'haurà d'utilitzar una USB Hub, alimentació externa). En qualsevol cas, s'han de fer proves.

En l'enllaç hi ha una llista llarga de càmeres que funcionen.Escullo per fer proves la següent:

  • Logitech QuickCam Express (861037-0000 V-UB2 046d:0840 raspbian/wheezy)

A una resolució de 320x240, Works out of the box. Runs on the model B+ without a powered hub. Verified with fswebcam. /dev/video0

La baixa resolució de 320x240 potser ja és suficient pel propòsit que vull.

$ lsusb
...
Bus 001 Device 004: ID 046d:092f Logitech, Inc. QuickCam Express Plus
$ dmesg
...
[  165.055219] usb 1-1.4: new full-speed USB device number 4 using dwc_otg
[  165.162061] usb 1-1.4: New USB device found, idVendor=046d, idProduct=092f
[  165.162098] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  165.162114] usb 1-1.4: Product: Camera
[  165.162127] usb 1-1.4: Manufacturer:         
[  165.237860] media: Linux media interface: v0.10
[  165.260612] Linux video capture interface: v2.00
[  165.271525] gspca_main: v2.14.0 registered
[  165.279089] gspca_main: spca561-2.14.0 probing 046d:092f
[  165.305221] input: spca561 as /devices/platform/bcm2708_usb/usb1/1-1/1-1.4/input/input0
[  165.307647] usbcore: registered new interface driver spca561

$ ls -la /dev/video0
crw-rw---T 1 root video 81, 0 Dec 12 22:04 /dev/video0

Instal.lo fswebcam:

$ sudo apt-get install fswebcam

Faig una primera prova:

$ fswebcam hola.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'hola.jpg'.

funciona correctament. També:

$ fswebcam  -i 0 -d v4l2:/dev/video0  --no-banner  --jpeg 95  --save test.jpg
$ fswebcam -d v4l2:/dev/video0 -i 0 --list-controls
--- Opening v4l2:/dev/video0...
/dev/video0 opened.
Available Controls        Current Value   Range
------------------        -------------   -----
Brightness                25 (60%)        -128 - 127
Hue                       64 (50%)        1 - 127
Exposure                  700 (29%)       1 - 2372
Gain                      63 (24%)        0 - 255
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
There are unsaved changes to the image.

Fitxer de configuració. Hi ha bastantes opcions:

$ joe ~/.fswebcam.conf

#background
#log fsout.log
device v4l2:/dev/video0
input 0
verbose
#loop 5
fps 24
frames 1
skip 10
jpeg 85
#deinterlace
#invert
#greyscale
resolution 352x292
scale 704x584
palette SGRBG8
top-banner
banner-colour #B929518C
line-colour #0029518C
text-colour #00FFFFFF
set sharpness=50%
set brightness=60%
set contrast=13%
font /usr/share/fonts/truetype/droid/DroidSerif-Regular.ttf
shadow
#title "Raspberry Pi WebCam"
#subtitle "Logitech QuickCam Express"
#timestamp "%d-%m-%Y %H:%M:%S (%Z)"
#info "Info"
save picam.jpg
$ fswebcam -c ~/.fswebcam.conf
...
src_v4l2_set_pix_format,541: Device offers the following V4L2 pixel formats:
src_v4l2_set_pix_format,554: 0: [0x31363553] 'S561' (S561)
src_v4l2_set_pix_format,554: 1: [0x47524247] 'GBRG' (GBRG)
unable to find a compatible palette format

he de ficar

palette S561

Simplifico al màxim el fitxer de configuració:

device v4l2:/dev/video0
input 0
verbose
no-banner
fps 24   
frames 1 
jpeg 85  
resolution 352x288
palette S561
set sharpness=50%
set brightness=60%
set contrast=13%  
save picam.jpg  

Si fico 640x480, veig quina és la màxima resolució suportada per defecte: 352x288, i per tant aquesta és la que fico en el fitxer de configuració, en comptes de 320x240:

$ fswebcam -c ~/.fswebcam.conf
...
Adjusting resolution from 640x480 to 352x288.

Paleta SGBRG8, S561

Ha passat una cosa curiosa. La paleta S561 que funcionava, ara l'endemà ja no funciona (RPi B+). I ara la paleta que funciona és SGBRG8 (però compte! no és SGRBG8).

També és important jugar amb els paràmetres de sharpeness, brightness i contrast.

D'altra banda, sembla ser que quan les condicions de llum són fosques, S561 sí que funciona (?, TBD)

Using palette SGBRG8
Adjusting resolution from 352x288 to 176x144

El problema és que queda una resolució bastant petita...

  • S561: resolució de 352x288
  • SGBRG8: resolució de 176x144

Webcams (HD) a la Raspberry Pi II. Compra

Miro webcams a pccomponentes i que siguin compatibles amb la Raspberry Pi:

Hi ha dues candidates:

  • Logitech Webcam C170 (raspbian/wheezy) 1024x760 - 17,99e
  • Creative Live! Cam Sync HD (raspbian/wheezy) 1280x720 - 15,95e - Works out of the box. Autoexposure works well both indoors and outdoors. By default the image is bit too software enhanced (they call it "sharpness"), but this "sharpness" level can be set to a lower level via fswebcam tool.

Compro la Creative Live! Cam Sync HD

Per fer una captura de pantalla:

$ ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -ss 0:0:2 -y -frames 1 /home/joan/out.jpg

Efectivament, té una resolució de 720 (1280x720, HD), i la qualitat és prou bona.

PiNoIR camera

I d'altra banda també disposo de la PiNoIR, la càmera d'infrarrojos de la RPi. Per fer-la servir, recordar que s'ha d'habilitar el mòdul de la càmera a raspi-config.

La manera més senzilla de capturar una imatge és:

$ raspistill -o image.jpg

i la imatge obtinguda té una resolució de 1592x1944

Així doncs, aquesta càmera funciona correctament, però no apareix llistada a /dev/videoX, i és que la manera d'accedir a aquesta càmera és diferent.

Disseny

La geometria del dartboard:

Consideracions per al software

Juegos 501 M/OUT 50/50 y cricket 

http://clubdardostumismo.jimdo.com/reglamento/
PARTIDO: Un partido entre individuales, parejas, trios, equipos, etc. Está compuesto por una o más partidas (o sets)
PARTIDA / SET: Partida o set es completar un juego desde su inicio a su fin. La máquina indica el inicio el final de la misma y muestra en los marcadores las puntuaciones obtenidas por cada jugador. Una partida se compone de rondas.

Linea de tiro, situada a una distancia de 2.44 metros
Cada jugador lanzará un máximo de tres dardos por ronda.
Los dardos deben lanzarse sólo cuando la máquina indique que está preparada y los marcadores indiquen el turno correcto del jugador. Un dardo lanzado antes de tiempo no puntuará y no podrá repetirse el lanzamiento.

No es necesario que se realizen los tres lanzamientos por ronda. Se puede pasar de ronda sin tirar o lanzar menos de tres dardos. Al jugador siempre le está permitido realizar los tres lanzamientos.

"Centrar" a la diana es el lanzamiento que los jugadores hacen para determinar cual es el orden de tiro en una partida. El jugador que más se acerque al centro de la diana es el que comienza a lanzar en la primera ronda. En el caso de que un dardo quede clavado exactamente en el agujero central de la diana deberá retirarse para dar la oportudidad a los demás jugadores de empatar el lanzamiento. En caso de empate se seguirá lanzando hasta que se logre desempatar. No pueden retirarse los dardos de la diana, salvo en el caso anteriormente indicado, hasta que todos los jugadores participantes hayan lanzado su dardo. 


luz roja de cambio de jugador
botó de canvi de jugador

S'ha de dibuixar un scoreboard amb el punts que vas obtenint (si la pantalla és prou gran)

http://clubdardostumismo.jimdo.com/modalidades-de-juego/
Estan les regles del X01, Cricket i 321Zap (321, 321 Zap, 321 Zap Masters)

La diana (part central del dartboard) té dues parts: la part interior (diana doble) i l'exterior (diana simple). Tenim dues modalitats de puntuació:
*la interior val 50 i l'exterior 25
*les dues valen 50

Per al joc X01, el més comú és 301 o 501.
A l'inici haurà d'haver una manera per poder escollir el joc, i escollir els jugadors. Fins i tots es podria escollir quants equips hi ha, i fins i quants jugadors hi ha per equip.

High Score
Variante del juego que consiste en alcanzar la máxima puntuación posible en un número limitado de tiradas que normalmente son siete.

Round the Clock (Alrededor del Reloj)
Cada jugador intenta puntuar en cada número del 1 al 20 y en el centro de la diana en orden. Cada jugador puede lanzar tres dardos por turno. En caso de alcanzar el número deseado, dicho jugador deberá intentar acertar el siguiente número de la secuencia. El primer jugador que alcance la diana será el ganador. Existen algunas variantes de este mismo juego en las cuales el objetivo es el segmento de puntuación doble o triple.

Killer (Asesino)

Este juego le mostrará quiénes son realmente sus amigos. El juego puede jugarse con un mínimo de dos jugadores, pero la diversión y la dificultad aumenta con el número de jugadores. Al comenzar, cada jugador deberá seleccionar su número lanzando un dardo a la zona de objetivo. El número que obtiene cada jugador será el número que tendrá asignado durante todo el juego y dos jugadores no podrán tener el mismo número. La acción comenzará una vez que cada jugador tenga un número asignado. El primer objetivo de cada jugador consistirá en establecerse a sí mismo como un "asesino" alcanzando el segmento doble de su número. Una vez haya alcanzado su doble, será un "asesino" durante el resto del juego. A partir de entonces su objetivo consistirá en "matar" a sus adversarios alcanzando el segmento de su número hasta que pierdan todas sus "vid

darts online:
http://clubdardostumismo.jimdo.com/juegos/501/
http://pubdarts3d.com/flash/games/pub-darts-3d


Dards amb Javascript:
http://thedartsgame.sourceforge.net/

Software

En el disseny del software distingim tres potes principals:

  • Aplicació de consola. Implementar tota la lògica dels diferents jocs de dards. No hi ha res de SDL ni OpenCV. Versió 0.0.7
  • Aplicació SDL (entorn gràfic). Interfície d'usuari, botons,...
  • Detecció dels dards de forma fiable amb OpenCV.

Un cop funcioni l'aplicació bàsica de consola (v0.0.7), sobre ella li afegiré la capa de OpenCV (d'una banda), i la capa SDL (de l'altra banda). Finalment, ho posaré tot junt.

darts-machine v0.0.8

Ja puc jugar als dards des de la consola. Vol dir que no tinc dards, senzillament simulo que llenço els dards introduint la puntuació pel teclat.

  • Descàrrega versió 0.0.8 Fitxer:0.0.8.zip (Implementació de tota la lògica dels diferents jocs de dards)

callibration

NOTA: aquesta configuració al final s'ha descartat

Dartboard sectors.png

Estructura de dades que serveix per emmagatzemar els diferents sectors dins un vector. És a dir, fem un vector que emmagatzema sectors, i aquests sectors dón de diferent tipus:

  • sector D (Doble): 6 punts
  • sector A (Tipus A): 5 punts
  • sector T (Triple): 4 punts
  • sector B (Tipus B): 4 punts
  • sector SB (Single-Bull): 4 punts
  • sector DB (Doble-Bull): 3 punts
  • sector G (Global): 4 punts

darts-machine v0.0.12

Aquesta és la última versió abans de barrejar-ho amb totes les proves que he fet de detecció amb OpenCV. És una versió totalment de consola. El plan és barrejar-ho amb OpenCV, i que sigui una aplicació de consola que sigui totalment funcional. En la fase final afegiré la interfície gràfica amb SDL.

En aquesta versió 0.0.12 ja puc rectificar un dart (perquè malauradament la detecció dels dards no serà fiable al 100%). A més, es proposa els valors més propers al valor detectat. És a dir, el sistema de rectificació és intel.ligent, perquè els primers valors que es proposa són els més provables.

Posts, videos

Blog www.joanillo.org:

Construcció

He comprat aquesta tira de LEDs de 2m, que no necessita transformador:

Tira de LED 220VAC SMD5050 60LED/m 14W/m (2 metros)

Pressupost

  • RPi 3
  • LEDs
  • pantalla
  • webcams x 2
  • botons:
  • fustes:
  • ...

creat per Joan Quintana Compte, desembre 2014, desembre 2016, gener 2018