I2C 버스 및 PCF8583 실시간 시계 작업을 위한 AVR 라이브러리입니다. 서보 모터 및 스테퍼 모터 라이브러리

나는 I 2 C 인터페이스가 있는 마이크로회로를 기반으로 시계를 만들어야 했습니다. 소위 RTC 칩. "실시간 시계" PCF8583.

칩 내부에는 시계, 알람 시계, 타이머, 달력(곡선) 및 원하는 정보를 기록할 수 있는 240바이트 RAM이 있습니다. RAM은 플래시 메모리와 달리 매우 유용한 기능입니다. RAM은 다시 쓰기 주기 횟수에 제한이 없으며 원하는 만큼 자주 일부 데이터와 설정을 저장할 수 있습니다.

하지만 한 가지 문제가 있었습니다. 저는 코드를 작성하고 싶지 않았기 때문에 인터넷에서 기성 코드를 찾기로 결정했습니다. 나중에 밝혀 졌 듯이 그것을 찾는 것은 "스스로"였습니다. I 2 C로 작업하는 예제를 다운로드하여 수정하고 마이크로 컨트롤러를 플래시했습니다. 작동하지 않았습니다. 나는 코드를 뒤져보고 작동하지 않는 이유를 찾기 시작했습니다... 그리고 저는 겁에 질렸습니다!! 어떤 경우에는 특정 비트가 아닌 전체 포트에 동시에 녹음이 수행되었습니다. 따라서 포트에 디스플레이와 같은 다른 것을 연결하면 작동하지 않을 가능성이 높습니다. 또한 버스의 데이터 읽기가 잘못 구현되었습니다(수신 종료 조건을 생성하지 않거나 단순히 NACK 없이). 그러나 그것은 문제의 절반입니다. 주요 문제는 다릅니다. 종종 코드 작성자는 포트에 논리 "1"을 설정하며, 우리가 알고 있듯이 I 2 C 버스는 SDA 및 SCL 핀을 공통 와이어로 "당겨" 제어됩니다. 그리고 버스의 논리 "1"은 4.7킬로옴 저항을 사용하여 전원 공급 장치를 플러스로 당겨서 형성됩니다. 따라서 마이크로 컨트롤러의 출력이 논리 "1"로 설정되고 슬레이브 장치가 이 출력을 공통 와이어로 "풀"하면 결과는 "뱅뱅"이 됩니다. 단락. 나는 이것이 정말 마음에 들지 않았고 내 자신의 휠을 재창조하여 내 자신의 라이브러리 또는 오히려 2개의 라이브러리를 작성하기로 결정했습니다. 하나는 I 2 C 버스로 작업하기 위한 것이고 다른 하나는 PCF8583 실시간으로 직접 작업하기 위한 것입니다. 시계. 네, 그런데 코드는 .

I 2 C 라이브러리를 프로젝트에 연결하기 위해서는 그림과 같이 include를 통해 포함시켜야 하며, 라이브러리도 프로젝트 폴더에 복사해야 합니다.

그런 다음 "i2c.h" 파일을 열고 I 2 C 버스로 작동할 마이크로컨트롤러의 핀을 지정해야 합니다. 기본적으로 버스는 PC0(SCL) 및 PC1(SDA) 핀에 구성되어 있습니다. ). 설정은 여기에서 완료됩니다.

이제 I2C 라이브러리를 연결하고 다리를 구성했으며 라이브러리를 사용할 준비가 되었습니다. 사용 예:

I2c_init(); // I2C 버스 초기화 i2c_start_cond(); //버스 시작 i2c_send_byte(0xA0); // 버스에 걸려 있는 장치의 주소 i2c_send_byte (0x10); // 장치에 기록되는 데이터 바이트 i2c_send_byte (0x10); // 장치에 쓰는 또 다른 데이터 바이트 i2c_stop_cond(); // 타이어 정지

정지 조건 이후에 I 2 C 버스로 모든 것이 괜찮은지 확인할 수 있는데, 이를 위해서는 "i2c_frame_error" 변수를 읽어야 합니다. 모든 것이 정상이면 0이 됩니다. 버스 핀 중 하나가 전원 공급 장치에 "풀업"되지 않고 논리 "1"이 버스에 설치되지 않은 경우 라이브러리는 오류를 생성하고 "i2c_frame_error" 변수에 1번을 입력하세요. 정지 조건 이후에 "i2c_frame_error" 변수가 필요하다는 것을 읽어보세요. 아래 그림에서는 오류 제어가 어떻게 작동하는지 보여줍니다.

이제 PCF8583 실시간 시계 라이브러리를 연결해 보겠습니다. 이렇게 하려면 동일한 단계를 수행해야 합니다. 사진과 같이 "PCF8583.h" 파일을 프로젝트 폴더에 복사하고 포함에 추가해 보겠습니다.

준비가 된. PCF8583 실시간 시계 라이브러리가 연결되었습니다. 설정이 필요하지 않으므로 칩에서 즉시 시간과 날짜 읽기를 시작할 수 있습니다. PCF8583 라이브러리는 I2C 라이브러리를 사용하여 작동하므로 PCF8583으로 작업하려면 두 라이브러리를 모두 연결해야 합니다!

라이브러리 사용 예(시간 및 날짜 쓰기 및 읽기):

// I2C 버스 초기화 i2c_init(); // PCF8583 칩에 쓸 시간과 날짜를 준비합니다. PCF_hour=23; // 23시간 PCF_min=59; // 59분 PCF_day=31; // 31일 PCF_month=12; // 12번째 달 - 12월 PCF_year=0; // 연도(0 - 윤년 아님) PCF_weekday=6; // 6번째 요일(일요일) // PCF8583 칩에 시간과 날짜를 씁니다. PCF_write_hh_mm_ss(); // PCF8583 칩에서 시간과 날짜를 읽습니다. PCF_read_hh_mm_ss(); RAM 작업(쓰기 및 읽기)의 예: // PCF8583 칩에 쓰기 위해 5바이트를 준비합니다. PCF_data_ram_1=255; // 바이트 1 PCF_data_ram_2=255; // 바이트 2 PCF_data_ram_3=255; // 바이트 3 PCF_data_ram_4=255; // 바이트 4 PCF_data_ram_5=255; // byte 5 // PCF8583 칩에 5byte를 씁니다. PCF_write_ram(); // PCF8583 칩에서 5바이트를 읽습니다. PCF_read_ram();

마이크로 회로에서 읽는 것이 훨씬 더 쉽습니다. 함수를 호출하기만 하면 됩니다.PCF_ 읽다_ _ mm_ 봄 여름 시즌() 그 후에는 시간과 날짜가 변수에 표시되며, 여기서는 변수를 가져옵니다. RAM을 읽으려면 각각 다음 함수를 사용합니다.PCF_ 읽다_ () 그 후 변수로 데이터를 수집합니다.PCF_ 데이터_ _ N

다음은 변수 목록입니다. 저장 위치와 내용은 다음과 같습니다.

// 시간 및 날짜 PCF_hour=0; // 시간, 시(0~23, 쓰기 및 읽기 시 오버플로 방지) PCF_min=0; // 시간, 분(0~59, 쓰기 및 읽기 시 오버플로 방지) PCF_sec=0; // 시간, 초(읽기 전용, 쓰기 시 00으로 재설정) PCF_day=0; // 일(1부터 31까지, 쓰기 및 읽기 시 오버플로 방지) PCF_weekday=0 // 요일(0-월요일; 6-일요일, 쓰기 및 읽기 시 오버플로 방지) PCF_month=0; // 월(1부터 12까지, 쓰기 및 읽기 시 오버플로 방지) PCF_year=0; // 연도(0-leap; 1,2,3-non-leap, 쓰기 및 읽기 시 오버플로 방지) // RAM PCF_data_ram_1; // 데이터(PCF8583 RAM), 바이트 1 PCF_data_ram_2; // 데이터(PCF8583 RAM), 바이트 2 PCF_data_ram_3; // 데이터(PCF8583 RAM), 바이트 3 PCF_data_ram_4; // 데이터(PCF8583 RAM), 바이트 4 PCF_data_ram_5; // 데이터(PCF8583 RAM), 바이트 5

이제 오버플로 방지에 대해 말씀 드리겠습니다. 마이크로 회로를 연결하는 것을 잊어버렸다고 가정해 보겠습니다. 마이크로 회로에서 데이터를 읽으면... 바이트 11111111 또는 숫자 255가 읽혀집니다. 문제는 I 2 C 버스가 2개의 풀업 저항을 기반으로 하므로 논리적 "1"을 제공한다는 것입니다. 마이크로 회로가 연결되지 않은 경우. 이러한 경우를 방지하기 위해 PCF8583 라이브러리에 시계가 62시간 81분을 표시하지 않도록 하는 오버플로 방지 기능을 만들었습니다... 오버플로의 존재 여부는 "PCF_overflow" 변수를 읽어 모니터링할 수 있습니다. 0이면 오버플로 오류가 없는 것입니다. 1개 이상이면 오버플로 오류가 발생합니다. 날짜 및 시간 읽기 기능 이후에 “PCF_overflow” 변수를 읽어야 합니다.PCF_ 읽다_ _ mm_ 봄 여름 시즌()

명확성을 위해 ATmega32용 AVR Studio 6 프로젝트가 첨부되어 있습니다. 모든 AVR에 대해 다시 컴파일할 수 있습니다. 이 프로젝트에서는 시각적 제어를 위해 디스플레이도 연결했습니다. 전원이 공급되면 마이크로컨트롤러는 12월 31일 일요일을 23시 59분으로 설정합니다. 그리고 1분 뒤에는 1월 1일 월요일 00시 00분이 됩니다.

이제 내가 왜 이 초소형 회로의 "비뚤어진" 달력에 대해 이야기했는지 설명하겠습니다. 문제는 마이크로 회로가 현재 연도를 저장하는 방법을 모르고 윤년 플래그만 저장한다는 것입니다. 간단히 말해서:
0 – 윤년
1 – 윤년이 아님
2 – 윤년이 아님
3 – 윤년이 아님

그리고 0-1-2-3-0-1-2-3-0 주기에서 등등...

일반적으로 일반 달력을 만들려면 소프트웨어 계산 및 연도 저장을 구현해야 합니다. PCF8583이지만 편리하지 않습니다. 그리고 가장 중요한 것은 회로의 전원이 차단되면 아쉽게도 아무도 메모리를 덮어쓰지 않을 것이라는 점입니다...

기사 마지막 부분에 짧은 동영상 보고서도 첨부합니다. 나는 프로그래밍의 초보자라고 말할 수 있습니다. 비록 3년 동안 (조금씩) 프로그래밍을 해왔지만 코드를 엄격하게 판단하지 마십시오. 추가 사항이나 의견이 있으면 작성해 주시면 수정하겠습니다. 모두들 즐거운 작품 만드세요!

방사성 원소 목록

지정 유형 명칭 수량 메모가게내 메모장
MK AVR 8비트

ATmega32

1 메모장으로
실시간 시계(RTC)

PCF8583

1 메모장으로
LCD 디스플레이WH16021

이 기사에서는 가장 인기 있는 모든 Arduino 라이브러리에 대한 링크를 한곳에 수집하려고 시도했으며 가장 인기 있는 라이브러리도 선택하여 준비했습니다. 조만간 모든 Arduino 사용자는 하나 또는 다른 라이브러리를 사용해야 하는 상황에 직면하게 됩니다. 결국, 기성 코드를 사용하면 프로그래밍 시간이 크게 단축됩니다. 인기 있는 라이브러리에 대한 정보를 한 곳에 모아 다운로드 링크와 간단한 사용 예를 제공하여 귀하의 프로젝트에 도움이 되기를 바랍니다.

Arduino 라이브러리는 일종의 프로그램 코드, 스케치에 저장되지 않고 외부 파일, 프로젝트에 연결할 수 있습니다. 라이브러리에는 다음이 포함되어 있습니다. 다양한 방법센서, 표시기, 모듈 및 기타 구성 요소 작업을 단순화하는 데 필요한 데이터 구조. 기성 프로그램을 사용하면 많은 작은 일에 시간을 낭비하지 않고 기본 논리에 집중할 수 있기 때문에 프로젝트 작업이 크게 단순화됩니다.

오늘 생성됨 엄청난 양인터넷에서 쉽게 찾아 다운로드할 수 있는 라이브러리입니다. 대다수의 라이브러리가 배포됩니다. 무료 라이센스이므로 "해적판" 버전을 검색할 필요가 없습니다. 가장 중요한 것은 배우는 것입니다.

Arduino 표준 라이브러리

인상적인 표준 모듈 목록과 공식 파트너 라이브러리에 대한 링크를 찾을 수 있는 공식 웹사이트에서 라이브러리에 대해 알아가는 것이 좋습니다.

내장 라이브러리 목록(배포판과 함께 제공됨) 아두이노 IDE):

  • EEPROM
  • 이더넷/이더넷 2
  • 페르마타
  • 액정
  • 서보 기구
  • 소프트웨어직렬
  • 스테퍼

하나의 아카이브에 다양한 라이브러리 제공

많은 사이트를 자세히 분석할 시간이 없고 작업에 필요한 모든 것을 다운로드하고 싶은 경우 외부 장치 Arduino는 하나의 아카이브에 가장 인기 있는 라이브러리 40개 목록을 준비했습니다. 해당 내용(라이브러리 폴더)의 압축을 Arduino 폴더에 풀기만 하면 됩니다.

화면, 표시기 및 디스플레이용 라이브러리

I2C 라이브러리

I2C 프로토콜을 사용하여 주변 장치를 작동하도록 설계된 라이브러리입니다.

사용 예:

#ifndef I2C_MASTER_H

#I2C_MASTER_H 정의

void I2C_init (void) – 객체를 생성하고 버스에 대한 올바른 주파수를 설정합니다.

uint8_t I2C_start () – 새 장치와 연결을 설정합니다.

uint8_t I2C_write() – 현재 장치에 데이터를 씁니다.

uint8_t I2C_read_ack() – 장치에서 바이트를 읽고 다음 바이트를 요청합니다.

액정 라이브러리

Arduino IDE에 설치된 표준 라이브러리입니다. LCD 액정 디스플레이를 제어하도록 설계되었습니다.

사용 예:

#포함하다 . 또한, 필기 시 실수하지 않도록 Sketch – Import Library – LiquidCrystal 메뉴를 통해 연결할 수 있습니다.

클래스 생성자는 LiquidCristal(…)입니다. 인수는 rs, rw, en, do…d7입니다. 처음 3개는 RS, RW 및 Enable 신호 핀에 해당합니다. 핀 d는 디스플레이가 연결된 데이터 버스의 수에 해당합니다.

void start(cols,rows)는 디스플레이 인터페이스를 초기화하는 메서드입니다. 인수는 줄당 문자 수(cols)와 줄 수(rows)입니다. 이 방법을 먼저 지정해야 합니다.

void createChar(num, data) – 사용자 정의 문자를 생성하는 데 필요한 메서드입니다.

UTFT 라이브러리

Arduino가 TFT 화면과 함께 작동하려면 표준 라이브러리가 필요합니다. 다른 유형. 지원되는 모든 디스플레이는 다음에 표시됩니다. 첨부서류도서관과 함께.

사용 예:

#포함하다

UTFT(); – UTFT 인스턴스를 생성합니다.

textRus(char*st, int x, int y); – 색인에서 문자열을 표시할 수 있는 방법입니다. 예를 들어, char *dht = “온도, C”;

textRus(string st, int x, int y); – 매개변수를 나타내는 문자열을 출력합니다. 예를 들어, g.textRus(“온도, C”, 0, 20);

LedControl 라이브러리

7세그먼트 디스플레이를 제어하고 LED 배열을 하나의 매트릭스로 결합할 수 있습니다.

사용 예:

#포함하다

LedControl lc1= LedControl();

– 라이브러리를 초기화하는 데 필요합니다. 4개의 인수, 즉 디스플레이가 연결된 핀 수(처음 3개 인수)와 연결된 칩 수로 구성되어야 합니다.

writeArduinoOn7Segment() - 디스플레이에 0부터 15까지의 모든 숫자를 표시합니다. 문자 a와 d에 대해 setChar()를 사용하고 누락된 문자에 대한 레이아웃을 생성하기 위해 setRow()를 사용합니다.

LedControl.shutdown() – 이미지를 끕니다.

setIntensity() – 밝기 제어.

Arduino 날짜 및 시간 작업을 위한 라이브러리

라이브러리 RTClib

실시간 시계 작업을 위한 라이브러리로 Arduino와의 상호 작용을 단순화합니다.

사용 예:

#포함하다

RTC_DS1307 RTC; – 센서 선택(이 경우 DS1307).

rtc.adjust(DateTime(날짜, 시간)); – 시간 및 달력 설정.

dayOfTheWeek() – 요일을 출력합니다. 0에서 6까지의 인수, 0 – 일요일.

Timelib 라이브러리

Arduino가 특정 순간의 날짜 및 시간에 대한 정보를 얻을 수 있도록 합니다.

사용 예:

#포함하다

시간(); – 인스턴스를 생성합니다.

setTime(t); – 시간을 설정합니다. t 인수는 시, 분, 초, 일, 월, 연도입니다.

시간상태(); – 시간이 설정되었는지 여부를 표시합니다.

adjustTime(조정); - 시간 설정.

도서관 Ds1307

Wire 라이브러리를 사용하여 DS1307 클록과 Arduino를 편리하게 상호 작용하기 위한 라이브러리입니다.

사용 예:

#포함하다

클래스 DS1307RTC – DS1307 객체 생성.

SetTime() - 시간을 설정합니다.

get() – RTC를 읽고 결과 날짜를 POSIX 형식으로 반환합니다.

Set(time_t t) - RTC에 날짜 쓰기

도서관 DS 3231

ds3231 모듈에서 날짜와 시간을 제어하도록 설계되었습니다.

#include “ds3231.h”

DS3231 클록(SDA, SCL); – 클록 라인과 데이터 라인에 연결하는 DS3231 개체를 생성합니다.

getTime(); – 시계에서 날짜와 시간을 읽습니다.

setDate(날짜, 월, 연도); – 날짜를 설정합니다.

Arduino 시스템 라이브러리

EEPROM 라이브러리

표준 라이브러리. 비휘발성 메모리(데이터 기록, 읽기)와 함께 작동하도록 설계되었습니다.

사용 예:

#포함하다

EEPROM.read(); – 객체를 생성하고 비휘발성 메모리의 주소에서 바이트를 읽습니다.

EEPROM.write(address, value) – 비휘발성 메모리에 바이트를 씁니다.

EEPROM.put() – 부동 소수점 숫자의 문자열을 씁니다.

EEPROM.get() – 문자열과 부동 소수점 숫자를 읽습니다.

소프트웨어직렬 라이브러리

모든 디지털 핀에서 직렬 인터페이스를 구현할 수 있는 라이브러리입니다. 또한 최대 115200보드 속도로 작동하는 여러 개의 직렬 포트를 생성할 수 있습니다.

#포함하다

SoftwareSerial mySerial(RX, TX) – 객체 생성, 인수 – RX 및 TX가 연결되는 핀.

Serial.begin(); – Arduino와 컴퓨터 간의 통신을 위한 포트 속도를 설정합니다.

mySerial.overflow() – 입력 버퍼의 오버플로를 확인합니다.

수학 도서관

부동 소수점 숫자 작업을 위한 다수의 수학 함수가 포함되어 있습니다.

사용 예:

#포함하다

수학(); – Math의 인스턴스를 생성합니다.

Serial.print("cos num = "); – 숫자의 코사인을 반환합니다.

Serial.println(fmod(double__x, double__y)); – 숫자를 모듈로 반환합니다.

스케줄러 라이브러리

Arduino Due와 함께 작동하도록 설계되어 멀티태스킹 모드에서 작업할 수 있습니다. 현재는 실험적인 라이브러리입니다.

사용 예:

#포함하다

스케줄러; – 인스턴스를 생성합니다.

Scheduler.startLoop() - loop()와 함께 실행될 함수를 추가할 수 있습니다.

Yield() – 제어권을 다른 작업으로 이전할 수 있습니다.

서보 모터 및 스테퍼 모터 라이브러리

서보 라이브러리

표준 라이브러리. 서보 모터 제어에 필수적이며 조작기가 있는 로봇 프로젝트에 자주 사용됩니다.

사용 예:

#포함하다

서보 마이서보; – 서보모터용 객체 생성..

myservo.attach(); – 서보모터가 연결된 출력의 번호.

myservo.write(180, 30, true); – 180도 이동, 속도 30, 이동이 끝날 때까지 기다립니다.

스테퍼 라이브러리

유니폴라 및 바이폴라 스테퍼 ​​모터를 제어하는 ​​데 필요합니다.

#포함하다

const int stepsPerRevolution = ; – 엔진이 완전히 회전하는 데 걸리는 단계 수.

Stepper myStepper = Stepper(steps, pin1, pin2) – 모터가 연결된 지정된 수의 단계와 핀을 사용하여 클래스의 인스턴스를 생성합니다.

Arduino 센서 라이브러리

DHT 라이브러리

#포함하다< DHT.h>

DHTdht(DHTPIN, DHT11); – 센서를 초기화합니다(이 경우 DHT11).

dht.begin(); – 센서를 시작합니다.

float t = dht.readTemperature(); – 현재 온도 값을 섭씨 단위로 읽습니다.

달라스 온도 라이브러리

달라스 센서와 함께 작동하도록 설계되었습니다. OneWire 라이브러리와 함께 작동합니다.

#포함하다

달라스온도 달라스센서(&oneWire); – 센서 작업을 위한 oneWire 개체 전송.

기록부에 넣어두세요.

printTemperature(센서주소); – 측정된 온도 값을 얻기 위해 요청합니다.

초음파 라이브러리

Arduino가 초음파 거리 측정 센서 HC-SR04와 함께 작동할 수 있도록 합니다.

#포함하다

초음파 초음파(tig, echo) – 객체 선언, 인수 – Trig 접촉 및 Echo 접촉.

거리 = 초음파.거리읽기(); – 물체까지의 거리 결정. 인수 - 센티미터(CM) 또는 인치(INC).

Timing() – Echo 출력에서 ​​펄스 지속 시간을 읽고 이를 필요한 숫자 체계로 변환합니다.

ADXL345 라이브러리

ADXL345 가속도계와 함께 작동하도록 설계되었습니다.

사용 예:

#포함하다

ADXL345_ADDRESS – 주소를 나타내는 개체를 생성합니다.

ADXL345_REG_DEVID – 장치 식별입니다.

ADXL345_REG_OFSX – X축을 따른 오프셋입니다.

ADXL345_REG_BW_RATE – 데이터 전송 속도 제어.

도서관 BME280

온도, 습도 및 압력 센서 BME280과 함께 작동하도록 설계되었습니다.

사용 예:

#포함하다

BME280_ADDRESS – 주소를 나타내는 BME280 객체를 생성합니다.

시작(uint8_t addr = BME280_ADDRESS); – 센서 작동 시작.

getTemperature – 측정된 온도를 가져옵니다.

getPressure – 측정된 압력을 가져옵니다.

BMP280 라이브러리

BMP280 대기압 센서 작동에 필요합니다.

사용 예:

#포함하다

BMP280_CHIPID - 주소를 나타내는 인스턴스를 생성합니다.

getTemperature(float *temp); – 측정된 온도를 얻습니다.

getPressure(float *압력); – 측정된 압력 값을 얻습니다.

도서관 BMP085

BMP085 압력 센서와 함께 사용하는 데 필요합니다.

사용 예:

#포함하다

Adafruit_BMP085 bmp; – BMP085의 인스턴스를 생성합니다.

dps.init(MODE_ULTRA_HIGHRES, 25000, true); – 압력 측정, 인수 25000 – 해발 고도(이 경우 해발 250m).

dps.getPressure(&압력); – 압력 결정.

지문 라이브러리

지문 스캐너를 사용하는 데 필요합니다.

사용:

#포함하다

Adafruit_Fingerprint 손가락 = Adafruit_Fingerprint(&mySerial); – Finger 객체 선언. 매개변수 – 모듈이 연결된 UART 작업을 위한 개체에 대한 링크입니다.

손가락.시작(); – 지문 모듈 초기화.

Func_sensor_communication(); – 지문 모듈을 호출합니다.

커뮤니케이션 라이브러리

와이어 라이브러리

2선 I2C 인터페이스로 작업하는 데 필요합니다.

사용 예:

#포함하다

Wire.begin() – 라이브러리 초기화, I2C 버스 연결.

Wire.requestFrom() – 슬레이브 장치의 바이트에 대한 마스터 요청입니다.

Wire.beginTransmission() – 슬레이브 장치로의 전송을 시작합니다.

원격 도서관

Arduino가 IR 수신기와 작동하려면 필요합니다.

사용 예:

#포함하다

IRrecv irrecv(RECV_PIN); – IR 수신기가 연결된 핀.

SetPinAndButton(int ir1,int ir2,int pin) – 지정된 ir1, ir2 값에서 트리거되도록 특정 출력을 구성할 수 있습니다.

GSM 라이브러리

GSM 카드를 통해 GSM/GRPS 네트워크에 연결하는 데 필요합니다. 도움을 받으면 GSM 전화로 수행되는 작업을 구현하고, 음성 통화를 사용하고, GRPS를 통해 인터넷에 연결할 수 있습니다.

사용 예:

#포함하다

GSM GSMAccess – 클래스의 인스턴스를 초기화합니다.

gprs.powerOn() – 전원을 켭니다.

GPRS – 인터넷 연결 설정.

GSM – 무선 모뎀 제어.

RFID 라이브러리

Arduino와 RFID 모듈을 연결하는 데 필요합니다.

사용 예:

#포함하다

RFID RFID(SS_PIN, RST_PIN); – RFID 인스턴스 생성, 인수 – 모듈이 연결된 핀.

rfid.init(); – RFID 모듈 초기화.

MFRC 522 라이브러리

Arduino와 MFRC522 모듈을 연결하는 데 필요합니다.

사용 예:

#포함하다

MFRC522 mfrc522(SS_PIN, RST_PIN); – MFRC522 인스턴스 생성, 모듈이 연결된 출력을 지정하는 인수.

mfrc522.PCD_Init(); – MFRC522 초기화.

Ethershield 라이브러리

새 버전 https://github.com/jcw/ethercard

Arduino를 연결하는 데 필요합니다. 지역 네트워크아니면 인터넷. 라이브러리가 더 이상 지원되지 않습니다. 새 버전에테르카드. 도 있습니다 표준 라이브러리이더넷.

사용 예:

#include "EtherShield.h"

#포함하다

EtherShield es = EtherShield(); – 웹페이지 준비

ether.begin(이더넷 크기::buffer, mymac,); – 시작하기, 논쟁 – 맥 주소 CS 출력이 연결된 포트 번호입니다.

라이브러리 Nrf24l01

RF24 무선 모듈을 사용하는 데 필요합니다.

사용 예:

#include “RF24.h”

RF24 – 생성자가 새 드라이버 인스턴스를 생성합니다. 사용하기 전에 인스턴스를 생성하고 칩이 연결된 핀을 지정해야 합니다(_cepin: 모듈 핀 활성화, cspin: 모듈 핀 선택).

시작 – 칩 작업을 시작합니다.

setChannel – RF 통신용 채널입니다.

setPayloadSize – 고정된 전송 크기를 설정합니다.

getPayloadSize – 고정된 크기를 가져옵니다.

TinyGPS 라이브러리

GPGGA 및 GPRMC 메시지를 읽는 데 필요합니다. 위치, 날짜, 시간, 고도 및 기타 매개변수를 읽는 데 도움이 됩니다.

사용 예:

#포함하다

작은GPS GPS; – TinyGPS 인스턴스를 생성합니다.

encode () - 한 번에 한 문자씩 객체에 순차적 데이터를 제공합니다.

gps.stats() – 통계 방법. 올바른 데이터가 수신되었는지 여부를 나타냅니다.

Arduino IDE의 라이브러리

다양한 라이브러리 중에서 3가지 주요 그룹을 구분할 수 있습니다.

  • 내장 라이브러리는 Arduino IDE에 처음 설치되는 라이브러리입니다. 별도의 다운로드나 설치가 필요 없으며, 개발환경 실행 후 바로 프로그램에서 사용 가능합니다.
  • 추가 라이브러리는 직접 다운로드하여 설치해야 합니다. 일반적으로 이러한 유형의 라이브러리는 Arduino 작업을 용이하게 하기 위해 센서, 센서 및 기타 구성 요소 제조업체에서 개발합니다.
  • 종속 라이브러리 - 추가 라이브러리의 보조자로 설치되며 별도로 작동하지 않습니다.

제일 간단한 방법으로 Arduino에서 라이브러리를 사용하여 작업하는 것은 Arduino IDE 개발 환경에 내장된 기능을 사용하는 것입니다. 이에 대해서는 별도의 기사에서 이야기하겠습니다.

이 기사에서는 Arduino를 사용하여 I2C 인터페이스 모듈을 사용하여 LCD 디스플레이(2x16 / 20x4)를 제어하는 ​​방법을 설명합니다. 이 모듈을 사용하면 사용되는 컨트롤러 핀 수를 줄일 수 있으며, 8비트 또는 4비트 연결 대신 2핀(SDA 및 SCL)만 필요합니다.

기술 사양

디스플레이 지원: LCD 16×02 / 20×04
선택 사항: 대비 조정
전원 전압. 5V
인터페이스: I2C
크기: 54mm x 19mm x 15mm

I2C 인터페이스 모듈에 대한 일반 정보

Arduino 컨트롤러의 핀 수는 제한되어 있고 자주 사용되기 때문에 다양한 센서모듈이 부족하면 저장해야 합니다. 이러한 경우를 위해 이 모듈이 개발되었으며, 이 모듈을 사용하여 두 접점(SDA 및 SCL)을 통한 전송을 구현할 수 있습니다.

이제 모듈 자체에 대해 조금 설명하겠습니다. 이 모듈은 PCF8574T 칩에 내장되어 있습니다. SDA 및 SCL 라인을 풀업하려면 저항 R8(4.7kΩ) 및 R9(4.7kΩ)이 필요합니다. 이상적으로는 I2C 버스를 통해 두 개 이상의 장치를 연결할 때 하나의 장치에서만 풀업을 사용해야 합니다. 이유는 나중에 쓰겠습니다. 보드에는 3개의 점퍼가 있습니다(다이어그램에는 A0, A1, A2 라인이 저항 R4, R5, R6을 통해 전원 공급 장치에 연결되어 있음이 표시되어 있음). 장치의 주소 지정을 변경하는 데 필요하며 총 8가지 옵션이 있습니다. . 주소 지정을 변경하면 IC2 버스를 통해 PCF8574T 칩을 통해 최대 8개의 장치를 연결할 수 있습니다. 주소 옵션은 그림에 표시되어 있습니다(기본 장치 주소는 0x27입니다). 이 모듈에는 전위차계 R11도 장착되어 있어 LCD 디스플레이의 대비를 변경할 수 있습니다.

모듈에는 연결을 위한 세 가지 접점 그룹이 있습니다.

첫 번째 그룹:
SCL: 직렬 시계
SDA: 데이터 라인(Serial Dфta)
VCC: "+" 전원
GND: "-" 전원 공급 장치

두 번째 그룹:
VSS: "-" 전원
VDD: "+" 전원
VO: 명암 조절 핀
RS: 등록 선택
RW: 읽기/쓰기(접지에 연결된 경우 쓰기 모드)
E: 활성화(낙하 스트로브)
DB0-DB3: 인터페이스 하위 비트
DB4-DB7: 인터페이스 상위 비트
A: "+" 백라이트 전원 공급 장치
K: "-" 백라이트 전원 공급 장치

세 번째 그룹: (기본적으로 점퍼 설정)
VCC:
LCD에서 A:

아두이노에 연결하기

필수 부품:
아두이노 UNO R3 x 1개
LCD 디스플레이 1602A(2×16, 5V, 파란색) x 1개
LCD용 인터페이스 모듈 I2C, IIC, TWI x 1개
듀폰 와이어, 2.54mm, 20cm, F-M(암-수) x 1개
USB 케이블 2.0A-B×1개

연결:
먼저 I2C 모듈을 LCD 디스플레이에 납땜한 다음 디스플레이를 Arduino UNO에 연결해야 합니다. 이를 위해 DuPont 배선을 사용하고 아래 표에 따라 연결합니다.

명확성을 위해 다른 다이어그램을 제공하겠습니다.

이 실험을 위해서는 “LiquidCrystal_I2C” 라이브러리를 다운로드하여 설치해야 합니다. 그런 다음 이 예제 코드를 Arduino IDE 프로그램 창에 복사하여 붙여넣고 컨트롤러에 로드합니다.

/* Arduino IDE 1.6.11에서 테스트됨 테스트 날짜 2016년 9월 15일 */ #포함하다 #포함하다 LiquidCrystal_I2C LCD(0x27,16,2); // 디스플레이의 주소와 크기를 설정합니다. void setup() ( lcd.init(); // LCD 초기화 lcd.backlight(); // 백라이트 켜기 lcd.setCursor(0,0); // 디스플레이 설정 첫 번째 줄의 시작 부분에 커서를 놓습니다. lcd .print("Hello, world"); // 텍스트를 출력합니다. lcd.setCursor(0,1); // 커서를 두 번째 줄의 시작 부분으로 설정합니다. lcd.print("www. robotschip.ru"); // 텍스트 출력 ) void loop() ( )

프로그램 다운로드

모든 작업을 올바르게 수행했지만 디스플레이에 기호가 표시되지 않으면 전위차계로 대비를 높여보세요.


연결
LiquidCrystal_I2C 라이브러리 다운로드
PCF8574T 칩에 대한 설명서
LCD1602A에 대한 문서

Aliexpress에서 구매

공유하다