Inhoudsopgave:

Digitaal schaken - Volg uw schaakspel online - Ajarnpa
Digitaal schaken - Volg uw schaakspel online - Ajarnpa

Video: Digitaal schaken - Volg uw schaakspel online - Ajarnpa

Video: Digitaal schaken - Volg uw schaakspel online - Ajarnpa
Video: Schaken met een digitaal schaakbord (DGT) op Lichess.org 2024, Mei
Anonim
Digitaal schaken - Volg uw schaakspel online
Digitaal schaken - Volg uw schaakspel online

Ik speel al veel schaak sinds ik jong was, en aangezien het web een enorme hoeveelheid websites heeft om op te schaken tegen computers of live tegenstanders, heb ik nooit een website gevonden die jouw schaakspel bijhoudt echt in het echt spelen. Dus met dit project hoop ik dat te realiseren!

Ik hoop op:

  • De beweging van de schaakstukken kunnen volgen
  • Bekijk enkele scoreborden over eerdere games.
  • Houd de tijd bij en speel snel als een professioneel spel.

Het is een zeer complex project, want als het voltooid zou zijn, zou het 64 lichtsensoren en 8 chips nodig hebben om te lezen. Dat is al een grote taak en we tellen de andere sensoren niet eens mee.

Mijn universiteit gaf ons een grote lijst met dingen om te doen:

  1. Maak een schema voor ons project
  2. Maak een database voor het opslaan en ophalen van gegevens.
  3. Ontwerp een website met Adobe XD
  4. Maak deze website opnieuw met CSS en HTML
  5. Lees de sensoren met python
  6. Toon de sensorgegevens op de website met behulp van kolf.

In deze instructable zal ik je begeleiden op mijn reis en alle problemen en momenten van redding die ik de afgelopen weken heb meegemaakt.

Stap 1: Benodigdheden/gereedschappen

Benodigdheden, materialen en gereedschappen zijn de eerste stap naar een succesvol project!

Gereedschap:

  • Soldeerbout
  • Soldeertin
  • Tang
  • Dril machine
  • Plakband

Benodigdheden:

  • Raspberry Pi met micro SD-kaart (4GB zou genoeg moeten zijn)
  • Rasberry Pi T-schoenmaker
  • Schaakbord met stukken
  • 7 segment display (TM 1637)
  • 2 aanraaksensoren (TTP223B)
  • RFID-lezer met kaarten (MFRC522)
  • MCP3008 (Afhankelijk van hoe ver je wilt gaan, kun je voor elke MCP 8 schaakcoördinaten aflezen)
  • Lichtafhankelijke weerstand type 5288 (8 voor elke MCP die je hebt)
  • Headers (man naar man en vrouw naar man)

Als je alles moet kopen, moet de geschatte kostprijs rond de 125 euro zijn inclusief verzendkosten (alleen leveringen)!

Er is een Excel-bestand bijgevoegd met links en prijzen voor alles wat je nodig hebt!

Stap 2: Schema's en planning

Schema's en planning!
Schema's en planning!
Schema's en planning!
Schema's en planning!

De volgende stap in dit project is het maken van een schema. Ik maakte 2: Een op breadboard en een puur elektronisch. We hebben dit schema nodig om alles schoon te houden en ervoor te zorgen dat we geen onnodige dingen aansluiten!

Ik heb een programma genaamd "Fritzing" gebruikt om deze schema's te maken als iemand geïnteresseerd is.

Kleur codering:

  • Rood = voeding
  • Groen = verbinding
  • Blauw = grond

Raspberry Pi-verbindingen:

  • 3V3 => VC-lijn op het breadboard, alles van stroom voorzien
  • 5V => VCC van 7 segment display
  • GND:

    • Grond op het breadboard
    • Massa van het 7 segment display
  • GPIO4 => Klok Selecteer pin van de MCP3008
  • GPIO10 => MOSI-pin van de MCP3008
  • GPIO9 => MISO-pin van de MCP3008
  • GPIO11 => CLK-pin van de MCP3008
  • GPIO7 => SDA-pin van de MFRC522
  • GPIO19 => DIG-pin van de eerste aanraaksensor
  • GPIO26 => DIG-pin van de tweede aanraaksensor
  • GPIO20 => CLK-pin van het zevensegmentendisplay
  • GPIO21 = DIO-pin van het zevende segment display

Een paar opmerkingen over de schema's:

  • Dit schema bevat slechts 1 MCP, dit betekent dat er slechts 8 coördinaten volledig kunnen worden gelezen.
  • Ik zal GPIO-pinnen gebruiken als mijn Chip Select. Omdat er slechts 2 Chipselect-pinnen beschikbaar zijn met mogelijk 8 MCP's.
  • Het 7-segments display is er een die is voorgesteld door een leraar, er zijn slechts 4 draden nodig omdat het op zijn eigen protocol werkt.
  • De weerstanden op de digitale pin van de aanraaksensoren zijn niet volledig nodig, maar worden geadviseerd.

Uitleg over de componenten:

  • MCP met lichtsensoren:

    • Een MCP3008 is een 8-kanaals 10-bit ADC:

      • een MCP3008 leest de analoge waarde van de lichtsensoren, deze waarde is afhankelijk van de hoeveelheid licht die op dat moment op de sensor schijnt.
      • In mijn python-code ontvang ik die analoge waarde en converteer ik deze naar een 1 of 0
  • Aanraaksensoren:

    Werkt net als een knop, ik gebruik hiervoor een klasse met een callback-methode. Hierover later meer

    RFID-lezer (MFRC 522):

    • Gebruikt een specifiek protocol (SPI) met een geïnstalleerd pakket.
    • Niet moeilijk te coderen met een geïnstalleerd pakket
    • Leest de tag en retourneert de waarde van de tag
    • Je kunt ook een waarde naar een tag schrijven, dus in plaats van de hexadecimale waarde terug te geven, retourneert het bijvoorbeeld een naam

    7-segment (TM1637)

    • Gebruikt ook een geïnstalleerd pakket voor eenvoudige codering
    • Maak een variabele met een geheel getal, splits deze vervolgens op in 4 tekens en toon die tekens

Stap 3: SQL-database

SQL-database
SQL-database

De derde stap naar dit project is het creëren van een 3NF-genormaliseerde SQL-database!

Dit hebben we nodig voor:

  • Gegevens invoegen
  • Gegevens ophalen en tonen op onze website
  • Precies kunnen zien hoeveel beurten er zijn verstreken in het huidige schaakspel!

Tabellen uitgelegd:

  • Spellen

    • Hiermee wordt bijgehouden wie een bepaald spel heeft gewonnen en wanneer het spel is gespeeld
    • De primaire sleutel hier is een GameID
    • De datum heeft een standaardwaarde van de huidige datum
    • De winnaar en score worden later toegevoegd, nadat het spel is afgelopen!
  • Spelers

    • Deze worden handmatig ingevoerd, maar kunnen ook met behulp van het RFID-kaartsysteem worden ingevoerd.
    • Schrijf een naam op uw kaart, lees de kaart en plaats de naam in deze tabel
    • Het houdt ook het winst- / verliesrecord van elke speler bij, om op de website weer te geven
  • Geschiedenis (Geschiedenis)

    • Dit is de beurtgeschiedenis
    • wanneer een schaakstuk wordt verplaatst, wordt het hier bijgewerkt
    • Het heeft 3 buitenlandse sleutels, speler, spel en schaakstuk
    • de ReadDate (InleesDatum) is de datum waarop de sensor werd uitgelezen
    • ReadTime is hetzelfde als ReadDate maar met een tijdstempel
    • LocationID(LocatieID) is de naam voor de coördinaat waarop deze is gepositioneerd. bijvoorbeeld "a3"
  • Schaakstukken

    • Elk schaakstuk heeft een ID, team, naam en een status
    • Het team is 1 of 2, zwart of wit;
    • De naam van ooit stuk zou bijvoorbeeld "Pion 1" zijn
    • De status betekent dat het stuk levend of dood is!

Stap 4: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Nu we alle juiste stukjes op hun plaats hebben, kunnen we beginnen met het maken van iets!

Laten we dit deel opdelen in substappen, omdat het gemakkelijker uit te leggen is:

  • Stap 1: U wilt in elke coördinaat van uw schaakbord een gat boren zoals op de eerste afbeelding te zien is, boor ook een gat waar u de aanraaksensoren, RFID-lezer en 7 segment display wilt plaatsen.

    Vergeet niet wat gaten aan de zijkant van het bord te boren, deze zijn voor de draden van de verschillende componenten bovenop het bord. Veel boren, ik weet het

  • Stap 2: Probeer een of twee sensoren op de Raspberry Pi aan te sluiten, controleer of ze werken. U wilt ze aansluiten op de analoge MCP-lezer zoals eerder uitgelegd in stap 2 (De schema's).
  • Stap 3: Dit kan lastig en erg zenuwslopend zijn, aangezien de jumper-headers niet erg op hun plaats zitten, wil je ze misschien allemaal op het bord plakken, afzonderlijk of meerdere tegelijk. Je moet ervoor zorgen dat ze op het schaakbord blijven plakken, anders kun je de sensoren niet goed uitlezen

    TIP! Als het je gemakkelijker maakt, zou wat lijm kunnen helpen om de sensoren meer op hun plaats te houden tijdens het vastplakken, ik ontdekte dit op de harde manier

Stap 5: Software

Software
Software

Nadat je hardware hebt gemaakt die je kunt testen, gaan we proberen er code voor te schrijven! Als je mijn code wilt bekijken, ga dan naar mijn github.

Back-endEerst hebben we een aantal pakketten nodig om te installeren, ik ging door en maakte een lijst voor je:

  • kolf

    Dit is waar je python-code op draait

  • Kolf-socketIO

    Om te communiceren tussen front-end en back-end

  • numpy

    Handig voor het uitlezen van de lichtsensoren, werkt met matrix's

  • netifaces

    Om uw eigen IP-adres af te drukken op het 7-segments display

  • Kolf-CORS

    Cross-origin recourse sharing, maakt het mogelijk pakketten te delen over verschillende domeinen

Daarnaast heb ik een aantal lessen geschreven en je bent vrij om ze te gebruiken.

Voorkant

De websitecode is ook beschikbaar op mijn github-pagina!

Voor de front-end zal ik Chessboard.js gebruiken. Dit voegt een eenvoudig te gebruiken schaakbord in met gemakkelijk te verplaatsen stukken!

Alles op het bord is aanpasbaar, dus veel plezier! Nadat je de laatste versie hebt gedownload, moet je de bestanden naar je project slepen en ze koppelen aan de pagina waar je een schaakbord wilt laten zien!

Laten we daarna proberen een bord te maken, lijkt niet al te moeilijk:

Eerst in je html:

Ten tweede, in uw javascript-bestand:

bord1 = Schaakbord('bord1', 'start');

en daar heb je het, je zou nu een schaakbord moeten kunnen zien! Voel je vrij om het bord aan te passen in de CSS-bestanden!

Nu willen we wat zetten op het schaakbord zien, niet te hard. Maar we moeten het aanpassen zodat de opdracht move door de back-end wordt verzonden. Ik zal niet te veel in detail treden, maar we willen zoiets als dit doen:

new_lijst = [Data.data[0], Data.data[1];commando = new_lijst[0].concat('-', nieuwe_lijst[1]); board1.move(commando);

We ontvangen een lijst van ons back-end programma, zetten een streepje tussen de twee coördinaten en gebruiken dan het board.move commando om de zet uit te voeren!

Dat is mijn uitleg van wat we nodig hebben van de chessboard.js-plug-in, ga naar mijn github om de code zelf te bekijken

Aanbevolen: