Recreativa dards, darts-machine
Contingut
- 1 Introducció
- 2 Enllaços
- 3 Display
- 4 Habilitar la càmera a la Raspberry Pi
- 5 OpenCV a la Raspberry Pi
- 6 Llibreria RaspiCam C++ API
- 7 Octave a la Raspberry Pi per a processat d'imatges
- 8 Python i OpenCV
- 9 C++ i OpenCV
- 10 Detectar el dard amb materials resistius (descartat)
- 11 Webcams a la Raspberry Pi
- 12 Disseny
- 13 Consideracions per al software
- 14 Software
- 15 Posts, videos
- 16 Construcció
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:
- http://duino4projects.com/electronic-dartboard-learned-stop-worrying-love-ece-476/
- http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2005/mfc24/final%20project/Electronic_Dartboard_or_How_I_Learned_to_Stop_Worrying_and_Love_ECE_476.html
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
- http://www.nufesa.com/empresa_disipador_de_calor.php
- http://www.e-distronica.com/index.php?option=com_content&view=article&id=50&Itemid=60
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...
- http://www.instructables.com/id/Conductive-Glue-And-Conductive-Thread-Make-an-LED/#step0
- http://www.instructables.com/id/Make-Conductive-Glue-and-Glue-a-Circuit/
Trobar suro a Barcelona:
- http://www.barnacork.com/
- http://www.surotecnia.com/
- Leroy Merlin
- Abacus
- estalvis de suro (al Leroy Merlin, als xinos?)
Enllaços
Hi ha gent fent el mateix projecte.
- opencv-steel-darts: https://github.com/hanneshoettinger/opencv-steel-darts
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
- OpenCV_a_la_RPi
- http://robologs.net/2014/04/25/instalar-opencv-en-raspberry-pi-2/
- http://www.open-electronics.org/computer-vision-with-raspberry-pi-and-the-camera-pi-module/
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
- http://docs.opencv.org/trunk/doc/tutorials/tutorials.html
- http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html
- http://trevorappleton.blogspot.com.es/2013/11/python-getting-started-with-opencv.html
$ 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:
- parteixo d'una captura dels dartboard sense dards
- Les càmeres (hi ha dues càmeres) van fent captures periòdiques del dartboard.
- 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.
- calculo la posició del dard. Agafo aquesta imatge com a referència.
- Capturo i torno a fer la diferència. Es detecta el segon dard.
- Capturo i torno a fer la diferència. Es detecta el tercer dard.
- 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
- ref Farnell: 382036
- http://es.farnell.com/nxp/74hct139n/ic-74hct-cmos-74hct139-dip16-5v/dp/382036
É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
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
- Test1: https://youtu.be/Yf3GQtsKukA
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