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

Arduino로 구동되는 스낵 자판기

구성품 및 소모품

Arduino UNO
IO를 더 많이 사용하려면 Arduino Mega를 대신 사용해야 합니다.
× 1
센서 실드
× 1
DC 모터 6V 포함 휠
× 3
적외선(반사) 또는 라인 팔로워 센서, 제품 감지에 사용
× 3
코인 센서 번호 1에 사용되는 근접(전자기) 센서
× 1
거리 인터럽터(적외선/옵토커플러) 센서, 코인 센서에 사용 2번
× 1
DC 모터용 전원 공급 장치 6V
× 1
릴레이(일반)
4 스위치 릴레이
× 1
LCD(Nokia 5110 LCD)
× 1
LED(일반)
흰색 LED
× 2
푸시 버튼
빨간색, 노란색 및 녹색
× 3

앱 및 온라인 서비스

Arduino IDE
Solidworks
또는 모든 3D 모델 제작자

이 프로젝트 정보

소개

안녕하세요, 인도네시아에서 인사드립니다.

이 스낵 자판기는 제 마지막 프로젝트입니다. 이 프로젝트는 실제로 2015년 말에 완료되었습니다.

이 프로젝트의 목표는 지역 상점에서 구할 수 있는 "싸고 쉽게 구할 수 있는" 구성 요소를 사용하여 arduino 마이크로컨트롤러로 구동되는 자동 판매기를 만드는 것입니다.

아래 영상은 스낵자판기 결제/코인 테스트, 상품 선택, 배송까지의 최종 테스트 영상입니다.

이것이 제가 그 목표를 달성하기 위해 한 일입니다:

1단계:개념 스케치

먼저 개념을 먼저 생각하세요. .

이 스케치는 내가 무엇을 만들 수 있을지에 대한 나의 첫 번째 아이디어입니다. 과자 자판기, 코인 결제, 아크릴 케이스 사용이 될 거에요.

개념 선택 및 완성 , 어떤 상황이든, 어떤 시나리오든, 어떤 상황이든 생각하려고 노력하세요.

모든 것을 스케치 해보십시오. 그림이 못생겼더라도 걱정하지 마십시오. 진지하게 내 그림을보십시오. :D

생각할 수 없는 것에 대해 생각할 적절한 시기는 프로젝트가 시작되기도 전입니다.

2단계:3D 모델 만들기

이 단계가 모든 사람에게 필요한 것은 아니지만 저와 이 프로젝트에서는 매우 중요합니다.

솔리드웍스 모델을 만들고 있습니다. 그리고 정말 완벽하게 완성된 모델을 의미합니다. 제품의 치수(이 경우 스낵 패키지)를 결정해야 합니다. 허용되는 코인의 크기, 거부된 코인의 크기, 코인 슬롯의 크기, 코인 램프의 크기, 푸시 버튼의 크기, 거의 모든 것의 크기. 이 단계에는 사용된 Arduino 마이크로컨트롤러의 크기를 비교, 선택 및 측정하는 작업이 포함됩니다. 어떤 센서를 사용했거나 앞으로 사용할지, 어디에 놓을지, 크기와 크기가 어떻게 되는지, 허용되는 동전은 어디로 가는지, 흑백 LCD를 어디에 두어야 하는지도 생각합니다(필수는 아니지만 주장합니다).

마지막으로, 여전히 solidworks 모델 생성에서 모든 부품에 대해 나사용 구멍을 만드는 것을 잊지 마십시오.

케이스는 아크릴 소재로 제작되었으며 레이저 커팅 방식으로 커팅되어 있습니다. 그래서 모델을 최대한 상세하고 정확하게 만듭니다. 모델이 정확할수록 케이스가 더 정밀해지기 때문입니다.

3단계:코인 슬롯 디자인

코인을 필터링하기 위해 먼저 코인 차원을 사용하고 있습니다. 슬롯 코인을 디자인하여 기계에 들어갈 수 있는 동전 크기를 결정할 수 있습니다. .

그런 다음 두 번째 필터에서 어떤 코인 크기가 허용되고 코인 보유자에게 롤다운되는지 결정합니다. .

중력을 사용하여 동전 크기(직경)가 동전 램프/트랙의 길이보다 작으면 아래로 떨어져 거부되기 때문입니다.

<울>
  • 위 사진에서 왼쪽에 있는 코인은 슬롯 코인에 들어가지 않습니다.
  • <울>
  • 중앙에 있는 동전이 떨어져서 거부됩니다.
  • <울>
  • 오른쪽에 있는 동전은 승인된 동전이며 동전 홀더로 내려갑니다.
  • 이것은 제가 코인 테스트를 할 때의 동영상으로 이 방법이 어떻게 작동하는지 보여줄 것입니다.

    4단계:모든 구성요소 준비 및 테스트

    arduino를 준비하고 필요한 모든 것을 준비하세요.

    모든 구성 요소, LCD 푸시 버튼, 릴레이, LED를 테스트하고 모든 것을 결합하고 다른 논리와 코딩을 배우십시오. 당신이하는 일에 대해 알고 있는지 확인하십시오. 한계까지 테스트하고 한계를 찾으되 그것을 깨뜨리지 마십시오.

    저항을 사용하는 이유, 이것 또는 저것이 있을 때 어떤 일이 발생하는지, 왜 센서 판독값이 안정적이지 않은지, 실제로 센서에서 어떤 값을 읽는지 등 진정해.

    적외선 센서는 직사광선 아래에서 매우 나쁘게 작동하고 정상적이지 않습니다. 해결책은 사진과 같이 덕트 테이프를 사용하여 적외선 센서의 수신기 부분 주위를 격리하는 것입니다.

    5단계:나선형 메커니즘 구축

    자판기에서 가장 중요한 부분 중 하나인 전달 메커니즘입니다.

    알루미늄 와이어(와이어 직경 2mm)와 함께 나선형 메커니즘을 사용하고 있으며 직경 9cm의 PVC 파이프를 사용하여 수동으로 나선형으로 성형했습니다.

    나선형 와이어는 케이블 타이를 사용하여 바퀴에 묶입니다. DC 모터가 ON되면 휠이 회전하며 나선형 와이어가 회전합니다.

    회전하는 나선은 실제로 회전을 선형 운동으로 변환합니다. 제품의.

    6단계:코인 식별 메커니즘 구축

    첫 번째 사진은 근접 센서 또는 유도 전자석 센서를 사용하는 동전 센서 번호 1입니다. 동전이 이 센서를 통과하면 arduino가 시간(밀리초) 계산을 시작하도록 트리거합니다.

    센서1이 트리거되면 밀리초 단위로 시간 계산 시작  

    그리고 코인이 코인 센서 번호 2를 통과하면 거리 인터럽터 센서인 arduino가 시간 계산을 중지하고 해당 특정 코인이 센서 번호 1에서 센서 번호 2로 이동하는 데 필요한 시간을 얻습니다.

     sensor2가 트리거되면 밀리초 단위로 시간 계산을 중지합니다. "이동 시간"은 xxx 밀리초입니다.  

    자석을 너무 많이 사용하면 잼이 발생하고 코인 램프 중간에 멈춥니다. 센서 번호 1과 번호 2 사이의 "이동 시간"을 얻기 위해 모든 동전에 대한 시간을 계산해야 하기 때문에 그런 일이 발생하지 않기를 바랍니다. 이 "이동 시간"(밀리초)은 arduino에서 값을 결정하는 데 사용됩니다. 허용된 코인입니다.

    "여행 시간"이 "yyy" 밀리초보다 크거나 같으면 "aaa" 동전이고 그렇지 않으면 "bbb"입니다. 

    자석을 이용하여 동전을 식별하는 방법을 테스트한 영상입니다.

    7단계:제품 감지 메커니즘 구축

    3개의 적외선 센서를 사용하여 나선형 기구에 의해 밀림/이동으로 제품이 떨어질 때 감지합니다.

    제품이 떨어지면 적외선 센서를 트리거하여 DC 모터에 OFF 신호를 보냅니다(릴레이를 통해).

    이 비디오는 이 자판기에서 제품 감지가 어떻게 작동하는지 보여줍니다.

    8단계:LCD를 사용하여 정보 제공

    이 프로젝트에서는 고객이 동전을 입력할 때마다 허용되는 동전 가치에 대한 정보(인도네시아 통화)를 표시하는 LCD를 만듭니다. 또한 허용된 코인의 총 잔액과 이 기계를 작동하는 단계별 지침에 대한 기타 일반 지침도 표시됩니다.

    기기가 켜져 있을 때

    <울>
  • 메인 디스플레이 ="동전을 입력하세요".
  • <울>
  • IF 코인 입력 ="코인 가치 및 총 잔액 표시".
  • <울>
  • 동전이 입력되지 않은 경우 =MAIN 디스플레이를 유지합니다.
  • 코인이 성공적으로 식별된 후

    <울>
  • 총 잔액이 제품 가격보다 크거나 같은 경우 ="제품을 선택하세요".
  • <울>
  • 총 잔액이 제품 가격보다 낮은 경우 ="동전을 더 입력하세요.".
  • 나선형 메커니즘이 켜진 후(전달 발생)

    <울>
  • IF 제품 감지 메커니즘이 트리거됨 ="감사합니다", 거래 완료
  • <울>
  • 지연하고 MAIN 디스플레이로 돌아갑니다.
  • 9단계:완료 및 테스트

    드디어 스낵 자판기가 완성되었습니다.;)

    약 3개월 정도 후에 결제/코인 테스트, 제품 선택 및 제품 배송까지 이 기계에 대한 최종 테스트를 할 준비가 되었습니다.

    스낵 자판기 최종 테스트 영상입니다:

    이 프로젝트가 차세대 Arduino 기반 자동 판매기를 구축하고 만드는 방법에 대한 영감이나 아이디어를 제공하는 데 도움이 되길 바랍니다.

    10단계:개선의 여지

    이 스낵 자판기를 개선하기 위한 몇 가지 아이디어:

    <울>
  • 코인 교환기 메커니즘을 추가합니다.
  • <울>
  • 지폐를 받습니다.
  • <울>
  • 비트코인 및/또는 디지털 결제를 수락합니다.
  • <울>
  • LCD에 제품 재고 표시
  • <울>
  • IoT:거래가 발생할 때마다 인터넷을 통해 알림
  • <울>
  • IoT:제품 재고 소진 시 알림 등
  • 특별 감사:ITENAS Bandung, 기계 공학과.

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

    코드

    <울>
  • 간식 자판기의 소스 코드
  • 간식 자판기용 소스 코드Arduino
    이것은 내가 이 자판기 프로젝트에 사용한 소스 코드입니다.<사전>const byte SIAP =0;const byte KOIN_MASUK1 =1;const byte KOIN_MASUK2 =2;const byte KOIN_MASUK3 =3;const byte KOIN_MASUK4 =4;const byte 5 KOIN CONST 바이트 KOIN_MASUK6 =6; CONST 바이트 KOIN_MASUK7 =7; CONST 바이트 SALDO_500 =8; CONST 바이트 SALDO_500500 =9; CONST 바이트 SALDO_500500500 =10; CONST 바이트 SALDO_500500500500 =11; CONST 바이트 SALDO_5005005001000 =12; CONST 바이트 SALDO_5001000 =13; CONST 바이트 SALDO_5001000500 =14; CONST 바이트 SALDO_50010001000 =15; CONST 바이트 SALDO_5005001000 =16; CONST 바이트 SALDO_1000 =17; CONST 바이트 SALDO_10001000 =18; CONST 바이트 SALDO_1000500 =19; CONST 바이트 SALDO_1000500500 =20; CONST 바이트 SALDO_10005001000 =21; CONST 바이트 KOIN_KELUAR =22;byte state =SIAP;const float jeda_waktu =876;unsigned long time1;unsigned long time2;unsigned long time3;unsigned long time4;unsigned long time5;unsigned long time6;unsigned long time7;#define PIN_SCE 7#define PIN_RESET 6# PIN_DC 5 정의#PIN_SDIN 4 정의# 정의 PIN_SCLK 3#define LCD_C LOW#define LCD_D HIGH#define LCD_X 84#define LCD_Y 48static const byte ASCII[][5] ={ {0x00, 0x00, 0x00, 0x00, 0x00} // 20, 0x50 , 0x00, 0x00} // 21 ! { // , {0x00, 0x07, 0x00, 0x07, 0x00} // 22 " , {0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # , {0x24, 0x2a, 0x7,f, 0x4 {0x23, 0x13, 0x08, 0x64, 0x62} // 25 % , {0x36, 0x49, 0x55, 0x22, 0x50} // 26 &, {0x00, 0x05, 0x03, 0x00} {0x1c, 0x22, 0x41, 0x00} // 28 ( , {0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) , {0x14, 0x08, 0x3e, 0x08, // 0x0, 0x08, 0x1 0x3e, 0x08, 0x08} // 2b + , {0x00, 0x50, 0x30, 0x00, 0x00} // 2c , , {0x08, 0x08, 0x08, 0x08, 0x08, // 0x0 0x00, 0x00} // 2e . , {0x20, 0x10, 0x08, 0x04, 0x02} // 2f / , {0x3e, 0x51, 0x49, 0x45, 0x3e} // 3002 0 , {0 0x00} // 31 1 , {0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 , {0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 , {0x18,0, // 34 4 , {0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 , {0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 , {0x01, 0x091, // 37 7 , {0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 , {0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 , {0x00, 0x36,0 x36, 0x00, 0x00} // 3a :, {0x00, 0x56, 0x36, 0x00, 0x00} // 3b; { , {0x08, 0x14, 0x22, 0x41, 0x00} // 3c <, {0x14, 0x14, 0x14, 0x14, 0x14} // 3d =, {0x00, 0x41, 0x42, 0x 0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? { , {0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ , {0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A , {0x7f, 0x49, 0x34}, 00x {0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C , {0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D , {0x7f, 0x49, // 0x49, 40x49} {0x09, 0x09, 0x09, 0x01} // 46 F , {0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G , {0x7f, 0x08, 0x08, 0x08, // 0x8 H 0x7f, 0x41, 0x00} // 49 I , {0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J , {0x7f, 0x08, 0x14, 0x22, 0x41}, // 0x4 K 0x40, 0x40} // 4c L , {0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M , {0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N, , 0x41 0x3e} // 4f O , {0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P , {0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q , {0x7f, 0x20 } // 52 R , {0x46, 0x49, 0x49, 0x49, 0x31} // 53 S , {0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T , {0x3f, 0x40, 0x40, 0x40 55 U , {0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V , {0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W , {0x63, 0x14, 0 x08, 0x14, 0x63} // 58 X , {0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y , {0x61, 0x51, 0x49, 0x45, 0x49, 0x45, 0x43} // 5x7 Z 0x41, 0x00} // 5b [ , {0x02, 0x04, 0x08, 0x10, 0x20} // 5c Â¥ , {0x00, 0x41, 0x41, 0x7f, 0x00} // 0x04 ] , { , 0x04} // 5e ^ , {0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ , {0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` , {0x540,0, } // 61 a , {0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b , {0x38, 0x44, 0x44, 0x44, 0x20} // 63 c , {0x38, 0x44,00 // 64 d , {0x38, 0x54, 0x54, 0x54, 0x18} // 65 e , {0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f , {0x0c, 0x52, 0x0c, 0x52, 0x09 j , {0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h , {0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i , {0x20, 0x40, 0x34,0 {0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k , {0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l , {0x7c, 0x04, 0x18, 0x70 , 0x08, 0x04, 0x04, 0x78} // 6e n , {0x38, 0x44, 0x44, 0x44, 0x38} // 6f o , {0x7c, 0x14, 0x14, 0x084, } // 70p , {0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q , {0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r , {0x48, 0x544, } / 73 s , {0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t , {0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u, {0x1c, 0x20,0, // } v , {0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w , {0x44, 0x28, 0x10, 0x28, 0x44} // 78 x , {0x0c, 0x50, 0x500,0 {0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z , {0x00, 0x08, 0x36, 0x41, 0x00} // 7b { , {0x00, 0x00, 0x70}, // 0x0 | , {0x00, 0x41, 0x36, 0x08, 0x00} // 7d } , {0x10, 0x08, 0x08, 0x10, 0x08} // 7e → , {0x78, 0x46, 00x46} //f †'}; 무효 LcdWrite(바이트 dc, 바이트 데이터){ digitalWrite(PIN_DC, dc); 디지털 쓰기(PIN_SCE, LOW); shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, 데이터); digitalWrite(PIN_SCE, HIGH);} 무효 LcdCharacter(문자 문자){ LcdWrite(LCD_D, 0x00); for (int 인덱스 =0, 인덱스 <5, 인덱스++) { LcdWrite(LCD_D, ASCII[문자 - 0x20][인덱스]); } LcdWrite(LCD_D, 0x00);}void LcdClear(void){ for (int index =0; index Siap"); LcdInitialise(); LcdClear(); LcdString("마숙칸 코인 Rp500 atau 코인 Rp1000 @ Rp2000"); 지연(500);} 무효 루프() { int x =analogRead(14); if (상태 ==SIAP) { if (x>=33) { 상태 =KOIN_MASUK1; time1 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((state ==KOIN_MASUK1) &&(!(digitalRead(13))) { if ((digitalRead(12)) &&(state ==KOIN_MASUK1)) { unsigned long diff1 =(millis() - time1 ); Serial.println("snsr2,"); Serial.println("wkt 중지"); Serial.print("제다 wkt:"); Serial.print(diff1); Serial.println("밀리초"); if (diff1> jeda_waktu) { 상태 =SALDO_1000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp1000 Tamba 코인 코인 Rp1000"); 디지털 쓰기(13, 높음); Serial.println("코인=1000루피, 살도:1000 루피아"); 톤(2, 4200, 299); } else if (diff1 =33) { 상태 =KOIN_MASUK2; 시간2 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((state ==KOIN_MASUK2) &&((digitalRead(13))) { if ((digitalRead(12)) &&(state ==KOIN_MASUK2)) { unsigned long diff2 =(millis() - time2); Serial.println("snsr2,"); Serial.println("wkt 중지"); Serial.print("제다 wkt:"); Serial.print(diff2); Serial.println("밀리초"); if (diff2> jeda_waktu) { 상태 =SALDO_5001000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp1500 Tamba 코인 코인 Rp1000"); 톤(2, 4200, 299); Serial.println("코인=1000루피, 살도:1500루피"); } else if (diff2 =33) { 상태 =KOIN_MASUK3; time3 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((상태 ==KOIN_MASUK3) &&((digitalRead(13))) { if ((digitalRead(12)) &&(상태 ==KOIN_MASUK3)) { unsigned long diff3 =(millis() - time3); Serial.println("snsr2,"); Serial.println("wkt 중지"); Serial.print("제다 wkt:"); Serial.print(diff3); Serial.println("밀리초"); if (diff3> jeda_waktu) { 상태 =SALDO_5005001000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp1000"); Serial.println("코인=1000루피, 살도:2000루피"); 톤(2, 4200, 799); } else if (diff3 =33) { 상태 =KOIN_MASUK4; 시간4 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((상태 ==KOIN_MASUK4) &&((digitalRead(13))) { if ((digitalRead(12)) &&(상태 ==KOIN_MASUK4)) { unsigned long diff4 =(millis() - time4); Serial.println("snsr2,"); Serial.println("wkt 중지"); Serial.print("제다 wkt:"); Serial.print(diff4); Serial.println("밀리초"); if (diff4> jeda_waktu) { 상태 =SALDO_5005005001000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp2500 Pilih Produk Koin Rp1000"); Serial.println("코인=1000루피, 살도:2500루피"); 톤(2, 4200, 799); } else if (diff4 =33) { 상태 =KOIN_MASUK5; time5 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((state ==KOIN_MASUK5) &&((digitalRead(13))) { if ((digitalRead(12)) &&(state ==KOIN_MASUK5)) { unsigned long diff5 =(millis() - time5); Serial.println("snsr2,"); Serial.println("wkt 중지"); Serial.print("제다 wkt:"); Serial.print(diff5); Serial.println("밀리초"); if (diff5> jeda_waktu) { 상태 =SALDO_50010001000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp2500 Pilih Produk Koin Rp1000"); Serial.println("코인=1000루피, 살도:2500루피"); 톤(2, 4200, 799); } else if (diff5 =33) { 상태 =KOIN_MASUK6; time6 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((상태 ==KOIN_MASUK6) &&((digitalRead(13))) { if ((digitalRead(12)) &&(상태 ==KOIN_MASUK6)) { unsigned long diff6 =(millis() - time6); Serial.println("snsr2,"); Serial.println("wkt 중지"); Serial.print("제다 wkt:"); Serial.print(diff6); Serial.println("밀리초"); if (diff6> jeda_waktu) { 상태 =SALDO_10001000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp1000"); Serial.println("코인=1000루피, 살도:2000루피"); 톤(2, 4200, 799); } else if (diff6 =33) { 상태 =KOIN_MASUK7; time7 =밀리초(); 톤(2, 4200, 40); Serial.println("snsr1,"); Serial.println("주로 시작"); } } else if ((state ==KOIN_MASUK7) &&((digitalRead(13))) { if ((digitalRead(12)) &&(state ==KOIN_MASUK7)) { unsigned long diff7 =(millis() - time7); Serial.println("snsr2,"); Serial.println("주말 중지"); Serial.print("제다 wkt:"); Serial.print(diff7); Serial.println("밀리초"); if (diff7> jeda_waktu) { 상태 =SALDO_10005001000; LcdInitialise(); LcdClear(); LcdString(" diterima Saldo=Rp2500 Pilih Produk Koin Rp1000"); Serial.println("코인=1000루피, 살도:2500루피"); 톤(2, 4200, 799); } else if (diff7 Siap"); } }}

    맞춤형 부품 및 인클로저

    이것은 이 프로젝트에 대한 내 solidworks 3d 모델의 인쇄 화면입니다.

    제조공정

    1. 자판기
    2. K30 센서로 CO2 모니터링
    3. 키는 얼마입니까?
    4. Arduino 또는 ESP8266이 있는 정전 용량 지문 센서
    5. Arduino 클라우드 센서 타워
    6. 모션 센서 물총
    7. 리버스 자판기(RVM)
    8. 중고 기계 가격
    9. 우유 자판기란?
    10. 국수 자판기 란 무엇입니까?