안녕하세요 여러분! 저는 Artem Luzhetsky이고 " 똑똑한 집"그리고 IoT (영어 - 사물 인터넷, 사물 인터넷). 우리는 놀라운 방법을 알게 될 것입니다. 홈 네트워크자율적으로 또는 사람의 도움으로 작동하는 다양한 장치에서. 잘? 시작하자!

첫 번째 기사는 소개입니다. 대부분의 사람들이 IoT 개발에 손을 댈 수 있도록 가장 일반적인 보드와 모듈로 작업할 것임을 이해해 주시기 바랍니다.

따라서 우선 사용할 두 개의 마이크로 컨트롤러가 필요합니다.

아두이노 우노

이 게시판을 굳이 소개할 필요는 없을 것 같습니다. 초보자와 DIY 마니아들 사이에서 매우 인기가 좋습니다. 이 보드의 기능은 제한적이며 UNO는 https 프로토콜과 함께 작동할 수 없으며 충분하지 않습니다. 컴퓨팅 파워 ATmega328P 마이크로컨트롤러이므로 마이크로컨트롤러와 https 프로토콜로 작업해야 할 때 ESP8266을 프로그래밍합니다.

ESP8266

Amperka의 Troyka 모듈 ESP8266으로 작업할 것이지만 일반 ESP 8266 모듈을 안전하게 사용할 수 있습니다. 실제로 차이가 없습니다. 연결할 때 가장 중요한 것은 핀의 값을 살펴보고 ESP가 그에 따라 작동한다는 것을 기억하는 것입니다 3.3볼트 논리에 연결하므로 5볼트를 통해 연결하되 전압 조정기를 회로에 연결하거나 단순히 3.3볼트의 전압 공급이 있는 핀을 사용해야 합니다.

이 마이크로 컨트롤러는 일반 시장의 Espressif 시리즈 중 가장 강력하지는 않지만 가장 저렴하고 일반적인 것 중 하나입니다. IoT 개발의 기반이 될 것입니다.

추가 세부 사항

또한 모든 실험을 생성해야 합니다.

  1. LED
  2. 포토 레지스터
  3. 서미스터
  4. 초음파 거리 측정기
  5. 피에조 스피커
  6. 미니 서보
  7. 적외선 센서
  8. IR 리모콘

IoT와 함께 작동하기 위해 이러한 모든 모듈을 가질 필요는 없지만 모든 미래 프로젝트를 만들기 위해서는 결국 모두 구매해야 합니다.

프로그램 및 라이브러리

먼저 ESP8266을 사용하는 경우 Arduino IDE에서 훨씬 쉽게 작업하는 데 도움이 되는 라이브러리를 다운로드하십시오. - http://wiki.amperka.ru/_media/iot-m:iot-m-libs.zip

둘째, IoT에 더 익숙해지려면 데이터를 보낼 수 있는 기능을 제공하는 웹사이트가 필요합니다.

  1. www.dweet.io
  2. maker.iftt.com
  3. narodmon.ru
  4. 등.

셋째 - 우리는 또한 필요합니다 다양한 응용안드로이드에서 폰으로 스마트 홈을 제어할 수 있습니다.

  1. 오픈 허브
  2. 깜박거리다
  3. 등.

모든 방법, 프로그램, 사이트 등은 다음 프로젝트에서 자세히 알아가도록 하겠습니다.

2. "스마트 램프" 만들기

내가 벌써 널 지루하게 만들었니? 가장 간단하게 만들자 스마트 램프방이 어두우면 켜집니다.

사실 이를 위해 UNO가 필요하지도 않고 디지털 맞춤형 포토 센서를 사용할 수도 있지만 앞으로는 이 프로젝트를 인식을 넘어서 변경해야 하므로 어딘가에서 시작해야 합니다.

220볼트의 전기로 작업할 준비가 되었는지 확실하지 않은 경우 손전등 대신 일반 LED를 사용하십시오. 처음에는 내 것을 가져갔다. 오래된 램프 TLI - 204, 거의 모든 상점에 있습니다(미리 네트워크에서 연결 해제됨).

램프에는 두 가지 유형의 작업(켜기 / 끄기)이 있습니다. 내가 하고 싶은 것, 기능을 높이고 싶은 것, 램프를 완전히 켜고 끌 수 있는 기능을 남겨두는 것입니다.

다른 스위치를 사용하지 않고 회로에 병렬로 어떻게든 포토레지스터를 릴레이로 연결하면 작동하지 않으므로 2단 스위치 대신 3단 토글 스위치를 설치하기로 했습니다.

일반 전기 회로는 다음과 같아야 합니다.

모든 것이 올바르게 완료되면 스위치의 세 번째 위치에서 마이크로 컨트롤러에서 릴레이에 전류를 공급하여 램프를 켤 수 있습니다.

아두이노에 포토레지스터를 연결해 보겠습니다. 스키마는 다음과 같습니다.

3. "스마트 램프" 코드

이제 방이 어두울 때 릴레이에 전류를 전송하는 코드를 작성해 보겠습니다.

#define SHINE 5 //PIN ON PHOTORESISTOR #define REL 13 //PIN ON RELAY void setup()( pinMode(SHINE, INPUT); pinMode(REL, OUTPUT); Serial.begin(9600); ) void 루프()( if (아날로그읽기(샤인)<600) // Если света в комнате мало, то включаем лампу { digitalWrite(REL, HIGH) } else // если много, то выключаем { digitalWrite(REL, LOW); } Serial.printIn(analogRead(SHINE)); selay(500); }

모든 것을 연결할 때 라마에서 포토 센서를 제거하는 것을 잊지 마십시오. 그렇지 않으면 라이트 쇼가 당신을 기다립니다. 모든 것이 작동해야 합니다.

다음 번에는 코드를 복잡하게 만들고 몇 가지 기능을 더 추가해 보겠습니다. 곧 봐요!

이 실험에서 LED는 조명 레벨이 전위차계에 의해 설정된 임계값 아래로 떨어질 때 켜야 합니다.

실험을 위한 부품 목록

- 1 Arduino Uno 보드;

- 납땜 없는 브레드보드 1개;

- 1개의 LED;

- 1개의 포토레지스터;

- 공칭 값이 220 Ohm인 저항 1개, 공칭 값이 10 kOhm인 저항 1개;

- 1개의 가변 저항기(전위차계);

- 10개의 수-수 전선.

선택적 목표에 대한 세부 정보

1개 더 많은 LED;

공칭 값이 220ohm인 또 다른 1개의 저항;

2개의 전선이 더 있습니다.

기본 다이어그램

브레드보드의 다이어그램

스케치

Arduino IDE용 스케치 다운로드
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // 조명 수준을 읽습니다. 그런데 // 변수를 선언하고 할당할 수 있습니다. 한 번에 값을 int lightness = analogRead(LDR_PIN); // 조정하는 전위차계에서 값을 읽습니다. // 조건부 어둠과 빛 사이의 임계값 int threshold = analogRead(POT_PIN); // 부울 변수 선언 // "is it dark now" 값을 할당합니다. 부울 변수는 정수 변수와 달리 // true(eng. true) 또는 false(eng. false)의 두 값 중 하나만 포함할 수 있습니다. // 이러한 값 ​​// boolean(eng. boolean).boolean tooDark = (밝기)라고도 합니다.< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

코드 설명

  • 우리는 새로운 유형의 변수를 사용하고 있습니다 - 부울, 값만 저장 진실 (진실, 1) 또는 거짓 (거짓, 0). 이 값은 boolean 표현식을 평가한 결과입니다. 이 예에서 부울 표현식은 다음과 같습니다. 가벼움< threshold . 인간의 언어로 이것은 "임계값 이하의 조도"처럼 들립니다. 이러한 진술은 조명이 임계값 수준보다 낮을 때 사실이 될 것입니다. 마이크로 컨트롤러는 변수의 값을 비교할 수 있습니다 가벼움그리고 한계점, 차례로 측정 결과이고 논리 표현의 참을 계산합니다.
  • 우리는 명확성을 위해 이 논리적 표현을 대괄호로 묶었습니다. 항상 읽기 쉬운 코드를 작성하는 것이 좋습니다. 다른 경우에는 일반 산술에서와 같이 괄호가 연산 순서에 영향을 줄 수 있습니다.
  • 우리 실험에서 부울 표현식은 값이 참일 때 참이 됩니다. 가벼움더 적은 가치 한계점, 연산자를 사용했기 때문에 < . 우리는 연산자를 사용할 수 있습니다 > , <= , >= , = = , != , 보다 크거나 작거나 같음, 크거나 같음, 같음, 같지 않음을 각각 의미합니다.
  • 특히 주의하세요 논리 연산자 = = 할당 연산자와 혼동하지 마십시오. = . 첫 번째 경우에는 표현식의 값을 비교하고 다음을 얻습니다. 부울(true 또는 false), 두 번째 경우에는 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다. 컴파일러는 우리의 의도를 모르고 오류를 제공하지 않지만 실수로 일부 변수의 값을 변경한 다음 오랜 시간 동안 오류를 찾을 수 있습니다.
  • 조건 연산자 만약에만약에”)는 대부분의 프로그래밍 언어에서 핵심적인 것 중 하나입니다. 그것의 도움으로 우리는 엄격하게 정의된 일련의 작업을 수행할 수 있을 뿐만 아니라 특정 조건에 따라 따라야 할 알고리즘의 분기를 결정할 수 있습니다.
  • 논리적 표현의 경우 가벼움< threshold 의미가 있습니다: 진실또는 거짓. 우리는 그것을 계산하고 그것을 부울 변수에 넣었습니다 너무 어둡다("너무 어둡다"). 따라서 우리는 "너무 어두우면 LED를 켜십시오"라고 말합니다.
  • "조도가 임계값 수준보다 낮으면 LED를 켜십시오"라고 말할 수도 있습니다. 로 전송 만약에전체 논리 표현:
만약 (가벼움< threshold) { // ... }
  • 조건 연산자 만약에논리식이 참인 경우 실행되는 코드 블록이 뒤에 와야 합니다. 두 중괄호를 잊지 마세요. {} !
  • 표현식이 참이면 실행만 하면 됩니다. 하나 지시, 그것은 직후에 쓸 수 있습니다 만약에(...)없이 중괄호:
만약 (가벼움< threshold) digitalWrite(LED_PIN, HIGH);
  • 운영자 만약에디자인으로 확장 가능 또 다른("그렇지 않으면"). 코드 블록 또는 그 뒤에 오는 단일 명령문은 다음의 부울 표현식이 있는 경우에만 실행됩니다. 만약에의미가 있다 거짓 , « 거짓". 중괄호의 규칙은 동일합니다. 우리 실험에서 "너무 어두우면 LED를 켜고, 그렇지 않으면 LED를 끕니다."라고 썼습니다.

자신을 확인하기 위한 질문

  1. 아날로그 입력과 접지 사이에 포토 레지스터를 설치하면 장치가 반대로 작동합니다. 빛의 양이 증가하면 LED가 켜집니다. 왜요?
  2. LED의 빛이 포토 레지스터에 떨어지면 장치 작동의 결과는 무엇입니까?
  3. 이전 질문에서 설명한 대로 포토레지스터를 설치했다면 장치가 올바르게 작동하도록 프로그램을 어떻게 변경해야 합니까?
  4. 코드가 있다고 가정 해 봅시다. if (조건) (동작;). 어떤 경우에 동작 ?
  5. 어떤 가치에 와이표현 x + y > 0경우 사실이 될 것입니다 x > 0 ?
  6. 명령문에 조건이 있는 경우 실행할 명령을 지정해야 합니까? 만약에거짓?
  7. 연산자의 차이점은 무엇입니까 = = 운영자로부터 = ?
  8. 우리가 건설을 사용하는 경우 if (조건) action1; 그렇지 않으면 action2;, 어떤 작업도 실행되지 않는 상황이 있을 수 있습니까? 왜요?

독립적인 솔루션을 위한 과제

  1. 변수를 사용하지 않고 프로그램 다시 작성 너무 어둡다장치의 기능을 유지하면서.
  2. 회로에 다른 LED를 추가하십시오. 조도가 임계값 이하로 떨어지면 하나의 LED가 켜지고, 조도가 임계값의 절반 이하로 떨어지면 두 LED가 모두 켜지도록 프로그램을 완성하십시오.
  3. LED가 같은 방식으로 켜지지만 더 강하게 빛날수록 포토 레지스터에 떨어지는 빛이 줄어들도록 회로와 프로그램을 변경하십시오.

아마도 어린 시절의 모든 사람들은 꿈을 꿨을 것입니다. 꿈이 이루어졌을 때 아이의 영혼을 압도하는 느낌, 또는 그의 눈에서 멀리 떨어진 친숙한 반짝임을 기억하려고 노력할 수도 있습니다. 어린 시절 나는 나만의 야간 조명을 갖는 꿈을 꿨습니다.

이제 저는 BSUIR의 4학년 학생입니다. 회로에 대한 과정 프로젝트는 종이가 아니라 철판 위에서 할 수 있다는 말을 들었을 때 문득 떠올랐습니다. 아이, 스스로 만들 수 있습니다. 그리고 밤에 방을 밝히는 오브제뿐만 아니라 어떤 분위기에도 쉽게 제어할 수 있는 장치를 만들기 위해. 왜 안 돼? 손을 사용하여 색상을 변경하는 기능을 추가하기로 결정했습니다. 손을 야간 조명에 가까울수록 색상(RGB) 중 하나가 더 밝게 화상을 입습니다. 그리고 리모콘으로 야간 조명을 제어하고 싶습니다.

나는 사이트 cxem.net에서 아이디어를 엿본 것을 즉시 인정해야 합니다. 간단히 말해서, 이 예는 시프트 레지스터와 초음파 거리 센서로 제어되는 RGB 매트릭스를 사용했습니다. 하지만 매트릭스가 한 방향으로만 빛난다고 생각했는데, 야간 조명이 측면에서 빛나길 원했습니다.

회로 요소의 정당화


나는 내 관심을 돌렸다 아두이노 마이크로컨트롤러. UNO는 내 생각에 매우 적합한 옵션입니다. 첫째, 가장 인기 있는 플랫폼이고 핀 수가 Mega와 달리 너무 많지 않기 때문입니다. 둘째, 외부 전원을 연결할 수 있습니다. 제 경우에는 12V입니다. , Nano 와 달리, 세 번째로 ... 글쎄, 나는 당신이 이 두 가지 점에 대해 생각할 수 있다고 생각합니다. 이 플랫폼은 프로그래밍 언어의 편리성과 단순성, 개방형 아키텍처 및 프로그램 코드로 인해 전 세계적으로 매우 인기가 있습니다.

자세한 정보이 게시판에 대한 내용은 인터넷에서 쉽게 찾을 수 있으므로 기사에 과부하가 걸리지 않습니다.

따라서 시스템의 주요 요구 사항. 필수의:
- 시스템을 제어하기 위해 장애물까지의 거리를 추적하는 센서;
– 리모컨에서 신호를 읽기 위한 센서 리모콘;
- 필요한 조명 기능을 제공하는 LED;
- 전체 시스템을 제어하는 ​​제어 장치.

프로젝트의 거리 센서로 거리 측정기가 필요하며, 각각에 해당합니다. 특정 색상: 빨강, 초록, 파랑. 거리 센서는 야간 조명에서 손의 거리를 모니터링하고 손을 특정 센서에 가까울수록 이 거리계에 해당하는 색상이 더 강해집니다. 반대로 손이 멀수록 센서에 해당하는 색상에 더 적은 전압이 가해집니다.

에서 가장 인기 있는 거리 측정기 이 순간샤프 GP2Y0A21YK 및 HC-SR04입니다. Sharp GP2Y0A21YK는 적외선 거리 측정기입니다. IR 이미 터와 IR 수신기가 장착되어 있습니다. 첫 번째는 빔의 소스 역할을하며 반사는 두 번째를 잡습니다. 동시에 센서의 적외선은 사람의 눈에는 보이지 않으며 이 강도에서 무해합니다.

HC-SR04 초음파 변환기와 비교하여 이 변환기에는 장점과 단점이 있습니다. 장점은 중립성과 무해성을 포함합니다. 그리고 단점은 특정 유형의 조명을 포함하여 범위가 더 작고 외부 간섭에 의존한다는 것입니다.

프로젝트의 거리 센서로 우리는 초음파 거리 측정기 HC-SR04.
HC-SR04의 작동 원리는 잘 알려진 반향 정위 현상을 기반으로 합니다. 사용할 때 이미 터는 음향 신호를 생성하고 장애물에서 반사되어 센서로 되돌아오고 수신기에 의해 기록됩니다. 공기 중 초음파의 전파 속도(약 340m/s)와 방출된 신호와 수신된 신호 사이의 지연 시간을 알면 음향 장벽까지의 거리를 쉽게 계산할 수 있습니다.

TRIG 입력은 마이크로컨트롤러의 핀에 연결됩니다. 이 출력에 펄스를 인가해야 합니다. 디지털 신호지속 시간 10 µs. TRIG 입력의 신호에서 센서는 초음파 펄스의 버스트를 보냅니다. 반사된 신호를 수신한 후 센서는 ECHO 출력에서 ​​펄스 신호를 생성하며 지속 시간은 장애물까지의 거리에 비례합니다.

적외선 센서. 물론 원격 제어에 필요한 신호는 이 센서에서 읽고 디코딩됩니다. TSOP18은 주파수만 다릅니다. VS1838B TSOP1838 센서가 프로젝트에 선택되었습니다.

이 프로젝트는 모든 색상으로 방을 조명한다는 아이디어를 기반으로 했습니다. 즉, 빨강, 녹색, 파랑의 3가지 기본 색상이 필요합니다. 따라서 작업에 완벽하게 대처할 SMD 5050RGB LED 모델이 선택되었습니다.

각 LED에 가해지는 전압의 양에 따라 이 조명의 강도가 변경됩니다. LED는 저항을 통해 연결해야 합니다. 그렇지 않으면 LED뿐만 아니라 Arduino도 망칠 위험이 있습니다. LED의 전류를 허용 가능한 값으로 제한하려면 저항이 필요합니다. 사실 LED의 내부 저항은 매우 낮으며 저항을 사용하지 않으면 이러한 전류가 LED를 통과하여 LED와 컨트롤러를 모두 태울 것입니다.

프로젝트에 사용된 LED 스트립은 12V로 전원이 공급됩니다.

"꺼짐"상태의 LED 전압이 6V이고 5V를 초과하는 전원 공급 장치를 조절해야하기 때문에 키 모드의 트랜지스터를 회로에 추가해야합니다. 내 선택은 BC547c 모델에 떨어졌습니다.

작동 원리를 잊어 버린 사람들을 위해 간단히 고려하십시오. npn 트랜지스터. 전압을 전혀 가하지 ​​않고 짧은 시간이 아니라 몇 옴의 저항을 통해베이스와 이미 터의 단자를 간단히 잡고 닫으면베이스 이미 터 전압이 0입니다. 따라서 기본 전류가 없습니다. 트랜지스터가 닫히고 컬렉터 전류는 무시할 수 있으며 동일한 초기 전류입니다. 이 경우 트랜지스터는 차단 상태라고 합니다. 반대 상태를 포화라고 합니다. 트랜지스터가 완전히 열려 더 이상 열릴 곳이 없을 때입니다. 이러한 정도의 개방으로 컬렉터 - 이미 터 섹션의 저항이 너무 작아서 컬렉터 회로에 부하가없는 트랜지스터를 켜는 것은 불가능하며 즉시 타 버릴 것입니다. 이 경우 컬렉터의 잔류 전압은 0.3 ... 0.5V에 불과합니다.

이 두 가지 상태, 포화 및 차단은 트랜지스터가 일반 릴레이 접점처럼 키 모드에서 작동할 때 사용됩니다. 이 모드의 주요 의미는 작은 기본 전류가 기본 전류보다 수십 배 더 큰 큰 컬렉터 전류를 제어한다는 것입니다. 외부 에너지원으로 인해 큰 컬렉터 전류가 얻어지지만 여전히 전류 증폭은 분명합니다. 우리의 경우 작동 전압이 5V인 미세 회로에는 12V에서 작동하는 LED가 있는 3개의 스트립이 포함됩니다.

키 캐스케이드의 작동 모드를 계산해 보겠습니다. LED가 최대 전력으로 타도록 기본 회로의 저항 값을 계산해야 합니다. 전류 이득이 가능한 최대 컬렉터 전류를 가능한 최소 베이스 전류로 나눈 몫보다 크거나 같은 계산의 필수 조건:

따라서 스트립은 220V의 작동 전압용이 될 수 있으며 기본 회로는 5V의 전압을 갖는 미세 회로에서 제어할 수 있습니다. 트랜지스터가 이 컬렉터 전압으로 작동하도록 설계된 경우 LED는 문제 없이 켜집니다.
베이스-이미터 접합부의 전압 강하는 0.77V이며, 베이스 전류가 5mA이고 콜렉터 전류가 0.1A인 경우입니다.
기본 저항 양단의 전압은 다음과 같습니다.

옴의 법칙:

표준 저항 시리즈에서 8.2kOhm의 저항을 선택합니다. 이것으로 계산이 완료됩니다.

내가 만난 한 가지 문제에 주의를 기울이고 싶습니다. IRremote 라이브러리를 사용할 때 파란색을 조정할 때 Arduino가 중단됩니다. 인터넷에서 길고 신중한 검색 끝에 밝혀진 것은 주어진 라이브러리이 Arduino 모델에는 기본 타이머 2를 사용합니다. 타이머는 PWM 출력을 제어하는 ​​데 사용됩니다.

타이머 0(시스템 시간, PWM 5 및 6);
타이머 1(PWM 9 및 10);
타이머 2(PWM 3 및 11).

처음에는 PWM 11을 사용하여 파란색을 조절했습니다. 따라서 PWM, 타이머 및 이를 사용할 수 있는 타사 라이브러리로 작업할 때 주의하십시오. 에 이상하다 홈페이지 github에서는 이 뉘앙스에 대해 아무 말도 하지 않았습니다. 원하는 경우 타이머 1로 라인의 주석을 제거하고 2를 주석 처리할 수 있습니다.

브레드보드의 연결 요소는 다음과 같습니다.

브레드보드에서 테스트한 후 "보드에 요소 배치" 및 "납땜 인두로 작업" 단계가 시작되었습니다. 완성된 보드의 첫 번째 테스트 후, 뭔가 잘못되었다는 생각이 머리를 스칩니다. 그리고 여기에서 많은 단계에 친숙한 "테스터와 함께 힘든 작업"이 시작됩니다. 그러나 오작동(여러 개의 인접 접점이 실수로 납땜됨)이 신속하게 제거되어 오랫동안 기다려온 장난꾸러기 LED 조명입니다.

더군다나 문제는 몸 뒤에 있었다. 이 경우 센서용 구멍이 있는 합판을 절단했습니다. 후면 덮개는 내부에서 보기를 즐기고 원하는 경우 마무리하거나 다시 할 수 있도록 특별히 제거할 수 있습니다. 또한 보드와 전원을 다시 프로그래밍하기 위한 2개의 구멍이 있습니다.

케이스는 2액형 에폭시 접착제에 접착되었습니다. 전에 만난 적이없는 사람들을 위해이 접착제의 특성에 주목할 가치가 있습니다. 이 동지는 두 개의 별도 용기에 제공되며 내용물이 혼합되면 즉각적인 화학 반응이 발생합니다. 섞은 후에는 3~4분 안에 재빠르게 행동해야 합니다. 추가 사용을 위해서는 새로운 부분을 혼합해야 합니다. 따라서 이것을 반복하려고 하면 작은 부분을 섞어서 매우 빠르게 행동하면 생각할 시간이 많지 않을 것입니다. 따라서 케이스를 접착하는 방법과 위치를 미리 고려해 볼 가치가 있습니다. 그리고 그것은 한 번에 할 수 없습니다.

LED가 있는 스트립 고정용 상단 덮개모든 전선이 완벽하게 통과하는 튜브가 삽입되었습니다.

전등갓에 대한 질문이 생겼을 때 나는 어린 시절에 기초가 된 간단한 실, 접착제 및 풍선으로 공예품을 어떻게 만들었는지 기억했습니다. 갓의 원리는 동일하게 취했지만 공보다 다면체를 감는 것이 더 어려운 것으로 판명되었습니다. 나사산이 구조물에 가하는 압력으로 인해 위쪽으로 좁아지기 시작했고 나사산이 떨어지기 시작했습니다. 긴급히 손으로 접착제를 사용하여 위에서 구조를 강화하기로 결정했습니다. 그리고 나서 CD가 구출되었습니다. 최종 결과는 다음과 같은 야간 조명입니다.

마지막으로 하고 싶은 말은?

프로젝트에서 무엇을 변경해야 합니까? 거리 센서의 TRIG 신호를 공급하기 위해 3개 대신 1개의 Arduino 출력을 사용할 수 있습니다. 나는 또한 IR 센서 (내가 잊어 버린)를위한 구멍을 제공 할 것입니다. 아아, 물론 리모컨의 신호를 읽을 수없는 경우에 숨겨져 있습니다. 그러나 누가 납땜하고 드릴링 할 수 없다고 했습니까?

흥미진진한 학기였고, 종이에 기록하지 않은 일을 해볼 수 있는 좋은 기회였다는 점을 말씀드리고 싶습니다. 덕분에 "어린 시절의 꿈" 항목 옆에 체크 표시를 하나 더 할 수 있었습니다. 그리고 새로운 것을 시도하는 것이 어렵다고 생각되고 먼저 무엇을 해야 할지 모르겠더라도 걱정하지 마십시오. 많은 사람들이 머리 속에 생각을 가지고 있습니다. 여기서 시작해야 할 부분과 이 작업을 수행할 수 있는 방법은 무엇입니까? 살다 보면 헷갈릴 수 있는 일이 많지만, 조금만 노력해도 눈 깜짝할 사이에 산을 옮길 수 있다는 사실을 알게 될 것입니다.

포토레지스터를 기반으로 구축된 광 센서(조명)는 실제 arduino 프로젝트에서 자주 사용됩니다. 그들은 비교적 간단하고 비싸지 않으며 온라인 상점에서 쉽게 찾고 구입할 수 있습니다. arduino 포토레지스터를 사용하면 조명 수준을 제어하고 변화에 대응할 수 있습니다. 이 기사에서는 포토 레지스터가 무엇인지, 이를 기반으로 광 센서가 어떻게 작동하는지, 센서를 Arduino 보드에 올바르게 연결하는 방법을 살펴보겠습니다.

포토레지스터는 이름에서 알 수 있듯이 거의 모든 전자 회로에서 흔히 볼 수 있는 저항과 직접적인 관련이 있습니다. 기존 저항기의 주요 특성은 저항값입니다. 전압과 전류는 그것에 의존하며 저항을 사용하여 다른 구성 요소의 원하는 작동 모드를 설정합니다. 일반적으로 동일한 작동 조건에서 저항기의 저항 값은 실제로 변경되지 않습니다.

기존의 저항과 달리 포토 레지스터주변 빛의 수준에 따라 저항을 변경할 수 있습니다. 이것은 전자 회로매개 변수는 지속적으로 변경됩니다. 우선 우리는 포토 레지스터에 떨어지는 전압에 관심이 있습니다. arduino의 아날로그 핀에서 이러한 전압 변화를 고정함으로써 회로의 논리를 변경하여 외부 조건에 적응하는 장치를 만들 수 있습니다.

포토레지스터는 다양한 시스템에서 널리 사용됩니다. 가장 일반적인 응용 프로그램은 가로등입니다. 밤이 도시에 내리거나 흐려지면 조명이 자동으로 켜집니다. 일정에 따라 켜지지 않고 조명에 따라 켜지는 포토 레지스터로 경제적인 가정용 전구를 만들 수 있습니다. 광 센서를 기반으로 할 수도 있습니다. 보안 시스템, 닫힌 캐비닛이나 금고가 열리고 켜진 직후에 트리거됩니다. 항상 그렇듯이 모든 arduino 센서의 범위는 우리의 상상력에 의해서만 제한됩니다.

온라인 상점에서 어떤 포토 레지스터를 구입할 수 있습니까?

시장에서 가장 인기 있고 저렴한 센서 옵션은 중국 회사의 대량 생산 모델인 VT 제품의 클론입니다. 이 공급 업체 또는 공급 업체가 정확히 누구와 무엇을 생산하는지 항상 파산 할 수있는 것은 아니지만 가장 간단한 옵션은 포토 레지스터 작업을 시작하는 데 매우 적합합니다.

초보 arduinist는 다음과 같은 기성품 사진 모듈을 구입하는 것이 좋습니다.


이 모듈에는 포토레지스터를 arduino 보드에 쉽게 연결하는 데 필요한 모든 요소가 이미 있습니다. 일부 모듈에는 비교기 회로가 구현되어 있으며 디지털 출력 및 제어용 트리머를 사용할 수 있습니다.

러시아 라디오 아마추어는 러시아 FR 센서로 전환하는 것이 좋습니다. 시판되는 FR1-3, FR1-4 등 - 소비에트 시대에 다시 발행되었습니다. 그러나 이것에도 불구하고 FR1-3이 더 정확한 세부 사항입니다. 이것에서 가격의 차이가 따릅니다.FR의 경우 400루블 이하를 요구합니다. FR1-3은 천 루블 이상입니다.

포토레지스터 마킹

러시아에서 생산되는 모델의 현대적인 마킹은 매우 간단합니다. 처음 두 글자는 PhotoResistor이며 대시 뒤의 숫자는 현상 번호를 나타냅니다. FR -765 - 포토레지스터, 개발 765. 일반적으로 부품 본체에 직접 표시됨

VT 센서는 마킹 방식에 저항 범위가 있습니다. 예를 들어:

  • VT83N1 - 12-100kΩ(12K 조명, 100K 어둠)
  • VT93N2 - 48-500kOhm(48K - 조명, 100K - 어둠 속에서).

때로는 모델에 대한 정보를 명확히 하기 위해 판매자가 제조업체의 특별 문서를 제공합니다. 작업 매개 변수 외에도 부품의 정확도도 표시됩니다. 모든 모델에서 감도 범위는 스펙트럼의 가시 영역에 있습니다. 수집 광 센서작업의 정확도는 조건부 개념임을 이해해야 합니다. 같은 제조사의 모델이라도 1회분, 1회 구매시 50% 이상 차이가 날 수 있습니다.

공장에서 부품은 적색에서 녹색까지의 파장으로 설정됩니다. 동시에 대다수는 "보고" 적외선. 특히 정밀한 디테일은 자외선까지도 포착할 수 있습니다.

센서의 장점과 단점

포토레지스터의 주요 단점은 스펙트럼에 대한 감도입니다. 입사광의 유형에 따라 저항은 몇 자릿수까지 변할 수 있습니다. 단점에는 다음이 포함됩니다. 저속조명 변화에 대한 반응. 표시등이 깜박이면 센서가 응답할 시간이 없습니다. 변화 빈도가 상당히 높으면 저항은 일반적으로 조명이 변화하는 것을 "보는" 것을 멈춥니다.

장점은 단순성과 접근성을 포함합니다. 떨어지는 빛에 따라 저항의 직접적인 변화를 통해 단순화할 수 있습니다. 배선도사이. 포토레지스터 자체는 매우 저렴하며 수많은 arduino 키트 및 설계자에 포함되어 있으므로 거의 모든 초보자 arduino가 사용할 수 있습니다.

아두이노에 포토레지스터 연결하기

프로젝트에서 아두이노포토 레지스터는 광 센서로 사용됩니다. 보드에서 정보를 수신하면 릴레이를 켜거나 끄고, 엔진을 시작하고, 메시지를 보낼 수 있습니다. 당연히이 경우 센서를 올바르게 연결해야합니다.

광 센서를 arduino에 연결하는 방식은 매우 간단합니다. 포토 레지스터를 사용하는 경우 연결 다이어그램에서 센서는 전압 분배기로 구현됩니다. 한쪽 어깨는 조명 수준에서 변경되고 두 번째 어깨는 아날로그 입력에 전압을 공급합니다. 컨트롤러 칩에서 이 전압은 ADC를 통해 디지털 데이터로 변환됩니다. 왜냐하면 빛이 닿을 때 센서의 저항이 감소하면 센서에 떨어지는 전압 값도 감소합니다.

포토 레지스터를 배치한 분배기의 암에 따라 증가하거나 감소된 전압이 아날로그 입력에 적용됩니다. 포토 레지스터의 한쪽 다리가 접지에 연결된 경우 최대 전압 값은 어둠에 해당하며 (포토 레지스터의 저항은 최대이며 거의 모든 전압 강하가 있음) 최소값은 양호에 해당합니다. 조명(저항이 0에 가깝고 전압이 최소임). 포토레지스터 암을 전원에 연결하면 동작이 반대가 됩니다.

보드 자체를 설치하는 데 어려움이 있어서는 안됩니다. 포토레지스터는 극성이 없기 때문에 어떤 방향으로든 연결할 수 있고 기판에 납땜하거나 회로 기판을 사용하여 전선으로 연결하거나 연결을 위해 일반 클립(악어)을 사용할 수 있습니다. 회로의 전원은 arduino 자체입니다. 포토 레지스터한쪽 다리는 접지에 연결되고 다른 쪽 다리는 보드의 ADC에 연결됩니다(이 예에서는 AO). 같은 다리에 10kΩ 저항을 연결합니다. 당연히 아날로그 핀 A0뿐만 아니라 다른 핀에도 포토 레지스터를 연결할 수 있습니다.

추가 10K 저항에 대한 몇 마디 우리 회로에는 두 가지 기능이 있습니다. 올바른 전압분배기가있는 회로에서. 완전히 조명된 포토레지스터가 저항을 급격히 감소시키는 상황에서는 전류 제한이 필요합니다. 그리고 전압 성형은 아날로그 포트에서 예측 가능한 값을 위한 것입니다. 사실, 1K 저항은 우리의 포토레지스터로 정상적인 작동에 충분합니다.

저항 값을 변경하여 감도 수준을 "어두운" 및 "밝은" 쪽으로 "이동"할 수 있습니다. 따라서 10K는 빠른 스위칭세계의 도래. 1K의 경우 광 센서는 높은 수준의 조도를 더 정확하게 감지합니다.

기성품의 광 센서 모듈을 사용하면 연결이 훨씬 쉬워집니다. VCC 모듈의 출력을 보드의 5V 커넥터, GND - 접지에 연결합니다. 나머지 핀은 arduino 커넥터에 연결됩니다.

보드에 디지털 출력이 있으면 디지털 핀으로 보냅니다. 아날로그라면 아날로그. 첫 번째 경우에는 조명 수준을 초과하는 트리거 신호를 수신합니다(트리거 임계값은 튜닝 저항을 사용하여 조정할 수 있음). 아날로그 핀에서 실제 조명 수준에 비례하는 전압 값을 얻을 수 있습니다.

포토레지스터에 있는 광 센서의 예시 스케치

우리는 포토 레지스터 회로를 arduino에 연결하여 모든 것이 올바르게 수행되었는지 확인했습니다. 이제 컨트롤러를 프로그래밍하는 일만 남았습니다.

광 센서에 대한 스케치를 작성하는 것은 매우 간단합니다. 센서가 연결된 아날로그 핀에서 현재 전압 값만 취하면 됩니다. 이것은 우리 모두에게 알려진 analogRead() 함수를 사용하여 수행됩니다. 그런 다음 조명 수준에 따라 몇 가지 작업을 수행할 수 있습니다.

다음과 같이 연결된 LED를 켜거나 끄는 광센서에 대한 스케치를 작성해 봅시다.

작업 알고리즘은 다음과 같습니다.

  • 아날로그 핀의 신호 레벨을 결정합니다.
  • 레벨을 임계값과 비교합니다. 최대값은 어둠에 해당하고 최소값은 최대 조명에 해당합니다. 임계값을 300으로 선택하겠습니다.
  • 레벨이 임계 값보다 낮 으면 어둡습니다. LED를 켜야합니다.
  • 그렇지 않으면 LED를 끕니다.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 무효 설정() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) 무효 루프() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); if ( 발< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

포토레지스터를 (손이나 불투명한 물체로) 덮음으로써 LED의 켜짐과 꺼짐을 관찰할 수 있습니다. 코드에서 임계값 매개변수를 변경하여 다음과 같은 경우 전구를 강제로 켜거나 끌 수 있습니다. 다른 수준조명.

장착 시 밝은 LED에서 나오는 빛이 광센서에 덜 떨어지도록 포토레지스터와 LED를 가능한 한 멀리 배치하십시오.

주변광 센서 및 백라이트 밝기의 부드러운 변경

조도에 따라 LED의 밝기가 달라지도록 프로젝트를 수정할 수 있습니다. 알고리즘에 다음 변경 사항을 추가합니다.

  • PWM을 통해 전구의 밝기를 변경하고 analogWrite()를 사용하여 LED가 있는 핀에 0에서 255까지의 값을 보냅니다.
  • 조도 센서의 조도 레벨의 디지털 값(0~1023)을 LED 밝기의 PWM 범위(0~255)로 변환하려면 map() 함수를 사용합니다.

스케치 예:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 무효 설정() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) 무효 루프() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); int ledPower = map(val, 0, 1023, 0, 255); // 수신된 값을 PWM 신호 레벨로 변환 조명 값이 작을수록 PWM을 통해 LED에 공급해야 하는 전력이 적습니다.analogWrite(PIN_LED, ledPower ); // 밝기 변경)

아날로그 포트의 신호가 조명 정도에 비례하는 다른 연결 방법의 경우 최대값에서 값을 빼서 값을 추가로 "반전"해야 합니다.

정수 값 = 1023 - analogRead(PIN_PHOTO_RESISTTOR);

포토 레지스터 및 릴레이의 광 센서 구성표

릴레이 작업을 위한 스케치의 예는 arduino에서 릴레이 프로그래밍에 대한 기사에 나와 있습니다. 이 경우 복잡한 제스처를 만들 필요가 없습니다. "어두움"을 결정한 후 릴레이를 켜고 핀에 적절한 값을 적용하기만 하면 됩니다.

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 무효 설정() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); ) 무효 루프() ( int val = analogRead(PIN_PHOTO_SENSOR); if (val< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

결론

포토레지스터 기반의 광 센서를 사용하는 프로젝트는 매우 간단하고 효과적입니다. 장비 비용은 높지 않지만 많은 흥미로운 프로젝트를 구현할 수 있습니다. 포토 레지스터는 전압 분배기 회로에 따라 추가 저항으로 연결됩니다. 센서는 다양한 수준의 조도를 측정하기 위해 아날로그 포트에 연결되거나 어둠의 사실만 중요한 경우 디지털 포트에 연결됩니다. 스케치에서 우리는 단순히 아날로그(또는 디지털) 포트에서 데이터를 읽고 변경 사항에 대응하는 방법을 결정합니다. 이제 그러한 간단한 "눈"이 프로젝트에 나타나기를 바랍니다.

다음 프로젝트에서는 포토레지스터를 사용할 것입니다. 그리고 우리는 침실에 야간 조명을 구현하는 것을 고려할 것입니다. 이 조명은 어두울 때 자동으로 켜지고 밝아지면 꺼집니다.

포토레지스터의 저항은 빛에 닿는 빛에 따라 달라집니다. 포토레지스터와 함께 사용 기존 저항기 4.7kOhm, 우리는 광 저항을 통과하는 전압이 조명 수준에 따라 변하는 전압 분배기를 얻습니다.

분배기의 전압을 Arduino ADC 입력에 적용합니다. 거기에서 수신된 값을 특정 임계값과 비교하고 램프를 켜거나 끕니다.

분배기의 회로도는 아래와 같습니다. 조도가 증가하면 포토레지스터의 저항이 떨어지므로 분배기 출력(및 ADC 입력)의 전압이 증가합니다. 빛이 내려갈 때는 그 반대입니다.

아래 사진은 보여줍니다 조립된 회로브레드보드에. 0V 및 5V 전압은 Arduino에서 가져옵니다. 핀 A0은 ADC 입력으로 사용됩니다.

아두이노 스케치는 아래와 같습니다. 이 튜토리얼에서는 Arduino 보드에 내장된 LED를 간단히 켜고 끕니다. 더 밝은 LED는 핀 13에 연결할 수 있습니다(~220옴 저항을 통해). 백열등과 같은 더 강력한 부하를 연결하는 경우 릴레이 또는 사이리스터를 통해 연결해야 합니다.

프로그램 코드에는 주석 처리된 섹션이 있으며 디버깅에 사용됩니다. ADC 값(0~1024)을 제어할 수 있습니다. 또한 코드의 500 값(임계값 켜기 및 끄기)을 조명을 변경하여 경험적으로 선택한 값으로 변경해야 합니다.

/* ** 야간 조명 ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // ADC에 대한 입력 발 설정 unsigned int sensorValue = 0; // // 디지털 가치포토 레지스터 void setup() ( pinMode(13, OUTPUT); Serial.begin(9600); // 직렬 데이터 출력 시작 (테스트용) ) void loop() ( sensorValue = analogRead(sensorPin); // 포토 레지스터에서 값 읽기 if (센서값<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }