Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino bingomachine met doe-het-zelf A4-formaat 7-segment displays

Componenten en benodigdheden

Pegboard
Made by Ningbo wint Handycraft2-bord voor 7-segments displays en 1 voor het scorebord
× 3
snijplank
kunststof snijplank grijs voor gebruik op het scorebord
× 1
Digitale ledstrip 5 m WS2811 met 5050 leds
veel leveranciers en merken
× 1
5m/rol DC5V ws2812b 300led Individueel adresseerbaar 60leds/m 5050 RGB
veel leveranciers en fabrikanten
× 1
Audiokabel
te gebruiken voor verbinding tussen scorebord en 7-segment displays
× 1
Snijplank doorschijnend plastic
te gebruiken voor de lettertypen van de 7-segments displays
× 2
Snijplank flexibel grijs
te gebruiken voor de omslag van het scorebord
× 1
Arduino UNO
× 1
Weerstand 221 ohm
lees 220 Ohm
× 2
condensatoren
100 uF
× 2
grote drukknopschakelaar
tijdelijk
× 1
kleine drukknop (algemeen)
× 1
Lineaire regelaar (7805)
× 1

Benodigde gereedschappen en machines

Algemene tools en testapparatuur
normale tools die nodig zijn voor veel doe-het-zelf-projecten

Over dit project

Toen ik in een ACTION-winkel liep, ontdekte ik een digitale LED-trip voor een acceptabele prijs (inclusief 12V-voedingsadapter en zelfs inclusief een controller met IR-afstandsbediening). Ik besloot er een te kopen en begon ermee te spelen met als doel de ledstrip in mijn geval met een Arduino Uno aan te sturen.

Hoewel nergens op de verpakking of op de ledstrip zelf vermeld, kwam ik er al snel achter dat dit een soort strip was met segmenten van drie 5050 leds met één WS2811 driver per 3 leds.

Ik heb de strip aangesloten op een Arduino Uno om ermee te experimenteren met behulp van de Adafruit NeoPixel-bibliotheek en enkele voorbeeldcode zoals RGBW-strandtest.

Ik begon te brainstormen en kwam op het idee om deze reizen te gebruiken voor het maken van een A4-formaat 7-segment display. Zeven secties van de strip, zoals hierboven weergegeven, zouden het werk doen plus één extra voor het decimale punt op het scherm. Dit maakt het in feite 8 segmenten die zouden worden bestuurd vanaf slechts één uitgangspin van de Arduino en gevoed met de 12 V-adapter die al in het ACTION-pakket zit.

Maar wat kunt u doen met slechts één 7-segments display?

Ik besloot er 2 te maken en ze te gebruiken voor het maken van een Bingomachine willekeurige getallen tussen 1 en 75 weergeven na een druk op de knop.

Stap 1:Het maken van de 7-segments displays

Het hele maakproces van de displays is een vrij lang verhaal, dat ik in een aparte Tutorial zou kunnen beschrijven. De korte versie van het maken is als volgt:

Beide displays op A4-formaat zijn gemaakt met conventionele middelen en materialen. Bij het gebruik van lasersnijders en 3D-printers zou het hele proces anders en misschien eenvoudiger zijn. Op internet vind je behoorlijk goede voorbeelden, b.v. YouTube (https://learn.adafruit.com/ninja-timer-giant-7-segment-display/overview) en je kunt ze zelfs kant-en-klaar kopen.

Ik vond het een uitdaging en leuk om ze zelf te maken..

Voor de LED-strips heb ik 16 secties van 3 LEDS gebruikt die elk uit de WS2811 LED-strip van ACTION zijn gesneden.

Deze segmenten zijn door soldeerdraden verbonden met de +12V, GND en Do en Di van de strips. je kunt veel tutorials op internet vinden om dit op de juiste manier te doen.

Voor de behuizing heb ik een gemakkelijk verkrijgbare en betaalbare Peg Board uit de plaatselijke ACTION-winkel gebruikt.

De nieuwe fronten van de behuizing zijn gemaakt van wit doorschijnend snijplankmateriaal van IKEA.

Een sjabloon werd gebruikt om de segmenten uit een geverfde laag bovenop de planken te snijden (zwarte primer).

Een goedkope audiokabel (ook van ACTION) werd gebruikt om de 7_segment-displays met slechts 3 draden (12V, GND en Data in) via een 220Ohm-weerstand op de Arduino aan te sluiten.

Ik heb de behuizing aangepast om de audioconnector eenvoudig in te kunnen pluggen.

Stap 2:Het scorebord maken

Ik besloot ook om een ​​scoreborddisplay te maken dat de gegenereerde willekeurige getallen zou tonen, een drukknop voor het genereren van een nieuw nummer en een "bingoknop" voor het beëindigen en starten van een nieuwe ronde.

Het scorebord is gemaakt met hetzelfde ACTION-ophangbord als een behuizing (hierboven beschreven). De afdekplaat is gemaakt van een donkergrijze snijplank (wederom van ACTION) met gaten geboord zoals hierboven te zien is. De bovenklep is gemaakt van een IKEA snijplank. Tussen de 2 lagen zit een print op fotopapier en een beschermende transparante folie.

Aan de binnenkant, tegen de achterkant van de snijplank geplakt, bevinden zich 5 secties van elk 15 WS2812 LED's plus 3 * 8 LED-stripsecties voor achtergrondverlichting van het woord "BINGO".

Stap 3:De software maken

De eerste experimenten met de codering en het spelen met de LED-strip en 7-Segment displays werden gedaan met behulp van een Arduino en een soldeerloze breadboard.

Een grote momentele drukknop is verbonden met GND en met digitale IO pin 2 van de Uno. Door op de knop te drukken, wordt het genereren van een nieuw willekeurig nummer gestart. Na een korte "Light Show 1" wordt het willekeurige nummer weergegeven op de twee 7-segments displays.

De tabel die wordt gebruikt voor het maken van nummers op de 7-segmentsdisplays is als volgt:

Om te helpen bij het structureren van de Arduino Sketch, heb ik enkele eenvoudige stroomdiagrammen gemaakt met behulp van ClickCharts een gratis versie voor niet-commercieel gebruik (werkt prima als je eenmaal gewend bent aan enkele inherente beperkingen)

Het gegenereerde getal wordt opgeslagen in een array met de naam SCORE[] die bestaat uit 75 posities, ofwel gevuld met "0" of "1". Als het gegenereerde nieuwe nummer al bestaat, wordt automatisch een nieuw willekeurig nummer gegenereerd.

Het nieuwe nummer brandt op het scorebord (met 75 cijfers) en tegelijkertijd wordt het nieuwe nummer weergegeven op de 7-segments displays

Het scorebord blijft alle gegenereerde willekeurige getallen weergeven totdat een geldige bingo is bereikt. Een drukknop genaamd "BINGO" zal de ronde beëindigen met een korte "BingoLightShow"

Hierna wordt de SCORE-array gewist en kan een nieuwe ronde worden gestart.

Een nieuwe ronde kan ook worden gestart door de aan / uit-schakelaar om te zetten (de 12V-stroom loskoppelen), waardoor de Arduino wordt gereset en het programma opnieuw wordt gestart.

Stap 4:De elektronica

Een oplader van 12V, 2A levert de stroom aan de complete bingomachine.

De 12V-ingang op de Arduino-voedingsaansluiting is aangepast om het schakelen van stroom (aan - uit) mogelijk te maken.

De 5 V-voeding voor de 99 LED's (75 + 24) die voor het scorebord worden gebruikt, wordt afgeleid van de 12V-ingangsstroom door middel van een 7805-spanningsregelaar (die bijna de stroom aankan die door de WS2812-ledstrip wordt getrokken); het installeren van een Heatsink of een power-versie wordt aanbevolen (in een update zal ik waarschijnlijk een vermogenstransistor toevoegen om het vereiste 5V-vermogen aan te kunnen dat voornamelijk wordt verbruikt door de 99 WS2812-LED's in het scorebord. Ik heb de schets voor de Arduino op zo'n manier gemaakt dat de stroombehoefte van het scorebord matig is.

De lay-out in een Fritzing-diagram ziet er als volgt uit:

Merk op dat zowel de 7-segments LED-secties (12V) als de LED-strips die de nummers 1 -75 op het Bingo-scorebord verlichten, worden bestuurd door één en dezelfde uitgangspen (6) van de Uno.

Ontwikkeld en geproduceerd door Pierre Pennings (november 2018).

Code

  • BINGO_Machine_rev04.ino
BINGO_Machine_rev04.inoArduino
Schets voor BINGO-machine met Arduino Uno en 2 A4-formaat displays met 7 segmenten en een elektronisch scorebord
/* Dit is de code voor een bingo-machine ontwikkeld en geproduceerd door Pierre Pennings (november 2018) De machine gebruikt 2-cijferige grote A4 grote 7-segments displays gemaakt met WS2811 LED-strip gevoed met 12V (paren van 3 LED's met 1 controle-chip) Elk segment bestaande uit 3 LED's is geadresseerd met slechts één controleadres Elk display heeft 7 segmenten plus een decimale punt (DP) De cijfers gepresenteerd op de 2 displays lopen van 1 tot 75, net als in een normaal BINGO-spel. "Light Show 1" het willekeurige nummer wordt weergegeven op de twee 7-segments displays Het gegenereerde nummer wordt ook opgeslagen in een array genaamd SCORE[] bestaande uit 75 posities ofwel gevuld met "0" of "1". Als het gegenereerde nieuwe nummer al bestaan, automatisch een nieuw willekeurig nummer ber wordt gegenereerd Alle elektronica, inclusief de ARDUINO UNO zelf, is ingebouwd in een apart scoreborddisplay De 75 cijfers worden verlicht met één WS2812B-controllerchips met elk een SMD5050-LED (gevoed met 5 V) Het scorebord toont alle willekeurige getallen die zijn gegenereerd tot een geldige BINGO is bereikt Een drukknop genaamd "BINGO" zal de ronde beëindigen met een korte "BingoLightShow" Hierna wordt de SCORE-reeks gewist en kan een nieuwe ronde worden gestart. Een nieuwe ronde kan ook worden gestart door de aan/uit-schakelaar om te zetten (de 12V voeding) die de ARDUINO zal RESETTEN en het programma zal herstarten Een 12V, 2A lader levert de stroom aan de complete BINGO machine De 12 V ingang op de ARDUINO stroomaansluiting is aangepast om de stroomvoorziening mogelijk te maken (aan - uit) De 5 V voeding voor de 99 leds (75 + 24) die gebruikt worden voor het scorebord wordt afgeleid van het 12V ingangsvermogen door middel van een 7805 spanningsregelaar (die bijna de stroom aankan die getrokken wordt door de WS2812 ledstrip); het installeren van een koellichaam of een power-versie wordt aanbevolen. Deze code is gelicentieerd onder een GPL3+-licentie.*/#include const int NewnumberButton =2; // Digitale IO-pin 2 is verbonden met de Newnumber-knop met een normaal open contact // Pin 2 wordt aangedreven met de ingebouwde pull-up-weerstand om hem normaal HOOG te maken // De schakelaar trekt de pin even naar aarde. // Bij een hoge -> lage overgang door op de knop te drukken, genereert het programma een New Number.const int BingoButton =4; // Digitale IO-pin 4 is verbonden met de BINGO-knop met een normaal open contact// Pin 4 wordt aangedreven met de ingebouwde pull-up-weerstand om deze normaal HOOG te maken// De BINGO-knop trekt de pin naar aarde/ / Bij een hoge -> lage overgang door op de BINGO-knop te drukken zal een lichtshow starten en daarna zal het programma eindigen.const int LedPin =6; // Digitale IO pin 6 verbonden met de Data In (DI) van de WS 2811 LED-strips via een 220 Ohm weerstandint Nieuw nummer =1;int Bingo =1;int SCORE[76];int count =0;long randNumber;int NUMBER =0;int NW_NUMBER =0;int TENSNUMBER =0;int UNITNUMBER =0;#define NUM_LEDS 99 // de eerste 16 worden gebruikt om (WS 2811) de LED's in de 2-cijferige 7-segments displays te besturen//(twee keer 8 segmenten op de twee displays); nummer 0 -7 zijn voor het EENHEID-nummer// Nummer 8 - 15 zijn voor het TENS-nummer (nummer 7 en 15 zijn de DP's van elk CIJFER)// voor het weergeven van de nummers op het scoreborddisplay en het bedienen van de (WS2812) LEDS de adressen 16 tot 99 worden gebruikt// 24 LED's worden gebruikt voor het verlichten van de letters BINGO en 75 voor het scorebord om de weergave van de gegenereerde BINGO-nummers mogelijk te maken;// alle LED's worden aangestuurd met slechts één draad! van LED_PIN 6// in feite worden twee verschillende soorten LED-strips aangestuurd (parallel)vanaf dezelfde LedPin 6 via twee 220 Ohm weerstanden #define BRIGHTNESS 250 // stelt de helderheid van de LED's in op bijna maximaal (255) Adafruit_NeoPixel strip =Adafruit_NeoPixel(NUM_LEDS, LedPin, NEO_GRB + NEO_KHZ800);/*2-dimensionale array met NUMBER naar segmenttoewijzingen, elk NUMBER heeft zijn eigen kolom ------------------ ---------------------------------- 8 0 13 9 5 1 14 6 12 10 4 2 11 15 3 7 Cijfer 2 Cijfer 1 Tientallen Eenheden 7 en 15 vertegenwoordigen de decimale punten (DP) */// 0 1 2 3 4 5 6 7 8 9 byte SEGMENTarray [8][10] ={ {1,0,1,1,0 ,1,1,1,1,1,}, //segment 0 of 8 {1,1,1,1,1,0,0,1,1,1,}, //segment 1 of 9 {1 ,1,0,1,1,1,1,1,1,1,}, //segment 2 of 10 {1,0,1,1,0,1,1,0,1,1,}, //segment 3 of 11 {1,0,1,0,0,0,1,0,1,0,}, //segment 4 of 12 {1,0,0,0,1,1,1, 0,1,1,}, //segment 5 of 13 {0,0,1,1,1,1,1,0,1,1,}, //segment 6 of 14 {0,0,0, 0,0,0,0,0,0,0,}, //segment 7 of 15 };byte color_scheme[] ={ 50, 100, 200, 100, 150, 250, 150, 200, 50, 200, 250, 100, 250, 50, 150, 0, 100, 200, 50, 150, 250, 100, 200, 0, 150, 250, 50, 200, 0, 100, 250, 50, 200, 0, 100, 250, 50, 150, 0, 250, 0, 0};///////////////////////// ////////////////////////// de setup-code die volgt, wordt één keer uitgevoerd na "Power On" of na een RESETvoid setup() { Serial. begin (9600); pinMode (LedPin, UITGANG); // initialiseer de LedPin 6 als uitvoer:pinMode (NewnumberButton, INPUT_PULLUP); // initialiseer de drukknop pin 2 als invoer:pinMode (BingoButton, INPUT_PULLUP); // initialiseer de bingoknop pin 4 als invoer:strip.setBrightness (BRIGHTNESS); strip.begin(); // Initialiseer alle LED's op "uit" strip.show(); for (int t =16; t <24; t++) { strip.setPixelColor(t, 0, 0, 250); // Toon na het inschakelen het woord BINGO op het scorebord met blauwe karakters strip.show(); // merk op dat de volgorde van kleuren van de WS2812 LED-strip R,G,B is} for (count =0; count <76; count++) {// zet alle gegevens in de array-SCORE op 0 (array-posities lopen van 0 tot 75; de nulpositie wordt niet gebruikt) SCORE[count] =0; } /*for (int n =0; n <10; n++) // deze code kan worden gebruikt voor het testen van alle getallen van 0 - 9 op de twee 7-segment displays (de 2 DP's zijn niet getest) { for ( int s =0; s <8; s++) { int z =SEGMENTarray [s][n]; int i =0 + s; intj =8 + s; strip.setPixelColor(i, z*250, 0, z*50); strip.setPixelColor(j, z*250, 0, z*50); strip.show(); Serieel.print("["); Serieafdruk(n); Serieel.print("]"); Serieel.print("["); Serieafdruk(ken); Serial.print("] =");Serial.print(z); Serieel.print(" "); } vertraging (1500); Serieel.println(); }*/}////////////////////////////////////////////// ///// de luscode die volgt, wordt herhaaldelijk uitgevoerd tot "Power Off" of een RESETvoid loop () { Newnumber =digitalRead (NewnumberButton); if (Newnumber ==LOW) // geen korte vertraging nodig om stuiterende effecten van de knop te elimineren, omdat de lus eerst LOW gaat { randomSeed(millis()); do { GENERATENIEUWNUMMER (75); // genereer een NW_NUMBER tussen 1 en 75 } // als het NW_NUMBER al bestaat:genereer opnieuw een NW_NUMBER while (NW_NUMBER ==SCORE[NW_NUMBER] * NW_NUMBER); SCORE[NW_NUMBER] =1; // zet een 1 in de array op de NW_NUMBER positie NUMBER =NW_NUMBER; TIENUMMER =int (GETAL/10); // bereken de decimale waarde van het NW_NUMBER en de eenheidswaarde UNITNUMBER =NW_NUMBER - (10 * TENSNUMBER); WIS WEERGAVE (); LIGHTSHOW1 (4, 100); // start lichtshow1 CLEARDISPLAY (); //PRINTNUMBERSERIAL(); // print het gegenereerde NW_NUMBER naar de seriële monitor en toon de nieuwe inhoud van de SCORE-array DISPLAYNUMBER (TENSNUMBER, UNITNUMBER); DISPLAYSCORE (); } else { Bingo =digitalRead (BingoButton); als (Bingo ==LAAG) vertraging (3000); // een vertraging van 3 seconden om stuiterende effecten en het per ongeluk indrukken van de knop te elimineren omdat if (Bingo ==LAAG) { BINGOLIGHTSHOW (); for (count =0; count <76; count++) // zet alle gegevens in de Array SCORE terug naar 0 en een nieuwe BINGO-ronde kan worden gestart { SCORE[count] =0; } } }}//////////////////EINDE van LUS///////////////////////// /////////////////////////////////// /////////////// //////////////////////////////////// Hierna volgen de specifieke functies die worden aangeroepen vanuit de loopvoid LIGHTSHOW1 ( int duur, uint8_t wacht) {for (int t =16; t <24; t++) { strip.setPixelColor(t, 0, 0, 0); // schakel de BINGO-leds met blauwe tekens uit zoals bij het instellen van strip.show(); } for (int k =0; k   

Aangepaste onderdelen en behuizingen

tekening_gaten_patroon_puntjes_xgW76A8Jmw.svgTe gebruiken als sjabloon voor de fronten van de displays

Schema's

bingo_sketch_66WRdQITE2.fzz

Productieproces

  1. Maak thuis een zelfgemaakte schrijfmachine voor huiswerk
  2. DIY eenvoudigste IV9 Numitron-klok met Arduino
  3. DIY voltmeter met Arduino en een Nokia 5110-display
  4. DIY eenvoudig meetwiel met roterende encoder
  5. DIY-luchtkwaliteitsmonitor met Sharp GP2Y1010AU0F-sensor
  6. DIY Arduino 1D Pong-spel met WS2812 LED-strip
  7. CNC-machine
  8. HID-compatibele UPS met Arduino
  9. DIY-idee met RFID
  10. Smart Coffee Machine met Arduino en Bluetooth
  11. DIY gevoelige Arduino IB metaaldetector met discriminatie