이 프로젝트 정보
소개
이 프로젝트는 Arduino Uno, 서보 모터, 초음파 센서 및 압전 부저로 구성된 Arduino 기반 보안 시스템입니다.
여기서 초음파 센서는 범위 내에 있는 물체를 감지하여 부저를 작동시킵니다. 이 센서 데이터는 그래픽 지도를 생성하는 Processing IDE 소프트웨어에도 제공됩니다.
서보 모터는 초음파 센서를 회전시켜 넓은 영역을 커버하는 데 사용됩니다.
이것은 매우 간단한 프로젝트이며 1시간 이내에 완료할 수 있습니다.
다음은 프로젝트 절차입니다 - <울> 센서의 트리거 핀을 Arduino의 핀 2에 연결
<울> 센서의 에코 핀을 Arduino의 핀 3에 연결
<울> 센서 전원의 Vcc와 GND를 각각 연결하고 접지
<울> 브레드보드에 버저 배치
<울> 양극을 Arduino의 10번 핀에 연결하고 음극을 접지에 연결합니다.
<울> 서보 모터의 검정색과 빨간색 선을 각각 접지에 연결하고 전원을 공급합니다.
<울> 서보 모터의 노란색 선을 Arduino의 핀 9에 연결
<울> Arduino의 5V 단자를 전원에 연결하고 Arduino의 GND 단자를 접지에 연결합니다.
이러한 연결이 끝나면 전체 회로를 그림과 같이 상자 안에 넣습니다.
이제 코딩할 시간입니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> 코드
<울> 보안 시스템_IDE
처리
보안 시스템_IDEC9검색
#include . int tPin =2, int ePin =3, int buz =10, int d1,d2, int i =0, int 거리, 서보 myServo, 무효 설정() { Serial.begin(9600); 핀모드(t핀, 출력); 핀모드(e핀, 입력); 핀모드(버즈, 출력); myServo.attach(9); } 무효 루프() { for(i=0;i<=180;i +=10) { myServo.write(i); 지연(30); d2 =계산 거리(); Serial.print(i); Serial.print(","); Serial.print(d2); Serial.print("."); } for(i=180;i>0; i-=10){ myServo.write(i); 지연(30); d2 =계산 거리(); Serial.print(i); Serial.print(","); Serial.print(d2); Serial.print("."); }}int 계산 거리(){ digitalWrite(tPin,HIGH); 지연(1000); digitalWrite(tPin, LOW); d1 =펄스 입력(ePin, HIGH); d2 =d1 * 0.0171821306; if (d2 <10) { digitalWrite(buz,HIGH); } else { 디지털 쓰기(부즈,낮음); } 리턴 d2; }
처리자바
<사전>가져오기 processing.serial.*; // 직렬 통신을 위한 라이브러리 가져오기import java.awt.event.KeyEvent; // 직렬 포트에서 데이터를 읽기 위한 라이브러리 가져오기 import java.io.IOException;Serial myPort; // 객체 정의 직렬// defube variablesString angle="";String distance="";String data="";String noObject;float pixsDistance;int iAngle, iDistance;int index1=0;int index2=0;PFont orcFont; 무효 설정() { 크기(1366, 768); // ***이것을 화면 해상도로 변경*** smooth(); myPort =new Serial(this,"COM3", 9600); // 직렬 통신 시작 myPort.bufferUntil('.'); // 직렬 포트에서 문자 '.'까지 데이터를 읽습니다. 따라서 실제로 다음과 같이 읽습니다. angle,distance.}void draw() { fill(98,245,31); // 움직이는 라인의 모션 블러 및 느린 페이드 시뮬레이션 noStroke(); 채우기(0,4); rect(0, 0, 너비, 높이-높이*0.065); 채우기(98,245,31); // 녹색 // 레이더를 그리기 위한 함수를 호출합니다. drawRadar(); 그리기선(); 그리기 개체(); drawText();}void serialEvent(Serial myPort) { // 직렬 포트에서 데이터 읽기 시작 // 직렬 포트에서 문자 '.'까지 데이터를 읽습니다. 문자열 변수 "data"에 넣습니다. 데이터 =myPort.readStringUntil('.'); 데이터 =data.substring(0,data.length()-1); index1 =data.indexOf(","); // ',' 문자를 찾아 변수 "index1"에 넣습니다. angle=data.substring(0, index1); // 위치 "0"에서 변수 index1의 위치까지 데이터를 읽거나 Arduino 보드가 직렬 포트로 보낸 각도 값 distance=data.substring(index1+1, data.length()); // "index1" 위치에서 데이터 끝까지 데이터 읽기 pr thats the distance of the distance // String 변수를 Integer로 변환 iAngle =int(angle); iDistance =int(distance);} 무효 drawRadar() { pushMatrix(); 번역(너비/2, 높이-높이*0.074); // 시작 좌표를 새 위치로 이동합니다. noFill(); 스트로크 무게(2); 뇌졸중(98,245,31); // 호 선을 그립니다. arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); 호(0,0,(너비-너비*0.27),(너비-너비*0.27),PI,TWO_PI); 호(0,0,(너비-너비*0.479),(너비-너비*0.479),PI,TWO_PI); 호(0,0,(너비 너비*0.687),(너비 너비*0.687),PI,TWO_PI); // 각도선을 그립니다. line(-width/2,0,width/2,0); line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); 라인((-너비/2)*cos(라디안(30)),0,너비/2,0); popMatrix();}무효 drawObject() { pushMatrix(); 번역(너비/2, 높이-높이*0.074); // 시작 좌표를 새 위치로 이동합니다. strokeWeight(9); 뇌졸중(255,10,10); // 빨간색 pixsDistance =iDistance*((height-height*0.1666)*0.025); // 센서에서 cm에서 픽셀까지의 거리를 커버 // 범위를 40 cms로 제한 if(iDistance<10){ // 각도와 거리에 따라 객체를 그립니다. line(pixsDistance*cos(radians(iAngle)) ,-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); } popMatrix();}무효 drawLine() { pushMatrix(); 스트로크 무게(9); 뇌졸중(30,250,60); 번역(너비/2, 높이-높이*0.074); // 시작 좌표를 새 위치로 이동합니다. line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // 각도에 따라 선을 그립니다. popMatrix();}void drawText() { // 화면에 텍스트를 그립니다. pushMatrix(); if(iDistance>10) { noObject ="범위를 벗어남"; } else { noObject ="범위 내"; } 채우기(0,0,0); 노스트로크(); rect(0, 높이-높이*0.0648, 너비, 높이); 채우기(98,245,31); 텍스트 크기(25); text("2cm",너비-너비*0.3854,높이-높이*0.0833); text("4cm",너비-너비*0.281,높이-높이*0.0833); text("6cm",너비-너비*0.177,높이-높이*0.0833); text("10cm",너비-너비*0.0729,높이-높이*0.0833); 텍스트 크기(40); text("Akshay6766 ", 너비-너비*0.875, 높이-높이*0.0277); text("각도:" + iAngle +" ", 너비-너비*0.48, 높이-높이*0.0277); text("거리:", 너비-너비*0.26, 높이-높이*0.0277); if(iDistance<40) { text(" " + iDistance +" cm", 너비-너비*0.225, 높이-높이*0.0277); } 텍스트 크기(25); 채우기(98,245,60); 번역((너비-너비*0.4994)+너비/2*cos(라디안(30)),(높이-높이*0.0907)-너비/2*sin(라디안(30))); 회전(-라디안(-60)); 텍스트("30",0,0); 리셋매트릭스(); 번역((너비-너비*0.503)+너비/2*cos(라디안(60)),(높이-높이*0.0888)-너비/2*sin(라디안(60))); 회전(-라디안(-30)); 텍스트("60",0,0); 리셋매트릭스(); 번역((너비-너비*0.507)+너비/2*cos(라디안(90)),(높이-높이*0.0833)-너비/2*sin(라디안(90))); 회전(라디안(0)); 텍스트("90",0,0); 리셋매트릭스(); 번역(너비-너비*0.513+너비/2*cos(라디안(120)),(높이-높이*0.07129)-너비/2*sin(라디안(120))); 회전(라디안(-30)); 텍스트("120",0,0); 리셋매트릭스(); 번역((폭-너비*0.5104)+너비/2*cos(라디안(150)),(높이-높이*0.0574)-너비/2*sin(라디안(150))); 회전(라디안(-60)); 텍스트("150",0,0); 팝매트릭스(); } 섹션> 회로도