Оглавление
- Шаг 5: установка программного обеспечения
- Объяснение программы для приемного датчика
- Примеры использования датчика расстояния
- Interfacing of Multiple Ultrasonic Sensor With Arduino
- Характеристики HC SR04
- Исходный код программы
- Скачивание и установка необходимого программного обеспечения
- Исходный код программы (скетча)
- Датчик VL6180X
- Элементы платы
- Инструменты
- Технические характеристики Arduino Sensorshield
- Как работает лазерный дальномер
Шаг 5: установка программного обеспечения
Установите следующее программное обеспечение в этом порядке:
Arduino IDE
Скачайте и установите Arduino IDE (интегрированную среду разработки) с сайта https://www.arduino.cc/en/main/software, если она еще у вас не установлена.
Скетч Arduino
Скачайте и откройте в Arduino IDE файл «dual_sensor _echo_locator.ino«, загрузите его в свою Arduino Uno R3.
Закройте Arduino IDE, но USB кабель оставьте подключенным.
Скетч Processing
Скопируйте содержимое прикрепленного файла, “dual_sensor_echo_locator.pde” в Processing «Sketch».
Теперь нажмите вверху слева кнопку «Run»… На вашем экране должен появиться графический экран.
Объяснение программы для приемного датчика
В приемном датчике мы должны заклеить передающую часть непрозрачной лентой (как обсуждалось ранее). И затем мы должны просто использовать описанный ранее в статье метод чтобы приемный датчик синхронизировался с передающим датчиком.
Arduino
Trigger_US();
while (digitalRead(echoPin)==HIGH);
delayMicroseconds (10);
Trigger_US();
duration = pulseIn(echoPin, HIGH);
1 |
Trigger_US(); while(digitalRead(echoPin)==HIGH); delayMicroseconds(10); Trigger_US(); duration=pulseIn(echoPin,HIGH); |
Сначала мы запускаем в работу датчик с помощью функции Trigger_US() и затем в цикле while ждем до тех пор пока на контакте echo будет напряжение высокого уровня. Как только на контакте echo появится напряжение низкого уровня мы ждем заранее известную нам задержку – она должна быть в интервале от 10 до 30 микросекунд (можно экспериментально определить наилучшее значение для этой задержки или использовать прием описанный нижу в данной статье). После этой задержки мы снова запускаем в работу датчик с помощью функции Trigger_US() и затем используем функцию pulseIn() чтобы определить длительность импульса.
И затем по известной формуле мы можем рассчитать расстояние.
Arduino
distance= duration*0.034;
1 | distance=duration*0.034; |
Примеры использования датчика расстояния
Давайте рассмотрим пример простого проекта с платой Arduino Uno и датчиком расстояния HC SR04. В скетче мы будем получать значение расстояния до предметов и выводить их в монитор порта в среде Arduino IDE. Вы сможете легко изменить скетч и схему подключения, чтобы датчик сигнализировал о приближении или отдалении предмета.
Подключение датчика к ардуино
При написании скетча использовалась следующий вариант распиновки подключения датчика:
- VCC: +5V
- Trig – 12 пин
- Echo – 11 пин
- Земля (GND) – Земля (GND)
Пример скетча
Начнем работу с датчиком сразу с относительного сложного варианта – без использования внешних библиотек.
В данном скетче мы выполняем такую последовательность действий:
- Коротким импульсом (2-5 микросекунды) переводим датчик расстояния в режим эхолокации, при котором в окружающее пространство высылаются ультразвуковые волны с частотой 40 КГц.
- Ждем, пока датчик проанализирует отраженные сигналы и по задержке определит расстояние.
- Получаем значение расстояния. Для этого ждем, пока HC SR04 выдаст на входе ECHO импульс, пропорциональный расстоянию. Мы определяем длительность импульса с помощью функции pulseIn, которая вернет нам время, прошедшее до изменения уровня сигнала (в нашем случае, до появления обратного фронта импульса).
- Получив время, мы переводим его в расстояние в сантиметрах путем деления значения на константу (для датчика SR04 это 29.1 для сигнала «туда», столько же для сигнала «обратно», что в сумме даст 58.2).
Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса – LOW. Так как у некоторых датчиков время задержки варьируется в зависимости от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).
Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.
Скетч с использованием библиотеки NewPing
Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать – создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().
Пример подключения ультразвукового дальномера HC SR04 с одним пином
Подключение HC-SR04 к Arduino может быть выполнено посредством использования одного пина. Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.
Interfacing of Multiple Ultrasonic Sensor With Arduino
- Let me first summarize the working of ultrasonic sensor again. With ultrasonic sensor, what we need to do is to generate a trigger signal on its trigger pin for around 10 microsecond.
- As soon as the ultrasonic sensor gets this trigger signal, it sends out an ultrasonic signal.
- This ultrasonic signal then hits something and bounced back.
- Now, in order to check this bouncing signal, we have to read the Echo pin and check for how long it remains HIGH, and on the basis of this duration we calculate our distance with the object.
- This is the process for single ultrasonic sensor and when we are using multiple ultrasonic sensors, what we need to do is simply repeat the whole procedure for all the sensors one by one.
- First of all, we will generate the trigger pulse for first sensor and the read its echo pin and get the distance, then we generate the trigger pulse for second sensor and read its echo pin and so on for the third.
- So, here I am gonna use three ultrasonic sensor and the circuit diagram is shown below:
- I have tried my best while designing this image to make it simple but as there are too much wires so it has become a little complex.
- I am pointing out the pin configuration here so it will be easy for you to interface your sensors with arduino. The pin configuration is as follows:
- Vcc of all sensors will go into +5V of Arduino.
- GND of all sensors will go into GND of Arduino.
- Trig Pin of first sensor into Pin # 3 of Arduino.
- Echho Pin of first sensor into Pin # 2 of Arduino.
- Trig Pin of second sensor into Pin # 4 of Arduino.
- Echo pin of second sensor into Pin # 5 of Arduino.
- Trig Pin of third sensor into Pin # 7 of Arduino.
- Echo pin of third sensor into Pin # 8 of Arduino.
- After connecting the pins as discussed above, now copy the below code and upload it in your arduino board.
- After uploading the code in your arduino, open the Serial Terminal of Arduino software and you will start receiving the distances for all the three sensors.
#define trigPin1 3 #define echoPin1 2 #define trigPin2 4 #define echoPin2 5 #define trigPin3 7 #define echoPin3 8 long duration, distance, RightSensor,BackSensor,FrontSensor,LeftSensor; void setup() { Serial.begin (9600); pinMode(trigPin1, OUTPUT); pinMode(echoPin1, INPUT); pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT); pinMode(trigPin3, OUTPUT); pinMode(echoPin3, INPUT); } void loop() { SonarSensor(trigPin1, echoPin1); RightSensor = distance; SonarSensor(trigPin2, echoPin2); LeftSensor = distance; SonarSensor(trigPin3, echoPin3); FrontSensor = distance; Serial.print(LeftSensor); Serial.print(" - "); Serial.print(FrontSensor); Serial.print(" - "); Serial.println(RightSensor); } void SonarSensor(int trigPin,int echoPin) { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; }
- The code is quite similar to the one we used while interfacing single ultrasonic sensor with arduino, the only thing we changed here is the repetition.
- Before, we were using the same function SonarSensor() but calling it only once for our single sensor interfaced with arduino but now we are calling it three times for all the three sensors.
- Its kind of a generic code, you can interface more sensors with it if you want and what you need to do is only calling this function for the next interfaced sensor.
Arduino Projects for Beginners
JLCPCB – Prototype 10 PCBs for $2 (For Any Color)China’s Largest PCB Prototype Enterprise, 600,000+ Customers & 10,000+ Online Orders DailyHow to Get PCB Cash Coupon from JLCPCB: https://bit.ly/2GMCH9w
Характеристики HC SR04
После общего представления о датчиках расстояния стоит остановиться на конкретных характеристиках HC SR04 непосредственно созданного для подключения к Arduino.
Как видно по изображению — сонар сделан в виде меленькой платы с четырьмя контактами и двумя активными ультразвуковыми модулями. Последние попеременно могут работать, как излучателем сигнала, так и его приемником. Что касается шин, — две из них питание(VCC) с землей(GND), а остальные — Trig (T) и Echo(R). Последние названые — соответственно триггер подачи сигнала(T) и индикатор получения ответа(R) подключаемые от HC SR04 к Arduino.
Технические характеристики устройства:
- Напряжение питания: 3.3–5 В/15 мА.
- Потребление в пассивном состоянии: < 2 мА.
- Угол расхождения ультразвука от излучателя: 15°.
- Угол получения ответа: 30°.
- Минимальный размер объекта наблюдения: 3 мм.
- Длина импульса: 10–6Е с.
Алгоритм работы
Здесь все очень просто:
- Arduino производит инициализацию сонара HC SR04 отправкой сигнала LOW в течение определенного времени на шину триггера (T). Кроме перезапуска режима работы датчика, в зависимости от длины импульса устанавливается точность измерения. Рекомендуемое время — 5 мс.
- Следом, на триггер отсылается импульс HIGH, длительностью 10 мс.
- Сонар генерирует на ультразвуковом излучателе 8 сигналов частотой в 40 мГц.
- В случае получения детектором отраженного от предмета или препятствия эха, на шине ECHO (R) генерируется импульс по длительности соответствующий расстоянию до объекта.
Конечно, само расстояние вычисляется в зависимости от полученного значения и выводится по формуле. Для выяснения сантиметров до объекта, длину импульса R нужно разделить на константу 58.2. Если требуются дюймы, берут — 148.
Исходный код программы
Чтобы в программе подключить ЖК дисплей к ARDUINO UNO, необходимо сделать следующие несколько вещей:
Arduino
#include <LiquidCrystal.h>
lcd.begin(16, 2);
LiquidCrystal lcd(0, 1, 8, 9, 10, 11);
lcd.print(«hello, world!»);
1 |
#include <LiquidCrystal.h> lcd.begin(16,2); LiquidCrystallcd(,1,8,9,10,11); lcd.print(«hello, world!»); |
В первую очередь мы должны подключить заголовочный файл (‘#include <LiquidCrystal.h>’), в котором находятся все необходимые инструкции для взаимодействия с ЖК дисплеем, что значительно упростит взаимодействие с ним в 4 битном режиме. Используя этот заголовочный файл нам не нужно будет передавать в ЖК дисплей бит за битом и нам не нужно будет самим программировать какие-либо функции для взаимодействия с ЖК дисплеем.
Во второй строчке мы должны сказать плате ARDUINO UNO какой тип ЖК дисплея мы собираемся использовать, поскольку существует достаточно большое число типов подобных дисплеев, например, 20×4, 16×2, 16×1 и т.д. В нашем проекте мы собираемся подключать к ARDUINO UNO ЖК дисплей 16х2, поэтому мы и должны записать команду ‘lcd.begin(16, 2);’. А если бы мы подключали ЖК дисплей 16х1, то в этом случае изменилась бы и команда соответствующим образом — ‘lcd.begin(16, 1);’.
В следующей инструкции мы сообщаем плате ARDUINO UNO к каким контактам мы подсоединили ЖК дисплей. В нашем случае мы использовали контакты ЖК дисплея “RS, En, D4, D5, D6, D7”, которые подсоединены к контактам «0, 1, 8, 9, 10, 11» ARDUINO UNO, поэтому и приведенная команда выглядит следующим образом — “LiquidCrystal lcd(0, 1, 8, 9, 10, 11);”.
Для того, чтобы напечатать на экране дисплея строку символов, мы использовали команду lcd.print(«hello, world!»), которая выводит на экран дисплея строку ‘hello, world!’.
Как мы видим из представленного кода, нам не нужно заботиться больше ни о каких аспектах взаимодействия с ЖК дисплеем, нам нужно просто инициализировать ЖК дисплей в программе и тогда плата ARDUINO UNO будет готова к отображению информации на экране дисплея.
Далее представлен исходный код программы (с комментариями) для взаимодействия платы ARDUINO UNO с ЖК дисплеем 16х2.
Arduino
#include <LiquidCrystal.h> // инициализируем библиотеку для взаимодействия с ЖК дисплеем
LiquidCrystal lcd(0, 1, 8, 9, 10, 11); /// сообщаем Arduino номера контактов, к которым подключен ЖК дисплей — REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
void setup()
{
// устанавливаем число столбцов и строк для ЖК дисплея
lcd.begin(16, 2);
}
void loop()
{
// устанавливаем курсор в нулевой столбец первой строки
lcd.print(» CIRCUIT DIGEST»); //печатаем строку
lcd.setCursor(0, 1); // устанавливаем курсор в нулевой столбец второй строки
lcd.print(«http://www.circuitdigest.com/»);//печатаем строку
delay(750); //задержка на 0.75 сек
lcd.scrollDisplayLeft();// переключаем данные на ЖК дисплее
lcd.setCursor(0, 0);// устанавливаем курсор в нулевой столбец первой строки
}
1 |
#include <LiquidCrystal.h> // инициализируем библиотеку для взаимодействия с ЖК дисплеем LiquidCrystallcd(,1,8,9,10,11);/// сообщаем Arduino номера контактов, к которым подключен ЖК дисплей — REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN voidsetup() { // устанавливаем число столбцов и строк для ЖК дисплея lcd.begin(16,2); } voidloop() { // устанавливаем курсор в нулевой столбец первой строки lcd.print(» CIRCUIT DIGEST»);//печатаем строку lcd.setCursor(,1);// устанавливаем курсор в нулевой столбец второй строки lcd.print(«http://www.circuitdigest.com/»);//печатаем строку delay(750);//задержка на 0.75 сек lcd.scrollDisplayLeft();// переключаем данные на ЖК дисплее lcd.setCursor(,);// устанавливаем курсор в нулевой столбец первой строки } |
Скачивание и установка необходимого программного обеспечения
Программную среду Arduino IDE можно скачать по этой ссылке, хотя если вы читаете этот материал наверняка она у вас уже есть. Arduino IDE требует драйвера для взаимодействия с платой Arduino. Обычно этот драйвер устанавливается автоматически как только вы подключаете плату Arduino к вашему компьютеру. Но если у вас возникла проблема с этим шагом, то найти ее решение вы можете в полном руководстве по плате Arduino Uno на нашем сайте.
Программную среду Processing IDE можно скачать по этой ссылке. Processing представляет собой отличную программную среду с открытым исходным кодом, хорошо подходящую для многих DIY (сделай сам) проектов. Она имеет несколько режимов работы. В режиме “Java Mode” мы можем создать в ней оконное приложение для операционной системы Windows (.EXE files), в режиме “Android mode” – мобильное приложение для Android (.APK files), в режиме “Python mode” можно писать программы на языке Python. В данной статье мы не будем подробно описывать работу с данной программной средой (для этой цели в сети есть специализированные сайты), но будет приведен текст программы в ней для нашего проекта, который вы можете использовать если не хотите изучать данную программную среду.
Исходный код программы (скетча)
Arduino
/* Obstacle Avoiding Robot Using Ultrasonic Sensor and Arduino NANO
* Circuit Digest(www.circuitdigest.com)
*/
int trigPin = 9; // trig pin датчика HC-SR04
int echoPin = 10; // Echo pin датчика HC-SR04
int revleft4 = 4; //REVerse motion (движение назад) для левого двигателя
int fwdleft5 = 5; //ForWarD motion (движение вперед) для левого двигателя
int revright6 = 6; //REVerse motion (движение назад) для правого двигателя
int fwdright7 = 7; //ForWarD motion движение вперед) для правого двигателя
long duration, distance;
void setup() {
delay(random(500,2000)); // задержка на случайное время
Serial.begin(9600); //для целей отладки, потом можно закомментировать
pinMode(revleft4, OUTPUT); // set Motor pins as output
pinMode(fwdleft5, OUTPUT);
pinMode(revright6, OUTPUT);
pinMode(fwdright7, OUTPUT);
pinMode(trigPin, OUTPUT); // set trig pin as output
pinMode(echoPin, INPUT); //echo pin в режим ввода данных
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // передаем серию импульсов длительностью 10 мкс
delayMicroseconds(10);
duration = pulseIn(echoPin, HIGH); // принимаем отраженные импульсы
distance = duration / 58.2; // рассчитываем расстояние в см
delay(10);
// If you dont get proper movements of your robot then alter the pin numbers (если что то работает не так, попробуйте сменить используемые контакты)
if (distance > 19)
{
digitalWrite(fwdright7, HIGH); // движение вперед
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, HIGH);
digitalWrite(revleft4, LOW);
}
if (distance < 18)
{
digitalWrite(fwdright7, LOW); //Stop (остановка)
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(500);
digitalWrite(fwdright7, LOW); //движение назад
digitalWrite(revright6, HIGH);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, HIGH);
delay(500);
digitalWrite(fwdright7, LOW); //Stop (остановка)
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(100);
digitalWrite(fwdright7, HIGH);
digitalWrite(revright6, LOW);
digitalWrite(revleft4, LOW);
digitalWrite(fwdleft5, LOW);
delay(500);
}
}
1 |
/* Obstacle Avoiding Robot Using Ultrasonic Sensor and Arduino NANO inttrigPin=9;// trig pin датчика HC-SR04 intechoPin=10;// Echo pin датчика HC-SR04 intrevleft4=4;//REVerse motion (движение назад) для левого двигателя intfwdleft5=5;//ForWarD motion (движение вперед) для левого двигателя intrevright6=6;//REVerse motion (движение назад) для правого двигателя intfwdright7=7;//ForWarD motion движение вперед) для правого двигателя longduration,distance; voidsetup(){ delay(random(500,2000));// задержка на случайное время Serial.begin(9600);//для целей отладки, потом можно закомментировать pinMode(revleft4,OUTPUT);// set Motor pins as output pinMode(fwdleft5,OUTPUT); pinMode(revright6,OUTPUT); pinMode(fwdright7,OUTPUT); pinMode(trigPin,OUTPUT);// set trig pin as output pinMode(echoPin,INPUT);//echo pin в режим ввода данных } voidloop(){ digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH);// передаем серию импульсов длительностью 10 мкс delayMicroseconds(10); duration=pulseIn(echoPin,HIGH);// принимаем отраженные импульсы distance=duration58.2;// рассчитываем расстояние в см delay(10); // If you dont get proper movements of your robot then alter the pin numbers (если что то работает не так, попробуйте сменить используемые контакты) if(distance>19) { digitalWrite(fwdright7,HIGH);// движение вперед digitalWrite(revright6,LOW); digitalWrite(fwdleft5,HIGH); digitalWrite(revleft4,LOW); } if(distance<18) { digitalWrite(fwdright7,LOW);//Stop (остановка) digitalWrite(revright6,LOW); digitalWrite(fwdleft5,LOW); digitalWrite(revleft4,LOW); delay(500); digitalWrite(fwdright7,LOW);//движение назад digitalWrite(revright6,HIGH); digitalWrite(fwdleft5,LOW); digitalWrite(revleft4,HIGH); delay(500); digitalWrite(fwdright7,LOW);//Stop (остановка) digitalWrite(revright6,LOW); digitalWrite(fwdleft5,LOW); digitalWrite(revleft4,LOW); delay(100); digitalWrite(fwdright7,HIGH); digitalWrite(revright6,LOW); digitalWrite(revleft4,LOW); digitalWrite(fwdleft5,LOW); delay(500); } } |
Датчик VL6180X
VL6180X – это оптический датчик от компании STMicroelectronics. Его также называют датчиком света (освещенности) и приближения. Его внешний вид показан на следующем рисунке.
Датчик VL6180 содержит ИК-излучатель, датчик внешней освещенности и датчик дальности. К микроконтроллерам и другим электронным устройствам он подключается по интерфейсу I2C. Также датчик имеет встроенный стабилизатор напряжения 2,8 В, поэтому он не повредится если подключить к нему напряжение больше 2,8 В (ну в пределах разумного, конечно же). Еще в датчике присутствуют два программируемых вывода GPIO. Распиновка датчика показана на следующем рисунке.
VL6180X в отличие от других подобных датчиков содержит в своем составе точные часы для измерения времени пролета светового потока, что позволяет ему обеспечивать значительно большую точность измерений по сравнению с другими аналогичными датчиками. Это также делает его практически невосприимчивым к шуму.
Датчик VL6180X способен измерять расстояния до 25 см. Поэтому, к примеру, в домашнем использовании он отлично подойдет для измерения фокусного расстояния камеры или фотоаппарата. Если же вам необходим лидар, работающий на большие расстояния, то в данном случае вам вместо датчика VL6180X необходимо использовать датчик Vl53l0x, который также отличается большей точностью измерений и не имеет проблем с линейностью, приводящих к “двойному изображению”.
Элементы платы
Дисплей
Дисплей MT-16S2H-I умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.
Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.
Контроллер дисплея
Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.
Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.
I²C-расширитель
Для экономии пинов микроконтроллера на плате дисплея также распаян дополнительный преобразователь интерфейсов INF8574A: микросхема позволит общаться экрану и управляющей плате по двум проводам через интерфейс I²C.
Контакты подключения
На плате дисплея выведено 18 контактов для подведения питания и взаимодействия с управляющей электроникой.
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | VCC | Напряжение питания (5 В) |
3 | VO | Управление контрастностью |
4 | RS | Выбор регистра |
5 | R/W | Выбор режима записи или чтения |
6 | E | Разрешение обращений к индикатору (а также строб данных) |
7 | DB0 | Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме) |
8 | DB1 | Шина данных (8-ми битный режим) |
9 | DB2 | Шина данных (8-ми битный режим) |
10 | DB3 | Шина данных (8-ми битный режим) |
11 | DB4 | Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме) |
12 | DB5 | Шина данных (8-ми и 4-х битные режимы) |
13 | DB6 | Шина данных (8-ми и 4-х битные режимы) |
14 | DB7 | Шина данных (8-ми и 4-х битные режимы) |
15 | LED+ | Питания подсветки (+) |
16 | LED– | Питания подсветки (–) |
17 | SDA | Последовательная шина данных |
18 | SCL | Последовательная линия тактированния |
Обратите внимания, что физические контакты подсветки экрана и , также интерфейс шины I²C и расположены не в порядком соотношении с другими пинами экрана.
Питание
Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт
Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В.
Интерфейс передачи данных
Дисплей может работать в трёх режимах:
- 8-битный режим — в нём используются и младшие и старшие биты (-)
- 4-битный режим — в нём используются только младшие биты (-)
- I²C режим — данные передаются по протоколу I²C/TWI. Адрес дисплея .
Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C.
Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на текстовый экран 16×2.
Объединение питания
Для подключения питания к дисплею необходимо пять контактов:
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | VCC | Напряжение питания (5 В) |
3 | VO | Управление контрастностью |
15 | LED+ | Питания подсветки (+) |
16 | LED– | Питания подсветки (–) |
Но если запаять перемычки и на обратной стороне дисплея, количество контактов питания можно сократить до трёх, объединив цепь питания и подсветки дисплея.
Мы взяли этот шаг на себя и спаяли перемычки самостоятельно.
Выбор адреса
Используя шину можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним.
Для общения с каждым дисплеем отдельно, необходимо установить в них разные адреса. Для смены адреса на обратной стороне дисплея установлены контактные площадки , и .
Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов:
- нет припоя, соответственно нет электрического контакта.
- есть припой, соответственно есть электрический контакт.
J2 | J1 | J0 | Адрес |
---|---|---|---|
L | L | L | 0x38 |
L | L | H | 0x39 |
L | H | L | 0x3A |
L | H | H | 0x3B |
H | L | L | 0x3C |
H | L | H | 0x3D |
H | H | L | 0x3E |
H | H | H | 0x3F |
Инструменты
Чтобы лишний раз не бегать в магазин прямо посреди процесса сборки системы, лучше заранее подготовить все инструменты, что могут вам пригодиться. Так, стоит побеспокоиться, чтобы под рукой были:
- Паяльник. Хорошим выбором станут приборы с регулируемой мощностью, их можно приспособить к любой ситуации.
- Проводники. Естественно, датчик необходимо будет подсоединять к МК, и для этого не всегда подходят стандартные пины.
- Переходник под usb-порт. Если на вашем микроконтроллере нет встроенного порта, побеспокойтесь о том, чтобы его можно было подключить к ПК другим способом. Ведь вам необходимо будет подгружать дополнительные библиотеки и новую прошивку в ваш проект.
- Припой, канифоль и прочие мелочи, в том числе изолированное рабочее пространство.
- Сам чип и МК, а также, при необходимости, корпус будущего устройства. Наиболее опытные инженеры предпочитают распечатывать оболочку для своих проектов на 3Д принтере, однако, если вы живёте в крупном городе, не обязательно тратиться. Можете поискать компании, дающие в аренду принтеры.
Стоит понимать, что дальномер Arduino относится к приборам бесконтактного типа и способен обеспечивать точные измерения. Но всё же не стоит забывать, что профессиональные устройства используют совершенно другие технологии и проходят длительную калибровку под все материалы, а соответственно, в любом случае, окажутся лучше. Также у нашего проекта будет ограниченный диапазон измерения расстояний, от 0.03 до 4 метров, что подойдёт не во всех случаях.
Но, что хорошо, на работу устройства не оказывается никакого влияния со стороны ЭМ излучений и солнечной энергии. А в комплекте к датчику уже находятся нужные ресиверы и трансмиттеры, которые пригодятся, когда вы будете собирать ультразвуковой дальномер Ардуино.
Важно! В нашем уроке можно будет ничего не паять, т.к. мы будем использовать макетную плату и провода-перемычки
Но если вы захотите в итоге собрать законченное устройство — вам пригодится всё что мы указали выше.
Технические характеристики Arduino Sensorshield
Самое главное преимущество данного шилда заключается в том, что вы сможете подключить огромное количество датчиков с максимальной удобностью и при этом заняв максимально маленькое место на Arduino. Подключение шилда к ардуино воспроизводится стандартным способом, а именно накладывается всеми контактами на плату микроконтроллера, сделав гибрид, который мы назовем — «бутерброд».
Шилд можно использовать для подключения следующих устройств
- SD card
- 32 servo controller
- RB URF для ультразвуковых датчиков
- 12864 LCD последовательный и параллельный интерфейс
- APC220 wireless RF
- Bluetooth
- I2C
Ниже приведена схематическая распиновка платы Sensorshield, она вам поможет понять, в какие пины вам необходимо соединить тот или иной датчик.
Как работает лазерный дальномер
Способ точного бесконтактного определения расстояния с выводом данных на дисплей, представляет собой сложную электронную схему. В основе конструкции лежит излучатель, приёмник, блок измерения времени и микропроцессор, чья совокупность позволяет нам в полной мере эксплуатировать лазерный дальномер. Устройство прибора, в более детальном разборе процессорных плат и модулей, имеет приличную сеть, чья структура лежит далеко за гранью понимания среднестатистического обывателя. Даже радиолюбители, увлекающиеся электроникой, собирают дальномеры из готовых элементов при помощи пайки и программирования.
Говоря по сути, принцип работы лазерного дальномера базируется на скорости света и времени прохождения луча до поверхности и обратно. Выпущенный из излучателя лазер, отражается от первого попавшегося на пути твердого объекта (даже с большим углом преломления), и частично возвращается к устройству, где его распознает принимающий модуль и фиксирует время, потребовавшееся ему для преодоления этого расстояния. Поскольку свет перемещается со скоростью 299 792 458 метров в секунду или 29.2 сантиметров в микросекунду (мкс), то, зная затраченное на путь время, можно легко вычислить длину проделанного им пути. Таким образом, основная формула, используемая дальномерами, имеет следующий вид.
Представленный выше принцип, относиться к импульсным дальномерам, имеющим максимально широкое представление на рынке строительного инструмента. Данные приборы имеют приличную точность с погрешностью от 0.5 до 3-х мм, в зависимости от встроенного датчика приема сигнала, чья скорость обработки должна быть молниеносно быстрой.
Помимо импульсного, существует ещё фазовый способ измерения, все также основанный на лазере, но кардинально отличающийся по способу получения информации. В основе данного принципа лежит частота испускаемого лазера, которая не превышает 450 МГц (в среднем от 10 до 150). Вместо времени, здесь определяется разница фаз (исходящей и принимаемой), на основе которой рассчитывается расстояние до объекта. Фазовому дальномеру требуется больше времени для получения значения, но точность измерений превосходит импульсный.