산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino Bingo Machine with DIY A4-Size 7-Segment 디스플레이

구성품 및 소모품

페그 보드
Ningbo에서 제작하여 7세그먼트 디스플레이용 Handycraft2 보드 및 스코어 보드용 1개 수상
× 3
도마
득점판에 사용할 회색 플라스틱 도마
× 1
디지털 LED 스트립 5m WS2811(5050 LED 포함)
많은 공급업체 및 브랜드
× 1
5m/롤 DC5V ws2812b 300led 개별 주소 지정 가능 60leds/m 5050 RGB
많은 공급업체 및 제조업체
× 1
오디오 케이블
스코어 보드와 7-세그먼트 디스플레이 간의 연결에 사용
× 1
도마 반투명 플라스틱
7-세그먼트 디스플레이의 글꼴에 사용
× 2
도마 유연한 회색
스코어 보드 표지에 사용
× 1
Arduino UNO
× 1
저항 221옴
220옴 읽기
× 2
커패시터
100 미크로포맷
× 2
대형 푸시버튼 스위치
순간
× 1
작은 푸시버튼(일반)
× 1
선형 조정기(7805)
× 1

필요한 도구 및 기계

공통 도구 및 테스트 장비
많은 DIY 프로젝트에 필요한 일반 도구

이 프로젝트 정보

ACTION 매장을 걷다가 적당한 가격(12V 전원 어댑터 포함, IR 리모컨이 있는 컨트롤러 포함)의 디지털 LED 트립을 발견했습니다. 내 경우에는 Arduino Uno로 LED 스트립을 제어하는 ​​것을 목표로 하나 구입하고 가지고 놀기 시작했습니다.

패키지나 LED 스트립 자체에는 명시되어 있지 않지만 곧 3개의 LED당 1개의 WS2811 드라이버가 있는 3개의 5050 LED 세그먼트가 있는 스트립 유형이라는 것을 알게 되었습니다.

Adafruit NeoPixel 라이브러리와 RGBW strandtest와 같은 몇 가지 예제 코드를 사용하여 실험하기 위해 스트립을 Arduino Uno에 연결했습니다.

나는 약간의 브레인스토밍을 하기 시작했고 이 여행을 사용하여 A4 크기의 7세그먼트 디스플레이를 만드는 아이디어에 이르렀습니다. 위에 표시된 대로 스트립의 7개 섹션은 작업을 수행하고 디스플레이의 소수점에 대해 추가로 1개를 수행합니다. 이것은 Arduino의 단 하나의 출력 핀에서 제어되고 ACTION 패키지에 이미 포함된 12V 어댑터로 전원이 공급되는 8개의 세그먼트를 효과적으로 만듭니다.

그러나 단 하나의 7-세그먼트 디스플레이로 무엇을 할 수 있습니까?

2개를 만들어 빙고 머신을 만드는 데 사용하기로 했습니다. 버튼을 누른 후 1에서 75 사이의 임의의 숫자를 표시합니다.

1단계:7-세그먼트 디스플레이 만들기

디스플레이의 전체 제작 과정은 별도의 자습서에서 설명할 수 있는 꽤 긴 이야기입니다. 메이킹의 짧은 버전은 다음과 같습니다.

A4 크기의 디스플레이는 모두 기존의 수단과 재료로 만들어졌습니다. 레이저 절단기와 3D 프린터를 사용하면 전체 프로세스가 다르고 아마도 더 간단할 것입니다. 인터넷에서 꽤 좋은 예를 찾을 수 있습니다. YouTube(https://learn.adafruit.com/ninja-timer-giant-7-segment-display/overview) 및 기성품을 구입할 수도 있습니다.

직접 만드는 것이 도전적이고 재미있습니다.

LED 스트립의 경우 ACTION의 WS2811 LED 스트립에서 각각 잘라낸 3개 LED의 16개 섹션을 사용했습니다.

이 세그먼트는 와이어를 납땜하여 스트립의 +12V, GND 및 Do 및 Di에 연결합니다. 인터넷에서 이를 올바르게 수행하는 방법에 대한 많은 자습서를 찾을 수 있습니다.

주택에는 지역 ACTION 매장에서 쉽게 구할 수 있고 저렴한 Peg Board를 사용했습니다.

하우징의 새로운 전면은 IKEA의 흰색 반투명 ​​도마 소재로 만들어졌습니다.

템플릿은 보드(검정색 프라이머) 위에 칠해진 레이어에서 세그먼트를 자르는 데 사용되었습니다.

ACTION의 저렴한 오디오 케이블을 사용하여 220Ohm 저항을 통해 Arduino에 단 3개의 전선(12V, GND 및 데이터 입력)으로 7_segment 디스플레이를 연결했습니다.

오디오 커넥터를 쉽게 연결할 수 있도록 하우징을 수정했습니다.

2단계:스코어보드 만들기

나는 또한 생성된 난수, 새 숫자를 생성하기 위한 푸시 버튼 및 새 라운드를 종료하고 시작하기 위한 "빙고 버튼"을 표시하는 스코어보드 디스플레이를 만들기로 결정했습니다.

스코어보드는 하우징과 동일한 ACTION 페그 보드를 사용하여 만들어집니다(위에 설명됨). 덮개 판은 위에서 볼 수 있는 것과 같이 구멍이 뚫린 짙은 회색 도마(ACTION에서 다시 한 번)로 만들어집니다. 상단 커버는 IKEA 도마로 제작되었습니다. 2개의 레이어 사이에는 인화지 인쇄와 보호용 투명 호일이 있습니다.

내부에는 15개의 WS2812 LED로 구성된 5개의 섹션과 "BINGO"라는 단어의 백라이트를 위한 3 * 8개의 LED 스트립 섹션이 도마 뒷면에 테이프로 붙여져 있습니다.

3단계:소프트웨어 만들기

LED 스트립과 7-Segment 디스플레이를 사용한 코딩 및 재생에 대한 초기 실험은 Arduino와 무납땜 브레드보드를 ​​사용하여 수행되었습니다.

큰 순간 푸시 버튼은 GND와 Uno의 디지털 IO 핀 2에 연결됩니다. 버튼을 누르면 새로운 난수 생성이 시작됩니다. 짧은 "Light Show 1" 후에 두 개의 7-세그먼트 디스플레이에 임의의 숫자가 표시됩니다.

7-세그먼트 디스플레이에서 숫자를 생성하는 데 사용되는 테이블은 다음과 같습니다.

Arduino Sketch를 구성하는 데 도움이 되도록 비상업용 무료 버전인 ClickCharts를 사용하여 몇 가지 간단한 순서도를 만들었습니다(일부 고유한 제한 사항에 익숙해지면 잘 작동함).

생성된 숫자는 "0" 또는 "1"로 채워진 75개의 위치로 구성된 SCORE[]라는 배열에 저장됩니다. 생성된 새로운 숫자가 이미 존재하는 경우 자동으로 새로운 난수가 생성됩니다.

스코어보드에 새로운 번호가 켜지고(75개의 번호로) 동시에 새 번호가 7-세그먼트 디스플레이에 표시됩니다.

스코어보드는 유효한 빙고가 달성될 때까지 생성된 모든 난수를 계속 표시합니다. "BINGO"라는 푸시 버튼은 짧은 "BingoLightShow"와 함께 라운드를 종료합니다.

이후 SCORE 배열이 지워지고 새 라운드가 시작될 수 있습니다.

Arduino를 재설정하고 프로그램을 다시 시작하는 전원 스위치(12V 전원 연결 끊기)를 토글하여 새 라운드를 시작할 수도 있습니다.

4단계:전자 제품

12V, 2A 충전기는 완전한 빙고 머신에 전원을 공급합니다.

Arduino 전원 잭의 12V 입력이 전원 전환(켜기 - 끄기)이 가능하도록 수정되었습니다.

스코어보드에 사용된 99개 LED(75 + 24)에 대한 5V 전력은 7805 전압 조정기(WS2812 LED 스트립에서 끌어온 전류를 거의 처리할 수 있음)를 통해 12V 입력 전력에서 파생됩니다. 히트싱크 또는 전원 버전을 설치하는 것이 좋습니다(업데이트에서 스코어보드 내부의 99개 WS2812 LED에서 주로 소비하는 필수 5V 전력을 처리하기 위해 전원 트랜지스터를 추가할 것입니다. 저는 Arduino에 대한 스케치를 그런 방식으로 만들었습니다. 스코어보드의 전력 수요는 보통입니다.

Fritzing 다이어그램의 레이아웃은 다음과 같습니다.

7-세그먼트 LED 섹션(12V)과 Bingo 스코어보드의 숫자 1-75를 비추는 LED 스트립 모두 Uno의 동일한 출력 핀(6)에 의해 제어됩니다.

Pierre Pennings에서 개발 및 제작했습니다(2018년 11월).

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • BINGO_Machine_rev04.ino
  • BINGO_Machine_rev04.ino아두이노
    Arduino Uno와 2개의 A4 크기 7-Segment 디스플레이와 전자 스코어 보드가 있는 BINGO 기계용 스케치
    /* 이것은 Pierre Pennings에서 개발 및 생산한 Bingo 기계용 코드입니다(2018년 11월) 이 기계는 2 DIGIT 대형 A4를 사용합니다 WS2811로 제작된 크기의 7-세그먼트 디스플레이 12V로 전원이 공급되는 LED 스트립(1개의 제어 칩이 있는 3개의 LED 쌍) 3개의 LED로 구성된 각 세그먼트는 단 하나의 제어 주소로 지정됩니다. 각 디스플레이에는 7개의 세그먼트와 소수점(DP)이 있습니다. 일반 BINGO 게임과 마찬가지로 1에서 75까지 실행되는 2개의 디스플레이에 표시됩니다. 순간 푸시 버튼은 GND와 ARDUINO UNO의 디지털 IO 핀 6에 연결됩니다. 버튼을 누르면 새로운 난수 생성이 시작됩니다. 짧은 시간 후 "Light Show 1" 난수가 2개의 7-세그먼트 디스플레이에 표시됩니다. 생성된 번호는 "0" 또는 "1"로 채워진 75개 위치로 구성된 SCORE[]라는 배열에도 저장됩니다. 생성된 새 번호가 이미 생성된 경우 존재, 자동으로 새로운 난수 ARDUINO UNO 자체를 포함한 모든 전자 장치는 별도의 스코어 보드 디스플레이에 구축되었습니다. 75개의 숫자는 각각 하나의 SMD5050 LED가 있는 하나의 WS2812B 컨트롤러 칩으로 켜집니다(5V로 전원 공급) 스코어 보드는 다음까지 생성된 모든 난수를 표시합니다. 유효한 BINGO가 달성되었습니다. "BINGO"라는 푸시 버튼은 짧은 "BingoLightShow"와 함께 라운드를 종료합니다. 이후 SCORE 배열이 지워지고 새 라운드가 시작될 수 있습니다. 새 라운드는 전원 스위치를 토글하여 시작할 수도 있습니다(연결 해제 12V 전원) ARDUINO를 재설정하고 프로그램을 다시 시작합니다. 12V, 2A 충전기가 전체 BINGO 기계에 전원을 공급합니다. ARDUINO 전원 잭의 12V 입력은 전원 전환(켜기 - 끄기)을 가능하게 하도록 수정되었습니다. 5 V 전원 스코어 보드에 사용되는 99개의 LED(75 + 24)는 7805 전압 조정기를 통해 12V 입력 전원에서 파생됩니다(WS2812 LED 스트립에서 끌어온 전류를 거의 처리할 수 있음). 방열판 또는 전원 버전을 설치하는 것이 좋습니다. 이 코드는 GPL3+ 라이선스에 따라 사용이 허가되었습니다.*/#include const int NewnumberButton =2; // 디지털 IO 핀 2는 일반적으로 열린 접점으로 Newnumber 버튼에 연결됩니다. // 핀 2는 내장된 풀업 저항으로 구동되어 정상적으로 HIGH가 되도록 합니다.// 스위치는 핀을 일시적으로 접지로 당깁니다. // 버튼을 눌러 high -> low 전환 시 프로그램은 New Number를 생성합니다.const int BingoButton =4; // 디지털 IO 핀 4는 접점이 열려 있는 BINGO 버튼에 연결됩니다. // 핀 4는 내장된 풀업 저항으로 구동되어 정상적으로 HIGH가 되도록 합니다.// BINGO 버튼은 핀을 접지로 당깁니다. / BINGO 버튼을 눌러 높음 -> 낮음 전환 시 Lightshow가 시작되고 그 후 프로그램이 종료됩니다. const int LedPin =6; // 220 Ohm 저항을 통해 WS 2811 LED 스트립의 데이터 입력(DI)에 연결된 디지털 IO 핀 6int Newnumber =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 // 처음 16개는 2자리 7세그먼트 디스플레이의 LED를 제어하는 ​​데 사용됩니다(WS 2811)//(2회 2개의 디스플레이에 8개의 세그먼트); 숫자 0 - 7은 UNIT 번호용입니다// 숫자 8 - 15는 TENS 번호용입니다(숫자 7과 15는 각 DIGIT의 DP입니다)// 스코어 보드 디스플레이에 숫자를 표시하고 (WS2812) LED를 제어하기 위한 16에서 99까지의 주소가 사용됩니다. // 24개의 LED는 BINGO 문자를 백라이트하는 데 사용되며 75는 생성된 BINGO 번호를 표시할 수 있도록 점수 판에 사용됩니다. // 모든 LED는 단 하나의 와이어로 제어됩니다! from LED_PIN 6// 사실상 두 가지 다른 유형의 LED 스트립이 2개의 220 Ohm 저항을 통해 동일한 LedPin 6에서 (병렬로) 제어됩니다.#define BRIGHTNESS 250 // LED의 밝기를 거의 최대(255)로 설정합니다. Adafruit_NeoPixel 스트립 =Adafruit_NeoPixel(NUM_LEDS, LedPin, NEO_GRB + NEO_KHZ800);/* 세그먼트 할당에 대한 NUMBER가 있는 2차원 배열, 각 NUMBER에는 고유한 열이 있습니다------------------ ---------------------------------- 8 0 13 9 5 1 14 6 12 10 4 2 11 15 3 7 숫자 2 숫자 1 십 단위 7과 15는 소수점(DP)을 나타냅니다. */// 0 1 2 3 4 5 6 7 8 9바이트 SEGMENTarray [8][10] ={ {1,0,1,1,0 ,1,1,1,1,1,}, //세그먼트 0 또는 8 {1,1,1,1,1,0,0,1,1,1,}, //세그먼트 1 또는 9 {1 ,1,0,1,1,1,1,1,1,1,}, //세그먼트 2 또는 10 {1,0,1,1,0,1,1,0,1,1,}, //세그먼트 3 또는 11 {1,0,1,0,0,0,1,0,1,0,}, //세그먼트 4 또는 12 {1,0,0,0,1,1,1, 0,1,1,}, //세그먼트 5 또는 13 {0,0,1,1,1,1,1,0,1,1,}, //세그먼트 6 또는 14 {0,0,0, 0,0,0,0,0,0,0,}, //세그먼트 7 또는 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, 0, 250 250, 50, 200, 0, 100, 250, 50, 150, 0, 250, 0, 0};////////////////////////// ////////////////////////// 다음 설정 코드는 "전원 켜기" 후 또는 RESETvoid setup() { Serial. 시작(9600); 핀모드(LED핀, 출력); // LedPin 6을 출력으로 초기화합니다. pinMode(NewnumberButton, INPUT_PULLUP); // 푸시버튼 핀 2를 입력으로 초기화:pinMode(BingoButton, INPUT_PULLUP); // 빙고버튼 핀 4를 입력으로 초기화:strip.setBrightness(BRIGHTNESS); strip.begin(); // 모든 LED를 "꺼짐"으로 초기화합니다. strip.show(); (int t =16; t <24; t++) { strip.setPixelColor(t, 0, 0, 250); // 전원을 켠 후 점수판에 BINGO라는 단어를 파란색 문자로 표시 strip.show(); // WS2812 LED 스트립의 색상 순서는 R,G,B } for (count =0; count <76; count++) { // 배열 SCORE의 모든 데이터를 0으로 둡니다(배열 위치는 0부터 실행 75까지, 0 위치는 사용되지 않음) SCORE[count] =0; } /*for (int n =0; n <10; n++) // 이 코드는 2개의 7-Segment 디스플레이에서 0 - 9의 모든 숫자를 테스트하는 데 사용할 수 있습니다(2개의 DP는 테스트되지 않음) { for ( int s =0; s <8; s++) { int z =SEGMENTarray [s][n]; 정수 i =0 + s; 정수 j =8 + s; strip.setPixelColor(i, z*250, 0, z*50); strip.setPixelColor(j, z*250, 0, z*50); 스트립쇼(); Serial.print("["); Serial.print(n); Serial.print("]"); Serial.print("["); Serial.print(들); Serial.print("] =");Serial.print(z); Serial.print(" "); } 지연(1500); 직렬.println(); }*/}////////////////////////////////////////////////// ///// 뒤따르는 루프 코드는 "전원 끄기" 또는 RESETvoid 루프()가 될 때까지 반복적으로 실행됩니다. loop() { Newnumber =digitalRead(NewnumberButton); if (Newnumber ==LOW) // 처음에는 루프가 진행되기 때문에 버튼의 바운싱 효과를 제거하기 위해 짧은 지연이 필요하지 않습니다. { randomSeed(millis()); { GENERATENEWNUMBER (75); // 1에서 75 사이의 범위에서 NW_NUMBER를 생성합니다. } // NW_NUMBER가 이미 존재하는 경우:NW_NUMBER를 다시 생성합니다. while (NW_NUMBER ==SCORE[NW_NUMBER] * NW_NUMBER); 점수[NW_NUMBER] =1; // 배열의 NW_NUMBER 위치에 1을 넣습니다. NUMBER =NW_NUMBER; TENSNUMBER =정수 (숫자 / 10); // NW_NUMBER의 10진수 값과 단위 값을 계산합니다. UNITNUMBER =NW_NUMBER - (10 * TENSNUMBER); 클리어 디스플레이(); 라이트쇼1 (4, 100); // lightshow1 시작 CLEARDISPLAY(); //PRINTNUMBERSERIAL(); // 생성된 NW_NUMBER를 직렬 모니터에 인쇄하고 SCORE 배열의 새 내용을 표시합니다. DISPLAYNUMBER (TENSNUMBER, UNITNUMBER); 디스플레이스코어(); } else { 빙고 =digitalRead(BingoButton); if (빙고 ==낮음) 지연 (3000); // 튕기는 효과와 실수로 버튼을 누르는 것을 방지하기 위해 3초 지연 if (Bingo ==LOW) { BINGOLIGHTSHOW (); for (count =0; count <76; count++) // 배열 SCORE의 모든 데이터를 0으로 되돌리고 새로운 BINGO 라운드를 시작할 수 있습니다. { SCORE[count] =0; } } }}///////////////////LOOP의 끝////////////////////////// ////////////////////////////////////////////////////// //////////////////////////////////// 이하 loopvoid LIGHTSHOW1( int 지속 시간, uint8_t 대기) {for (int t =16; t <24; t++) { strip.setPixelColor(t, 0, 0, 0); // 설정 시 파란색 문자가 있는 BINGO Led를 끕니다. strip.show(); } for (int k =0; k   

    맞춤형 부품 및 인클로저

    tekening_gaten_patroon_puntjes_xgW76A8Jmw.svg디스플레이 전면의 템플릿으로 사용

    회로도

    bingo_sketch_66WRdQITE2.fzz

    제조공정

    1. 집에서 DIY 숙제 작성 기계 만들기
    2. Arduino로 DIY 가장 간단한 IV9 Numitron 시계
    3. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
    4. 로터리 인코더가 있는 DIY 간단한 측정 휠
    5. 샤프 GP2Y1010AU0F 센서가 있는 DIY 공기질 모니터
    6. WS2812 LED 스트립이 있는 DIY Arduino 1D 탁구 게임
    7. CNC 기계
    8. Arduino가 있는 HID 호환 UPS
    9. RFID를 사용한 DIY 아이디어
    10. Arduino 및 Bluetooth가 탑재된 스마트 커피 머신