Inhoudsopgave:

Cricketscorebord met NodeMCU - Ajarnpa
Cricketscorebord met NodeMCU - Ajarnpa

Video: Cricketscorebord met NodeMCU - Ajarnpa

Video: Cricketscorebord met NodeMCU - Ajarnpa
Video: 9 Digits Cricket Scoreboard With Ac220v And DC12v Car Power Input 2024, November
Anonim
Image
Image
Het plan
Het plan

Hallo! Ik maakte onlangs kennis met de wereld van IoT (Internet of Things) toen ik het meest populaire apparaat op dit gebied tegenkwam, ESP8266. Ik stond versteld van het aantal mogelijkheden dat dit kleine en goedkope apparaat bood. Aangezien ik hier nieuw in ben, heb ik besloten om er een project van te maken en gaandeweg te leren. Dus begon ik op internet te zoeken naar projecten en ideeën.

Ik kwam een geweldig project tegen met de naam Arduino Cricket Score Ticker van W. A. Smith. In dit project wordt Arduino samen met Ethernet Shield en SD-kaart gebruikt om live cricketscores van Cricbuzz weer te geven. Dit project heeft me aan het denken gezet.

Ik kom uit India en het eerste dat in me opkomt als ik India hoor, is Cricket. Hier is cricket religie. Het wordt soms moeilijk om voor een tv te zitten om de hele wedstrijd te volgen. Dus waarom zou u niet iets maken dat het kijken van scores gemakkelijk, draadloos en draagbaar maakt. Een speciaal klein apparaatje dat voldoende informatie toont om u in één oogopslag op de hoogte te houden.

Geen cricketfan? Geen probleem! De code bevat de XML-parser die kan worden gebruikt om gegevens uit elk XML-bestand te halen. Gebruik gewoon de juiste functies om de gegevens te krijgen.

Stap 1: Het plan

Het plan
Het plan

Het plan is om het NodeMCU Development Board (met ESP-12E-module) te gebruiken om toegang te krijgen tot internet en de XML-code op te vragen bij Cricbuzz die alle informatie over de lopende/aankomende wedstrijden bevat. Deze code wordt als.xml-bestand op de SD-kaart opgeslagen. Het bestand wordt vervolgens van de SD-kaart gelezen om de vereiste gegevens uit de XML-code te ontleden. Ik zal de code van W. A. Smith gebruiken om de informatie te ontleden. Dankzij zijn inspanningen. Bekijk zijn project als je hetzelfde wilt maken met Arduino en Ethernet Shield.

Mijn idee is om het zo klein mogelijk te maken, een aangepaste PCB en een behuizing ervoor te bouwen. Laten we voor nu een prototype maken. Maar laten we eerst vertrouwd raken met de componenten die in dit project worden gebruikt.

Laten we beginnen

Stap 2: OLED-scherm

OLED-scherm
OLED-scherm
OLED-scherm
OLED-scherm

Ik besloot om voor een OLED-scherm te gaan vanwege het kleine formaat en ze zijn goedkoop verkrijgbaar. Ik gebruik een 0,96 -display dat voldoende is om de wedstrijdinformatie weer te geven. U kunt elk formaat van het display gebruiken.

Het scherm dat ik gebruik is een monochroom scherm met de SSD1306-driver en I2C (2-draads) interface. Er zijn ook SPI-versies van het display beschikbaar. Het uitvoeren ervan is een gemakkelijke taak. Download de SSD1306- en GFX-bibliotheken die nodig zijn om de beeldschermen uit te voeren. Met dank aan Adafruit voor het schrijven van deze bibliotheken.

Aansluitingen zijn heel eenvoudig.

  • GND naar GND
  • VCC naar 3.3V
  • SCL naar D1
  • SDA naar D2.

Stap 3: SD-kaart en adapter

SD-kaart en adapter
SD-kaart en adapter

SD-kaart slaat het XML-bestand van Cricbuzz op totdat alle informatie is geparseerd. Zodra de benodigde informatie is weergegeven, wordt het bestand verwijderd. Het gebruik van een SD-kaart om een XML-bestand van 10 - 20 kB op te slaan is een beetje overkill, maar het maakt het ontleden veel gemakkelijker en begrijpelijker.

Elke geheugenkaart kan worden gebruikt. Ik koos voor een micro SD-kaart vanwege de kleine vormfactor. U kunt draden rechtstreeks op de SD-kaart solderen, maar het gebruik van een breakout-bord maakt het werk eenvoudig. Opgemerkt moet worden dat alle SD-kaarten bedoeld zijn om op 3,3V te werken. Dit betekent dat het niet alleen gevoed moet worden met 3,3V, maar dat ook de communicatie tussen microcontroller en SD-kaart logisch niveau van 3,3V moet zijn. Spanning boven 3,3 V zal het DODEN! We zullen ons er geen zorgen over maken wat NodeMCU betreft, omdat NodeMCU zelf op 3.3V draait, wat prima is. Als u van plan bent een andere microcontroller met 5V logisch niveau te gebruiken, zorg er dan voor dat uw breakout-bord een ingebouwde niveauverschuiver heeft (zoals weergegeven in de afbeelding). Het converteert of 'verschuift' in feite de 5V van de microcontroller naar SD-kaartvriendelijke 3.3V. Het gebruik van level shifter samen met 3.3V (zoals ik deed) heeft geen invloed op de werking ervan.

SD-kaart gebruikt SPI-interface voor communicatie. CS- of Chip Select-pin kan worden aangesloten op een van de GPIO-pinnen. Ik koos voor GPIO15 (D8). Breng gewoon de nodige wijzigingen aan in de code als u een andere pin gebruikt dan GPIO15

  • SCK naar D5
  • MISO naar D6
  • MOSI naar D7
  • CS naar D8
  • VCC naar 3.3V
  • GND naar GND

Formatteer je SD-kaart

De bibliotheek die we gaan gebruiken ondersteunt FAT16- of FAT32-bestandssystemen. Zorg ervoor dat u de SD-kaart formatteert naar het juiste formaat.

Stap 4: Het toetsenbord maken

Het toetsenbord maken
Het toetsenbord maken
Het toetsenbord maken
Het toetsenbord maken
Het toetsenbord maken
Het toetsenbord maken

Ik wil het project zo klein mogelijk houden. Dus besloot ik om een apart bord voor het toetsenbord te maken en deze later boven het moederbord te monteren. Dit zal wat ruimte besparen.

Een kant-en-klare sleutelmatrix kan worden gekocht, maar ik had drukknoppen rondslingeren. Ook wilde ik het zo klein mogelijk maken. Een typische opstelling van het verbinden van rijen en kolommen zou in totaal 6 GPIO-pinnen nodig hebben voor een 3 x 3 matrix. Dit is best veel, aangezien het OLED-scherm en de SD-kaart ook worden aangesloten.

Google het bij twijfel! Dat is wat ik deed en een manier vond die slechts 1 pin nodig heeft om de hele matrix te besturen. Dit wordt mogelijk gemaakt met behulp van Voltage Divider Matrix. Tussen elke rij en kolom zijn weerstanden aangesloten. Wanneer een toets wordt ingedrukt, wordt een bepaalde combinatie van weerstanden in serie geschakeld, waardoor een spanningsdeler ontstaat. Raadpleeg het schakelschema. De variërende spanning wordt gelezen door de microcontroller. Elke toets zal een andere spanning produceren en dus kan gemakkelijk worden gevonden welke toets werd ingedrukt door de uitgangsspanning van de matrix te lezen. Omdat we verschillende spanningsniveaus willen lezen en nu alleen hoog en laag, hebben we een analoge pin nodig. Gelukkig is er één analoge pin met het label A0 op NodeMCU. Probleem opgelost!

Als u een matrix wilt kopen, bekijk dan de interne verbindingen die in het diagram worden weergegeven. Een matrix van elke afmeting kan worden gebruikt. Zorg ervoor dat u een weerstand van 2,2 kΩ gebruikt tussen de rijen en een weerstand van 680Ω tussen de kolommen.

Drukknoppen aansluiten

Pins 1 & 2 zijn intern verbonden. Hetzelfde geldt voor pinnen 3 & 4. Wanneer de knop wordt ingedrukt, zijn alle pinnen met elkaar verbonden. Raadpleeg de afbeelding om een idee te krijgen van het aansluiten van de schakelaars op een perfboard.

Ik heb een 3-pins mannelijke header aangesloten zodat deze later op het moederbord kan worden aangesloten.

Stap 5: Alles samenbrengen

Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten

U kunt plannen om de componenten te plaatsen waar u maar wilt. Geen beperkingen erop. Ik zal je laten zien hoe ik het deed om het compact te maken, omdat ik iets wilde dat in de handpalm past. Het kan een beetje rommelig worden, dus probeer het op mijn manier als je vertrouwd bent met solderen. Ik besloot om beide zijden van het bord te vullen zoals een tweelaagse PCB zou zijn. NodeMCU en SD-kaart breakout board aan de ene kant en OLED en toetsenbord aan de andere kant.

De uitbraak van de SD-kaart past toevallig tussen de twee vrouwelijke headers die voor de NodeMCU zijn. Ik heb de gehoekte mannelijke headers die bij het breakout-bord waren geleverd, gedesoldeerd, gedraaid en opnieuw gesoldeerd zodat de pinnen loodrecht naar beneden gaan, zoals weergegeven in de afbeelding. Toegang tot de SD-kaartsleuf wordt eenvoudiger.

Ik heb de pinnen van een 4-pins vrouwelijke header in een rechte hoek gebogen en aan de koperen kant van het perfboard gesoldeerd zoals op de afbeelding.

Bedek de soldeerverbindingen onder het toetsenbord om kortsluiting te voorkomen. Voeg een dun stuk hardschuim (ongeveer 5 mm dik) toe tussen het toetsenbord en het moederbord voor extra bescherming en stijfheid. Soldeer tot slot het toetsenbord dat we eerder hebben gemaakt. Het hebben van een soldeerbout met een spitse punt zal je werk zeker gemakkelijk maken. Het was een rommelige klus om het zo compact mogelijk te maken, maar het is uiteindelijk gelukt.

Controleer al uw aansluitingen op eventuele kortsluitingen voordat u het apparaat van stroom voorziet

Stap 6: Het toetsenbord instellen

Het toetsenbord instellen
Het toetsenbord instellen

Nadat u alle verbindingen hebt gecontroleerd, bent u klaar om uw apparaat voor de eerste keer van stroom te voorzien. Duimen! Geen magische rook? Proficiat!

Nu zijn we klaar om het toetsenbord in te stellen. Herinner de werking van het toetsenbord. Elke toetsdruk zal een andere spanning uitvoeren die naar de analoge pin van NodeMCU wordt gevoerd. ESP-12E heeft een analoog naar digitaal converter (ADC) met een resolutie van 10 bits. 2 verheven tot de macht 10 geeft 1024. Dit betekent dat we een waarde tussen 0 en 1024 krijgen voor elke ingedrukte toets. Laten we eens kijken welke metingen we krijgen. Maar eerst moeten we een klein programma schrijven om die waarden te krijgen. Open Arduino IDE, kopieer en plak de volgende code en upload deze naar NodeMCU.

int toetsenbordPin = A0;

void setup(){ Serial.begin(115200); } void loop(){ int r = analogRead(keypadPin); Seriële.println(r); }

  • Open de seriële monitor. Stel de baudrate in op 115200.
  • Druk nu op een willekeurige knop. U zou een constante meting op de seriële monitor moeten krijgen. Kleine schommelingen zijn oké. Die worden geregeld in de hoofdcode. Doe hetzelfde voor elke toets.
  • Elke toets moet een andere waarde hebben.
  • Noteer alle waarden. We zullen ze later nodig hebben.

Stap 7: Laten we coderen

Laten we coderen
Laten we coderen
Laten we coderen
Laten we coderen
Laten we coderen
Laten we coderen

Download het onderstaande Scoreboard.ino-bestand op uw computer en open het met behulp van de Arduino IDE.

Voordat je upload

1) Stel de verversingstijd voor het scorebord in. Bijvoorbeeld 15L gedurende 15secs.

2) Voer de SSID en het wachtwoord in van de router waarmee u verbinding wilt maken.

3) Breng de nodige wijzigingen aan als u ervoor kiest om de CS-pin van de SD-kaart aan te sluiten op een andere pin dan GPIO15.

4) Herinner je je de waarden die we voor alle sleutels hebben genoteerd? We moeten aan elke waarde een sleutelnummer toewijzen. Ik had je ook al verteld over de fluctuaties in de lezing. Dit komt doordat de schakelcontacten niet perfect zijn. Op den duur kan deze waarde afwijken van de huidige waarde door veroudering van contacten, waardoor extra weerstand in het circuit wordt toegevoegd en de spanning verandert. We kunnen dit probleem in de code oplossen.

We zullen een bovengrens en een ondergrens van de waarde toevoegen met een marge van 5. Ik heb bijvoorbeeld een waarde van 617 voor sleutel 1.

  • Trek er 5 vanaf. 617 - 5 = 612. Dit is de ondergrens.
  • Tel er nu 5 bij op. 617 + 5 = 622. Dit is de bovengrens.
  • Scroll naar het einde van de code. Vul de ruimte voor de twee waarden in de code in, zoals weergegeven in de afbeelding.
  • Doe dit voor elke 9 waarden.

if(r > 612 && r < 622){ keyNumber = 1; }

Wat betekent dit?

ALS de uitlezing (r) groter is dan 612 EN kleiner dan 622, dan wordt toets 1 ingedrukt. Elke waarde tussen 612 en 622 wordt behandeld als toets 1. Dit lost het probleem van fluctuerende uitlezing op.

Stap 8: De zaak bouwen

De zaak bouwen
De zaak bouwen
De zaak bouwen
De zaak bouwen
De zaak bouwen
De zaak bouwen
De zaak bouwen
De zaak bouwen

Dit is volledig optioneel. Ik dacht dat het project er netjes en compleet uit zou zien met een koffer eromheen. Zonder het juiste gereedschap voor deze klus, zou het een enorme taak voor mij worden. De behuizing is gemaakt van acryl.

Bereid de stukken voor om te lijmen door de randen glad te strijken met schuurpapier. Ik heb Fevi Kwik (Super Glue) gebruikt om alle stukjes samen te voegen. Superlijm laat een wit residu achter nadat het is uitgehard. Breng het dus alleen tussen de voegen aan. Je moet snel en nauwkeurig zijn als je met superlijm werkt, omdat het snel hardt. Acrylcement is hiervoor het meest geschikt.

Een kleine opening gemaakt om met een bestand toegang te krijgen tot de USB-poort. Het moet groot genoeg zijn om de USB-kabel in te steken.

Een 3x3 raster gemaakt op de voorkant voor de drukknoppen. Hierdoor zijn de drukknoppen moeilijk toegankelijk. Om dit probleem op te lossen, heb ik vierkante stukjes gesneden voor elke toets, zodat hun knoppen nu naar het oppervlak worden verlengd.

Na zoveel schuren, knippen, fixeren en afstellen was het dan eindelijk zover!

Stap 9: Veel plezier

Veel plezier!
Veel plezier!

Eindelijk is al het harde werk gedaan. Geef je miniscorebord een boost en blijf op de hoogte van het spel.

Na het opstarten maakt hij eerst verbinding met het toegangspunt. Initialiseert de SD-kaart. Er wordt een fout weergegeven als de SD-kaart niet is geïnitialiseerd.

Er wordt een lijst met alle wedstrijden weergegeven, samen met het wedstrijdnummer.

Selecteer het matchnummer met behulp van het toetsenbord.

De scores worden weergegeven. U kunt aanpassen wat u allemaal op het display wilt zien. Ik zou niet te diep ingaan op het uitleggen van de code. U kunt hier een gedetailleerde uitleg vinden over hoe het parseren werkt.

Om terug te gaan naar het menu, houdt u de TERUG (Toets 8)-knop ingedrukt totdat de pagina "Partituren ophalen…" wordt weergegeven.

Plannen voor de toekomst

  • Ontwerp een custom print met de ESP8266 12-E module.
  • Voeg een oplaadbare batterij toe.
  • Verbeter de code met nieuwe functies.

Ik hoop dat je genoten hebt van de build. Maak het zelf en veel plezier! Er is altijd ruimte voor verbetering en veel te leren. Kom met je eigen ideeën. Voel je vrij om eventuele suggesties met betrekking tot de build te becommentariëren. Bedankt voor het volhouden tot het einde.

Aanbevolen: