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

128x64 LCD 디스플레이의 DIY 10Hz-50kHz 오실로스코프

구성품 및 소모품

Arduino Nano R3
× 1
커패시터 100μF
× 1
ST7920 LCD 128x64
× 1
회전 전위차계(일반)
× 2
푸시버튼 스위치, 순간
× 3

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 프로젝트는 10Hz ~ 50kHz 범위의 간단한 오실로스코프를 만드는 방법을 설명합니다. 장치가 외부 디지털-아날로그 변환기 칩을 사용하지 않고 Arduino만 사용한다는 점을 고려할 때 이는 매우 넓은 범위입니다.

결과는 128x64 픽셀의 비교적 큰 LCD 화면(ST7920)에 표시됩니다. 측정 표시 영역은 96x64이고 정보 표시 영역은 32x64이며 테스트 신호 주파수, Vpp 등을 표시합니다.

매우 간단하게 구축할 수 있으며 몇 가지 구성 요소로 구성됩니다.

- 아두이노 나노

- 128x64 해상도의 ST7920 LCD디스플레이

- 3개의 순간 스위치

- 2개의 전위차 이성질체

- 1개의 커패시터 100μF

이 장치에는 자동 트리거(매우 안정적인 표시), 스캔 속도:0.02ms/div~10ms/div, 1-2-5에 따라 9개의 레벨로 캐리 및 분할 및 홀드 기능:디스플레이 파형 및 매개변수 고정과 같은 여러 기능이 있습니다. 이 프로젝트는 원본 코드를 찾을 수 있는 Wu Hanqing의 블로그에 게시됩니다. 이전 프로젝트 중 하나의 하드웨어를 기반으로 오실로스코프를 구축하고 있었기 때문에 최소한의 변경만 했습니다. 영상에서 볼 수 있듯이 큰 화면으로 인해 악기의 시야가 매우 깨끗하고 자동 트리거도 놀라울 정도로 좋습니다. 이미지의 수직 위치는 50kohm의 전위차계로 조정되고 대비는 10kohms 전위차계로 조정됩니다. 사인 및 직사각형 신호 발생기로 오실로스코프를 테스트했습니다.

마지막으로, 전문적이거나 매우 유용한 기기는 아니지만 교육 목적으로 또는 실험실에서 저주파 신호를 테스트하는 데 사용할 수 있습니다. 특히 기기를 만들기가 매우 쉽고 매우 저렴하다는 것을 알고 있기 때문입니다.

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

코드

<울>
  • Arduino 코드
  • Arduino 코드C/C++
    #include U8GLIB_ST7920_128X64_4X u8g(6, 5, 4); 정수 입력 =A0; 정수 Key_add =8; 정수 Key_sub =9; 정수 Key_hold =10; 정수 x, y; int i,i1,i2,V_min,V_max,V_mid,t,t0,t1,sta,Key=1,hold=0; 긴 주파수; 부동 Vpp; 정수 Y[96]; 정수 버퍼[192]; 상수 uint8_t L[] PROGMEM ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x0, 0x0, 0x00, 0x00, 0x00, 0x0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x000, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,하는 0x01, 0xE0, 0 × 00, 0 × 00, 0x30에, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,가 0x1c, 0x00으로, × 00, 0xc0과, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,은 0x03, 0x00으로,은 0x03, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x80으로,은 0x04, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,는 0x60, 0x08에서, 0x00으로, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,은 0x10, 0x10, 명령 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, × 00, 0 × 00, 0 × 00, 0 × 00,은 0x10, 0x10, 명령 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10으로, 0 × 00, 0 × 00, 0 × 00, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0x80, 0x60, 0x00, 0x0 0x00, 0x01, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0x03, 0xFF, 0xFF, 0xE 0x08, 0x10, 0x00, 0x00, 0x03, 0x8F, 0xFF, 0x00, 0x01, 0xE3, 0x1B, 0xB6, 0x,0,0x6D, 0x9B, 0x80, 0x080, 0x 0x33, 0x31, 0xB6, 0x6C, 0xB1, 0x80, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x03, 0x 3, 0x31, 0xB6, 0x6C, 0xB1, 0x80, 0x00, 0x08, 0x10, 0x00, 0x00, 0xB, 0,0,0x03, 0xFF, 0xFF, 0x00, 0x06, 0x13, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x06, 0x1B, 0x1F, 0xBE, 0x6C, 0x8F, 0x00, 0x00, 0x08, 0x10, 0x0 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x, 0x08, 0x10, 0x00, 0x030, 0x × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10으로, 0 × 00, 0 × 00,은 0x03, 0xFF로, 0xF8, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령 0x0C, 0x00으로, 0x0F의, 0xF8, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령 0x0C, 0x00으로, 0x0F의, 0xFC, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x08, 0x10, 0x0C, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 x08, 0x10, 0x0E, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0x1E, 0x3C, 0xF8, 0xF0, 0x00, 0x00, 00x08 0x0D, 0x93, 0x6E, 0xCD, 0x90, 0x00, 0x00, 0x08, 0x10, 0x0F, 0x87, 0x0F, 0xF9, 0x80, 0x00, 0x00, 0xCF 0x0F, 0x87, 0xFF, 0xF9, 0x80, 0x00, 0x00, 0x03, 0xB0, 0xC6, 0xCF, 0x00, 0x,0,0x00, 0x00, 0x08, 0x10, 0x 0x6C, 0xCD, 0xB0, 0x00, 0x00, 0x08, 0x10, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x0,0x00, 0x00, 0x07, 0x9C, 0x03 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x08, 0x10, 0x03, 0xFF, 0x03 0x00, 0x00, 0x00, 0x08, 0x10, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0xFF, 0xFF, 0xE0, 0x × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령하는 0x00에서 0x7F, 0xFF로, 0x80으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x08, 0x10, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x,0,0,0x00, 0x00, 0x00, 0x00, 0x00, 0x080, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령하는 0x00 0x07 인, 0xCF, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령 × 00, 0x07 인, 0xCF, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령하는 0x00에는 0x07, 0x83, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령하는 0x00에는 0x07, 0x83, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령하는 0x00 0x06 일, 은 0x03, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x10, 명령하는 0x00에는 0x07, 0x83, 0x80으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x07, 0x83, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x0, 0x0, 0x00, 0x00, 0x00, 0x0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x10, 명령은 0x04, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, × 00,가 0x20, 0x02로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 40,하는 0x01, 0x80으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,하는 0x01, 0x80으로, 0 × 00, 0x60으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x0E, 0x00으로, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, FFx, 0x00, FFx, 0x00, 0x00, 0x70, 0x00, 0x70, 0x000, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0,0,0,0,0,0,0,0x00,0x00,0x00,0x 0x00, 0x00, 0x00, 0x00}; 무효 설정() { pinMode(Key_add,INPUT); digitalWrite(Key_add,HIGH); 핀모드(키_서브,입력); digitalWrite(Key_sub,HIGH); 핀모드(키홀드, 입력); digitalWrite(Key_hold,HIGH); ADMUX=0x60; ADCSRA=0xe2; u8g.setFont(u8g_font_5x7); u8g.firstPage(); do { u8g.drawBitmapP( 0, 0, 16, 64, L); } 동안( u8g.nextPage() ); 지연(2000); } 무효 루프( ) { 샘플( ); 측정하다( ); 변환( ); 키 스캔( ); if(hold==0) { u8g.firstPage( ); { 무승부( ); } 동안( u8g.nextPage( )); } } 무효 샘플() { for(i =0;i <192;i++) { 버퍼[i] =ADCH; switch(Key) { 경우 1:중단; 사례 2:delayMicroseconds(4); 부서지다; 사례 3:delayMicroseconds(10); 부서지다; 사례 4:delayMicroseconds(23); 부서지다; 사례 5:delayMicroseconds(60); 부서지다; 사례 6:delayMicroseconds(123); 부서지다; 사례 7:delayMicroseconds(248); 부서지다; 사례 8:delayMicroseconds(623); 부서지다; 사례 9:delayMicroseconds(1247); 부서지다; 기본값:중단; } }}무효 측정(){ V_max=버퍼[0]; V_min=버퍼[0]; for(i=0;i<192;i++) { if(Buffer[i]>V_max) V_max=Buffer[i]; if(버퍼[i]=V_mid) { i1=i; 부서지다; } } for(i=i1+1;i<98+i1;i++) { if(Buffer[i]=V_mid) { i2=i; 부서지다; } } t=i2-i1; if(t>0) 주파수 =8000/t; else Freq=0;} 무효 Transform( ) { for(sta=0;sta<96;sta++) { if(Buffer[sta]<128&&Buffer[sta+2]>128) break; } for(i =0;i <96;i++) Y[i] =63-(버퍼[i+sta]>>2); } 무효 그리기( ) { for(x =0;x <95;x++) u8g.drawLine(x,Y[x],x,Y[x+1]); u8g.drawFrame(0,0,97,64); u8g.drawLine(48,0,48,63); u8g.drawLine(0,32,96,32); for(x=0;x<96;x+=8) u8g.drawLine(x,31,x,33); for(y=0;y<64;y+=8) u8g.drawLine(47,y,49,y);for(x=8;x<96;x+=8) { for(y=8;y<64;y+=8) u8g.drawPixel(x,y); } u8g.drawStr(98,7,"MS/div"); u8g.drawStr(98,23,"V/div"); u8g.drawStr(98,30,"0.324"); u8g.drawStr(98,40,"Vpp"); u8g.setPrintPos(98, 47); u8g.print(Vpp); u8g.drawStr(118,47,"V"); u8g.drawStr(98,55,"F(HZ)"); 스위치(키) { 사례 1:u8g.drawStr(98,14,"0.02"); u8g.setPrintPos(98, 62); u8g.print(주파수*50); 부서지다; 사례 2:u8g.drawStr(98,14,"0.05"); u8g.setPrintPos(98, 62); u8g.print(주파수*20); 부서지다; 사례 3:u8g.drawStr(98,14," 0.1"); u8g.setPrintPos(98, 62); u8g.print(주파수*10); 부서지다; 사례 4:u8g.drawStr(98,14," 0.2"); u8g.setPrintPos(98, 62); u8g.print(주파수*5); 부서지다; 사례 5:u8g.drawStr(98,14," 0.5"); u8g.setPrintPos(98, 62); u8g.print(주파수*2); 부서지다; 사례 6:u8g.drawStr(98,14," 1"); u8g.setPrintPos(98, 62); u8g.print(주파수); 부서지다; 사례 7:u8g.drawStr(98,14," 2"); u8g.setPrintPos(98, 62); u8g.print(주파수/2); 부서지다; 사례 8:u8g.drawStr(98,14," 5"); u8g.setPrintPos(98, 62); u8g.print(주파수/5); 부서지다; 사례 9:u8g.drawStr(98,14," 10"); u8g.setPrintPos(98, 62); u8g.print(주파수/10); 부서지다; 기본값:중단; }}무효 Key_scan(){ if(digitalRead(Key_add)==LOW) { while(digitalRead(Key_add)==LOW); 키++; if(키==10) 키=9; 지연(10); } if(디지털읽기(키_서브)==낮음) { 동안(디지털리드(키_서브)==낮음); 열쇠--; if(키==0) 키=1; 지연(10); } if(digitalRead(Key_hold)==LOW) { 동안(digitalRead(Key_hold)==LOW); 보류 =~ 보류; 지연(10); }} 

    회로도


    제조공정

    1. DIY LUMAZOID Arduino 뮤직 비주얼라이저
    2. Nokia 5110 LCD의 DIY Simple 20kHz Arduino 오실로스코프
    3. 아이언맨
    4. 나를 찾기
    5. LED 매트릭스 + 모션 센서 도어 디스플레이 [Arduino Holiday]
    6. Arduino 가습기 제어
    7. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
    8. arduino를 사용한 소나 및 IDE 처리 시 표시
    9. MobBob:Android 스마트폰으로 제어되는 DIY Arduino 로봇
    10. 128x64 LCD 디스플레이의 DIY 10Hz-50kHz 오실로스코프