1. Вместо вступления (можно не читать).
Итак, в мосей машине (Mitsubishi Pajero Sport 1st gen) с завода небыло забортного термометра, но были штатные часы в очень удобном месте. Это натолкнуло на оч…
/* автономный костыль для сигнализации, тестировалось на ардуино нано,
* gsm модуль neoway м590, издевательство при отладке программы, терпел киевстар…
* большинство строк честно взята с различных рес…
Вчера писал в сообщество по поводу затупов ардуины при выводе информации на экра по шине i2c. мой пост быстро снесли, я даже не успел прочитать ни одного коммента, но не суть)) проблема была в том что…
Всем привет! Всех с праздником Победы!
подготовил я вам вторую часть моего проекта Климат контроля на Arduino.
Реализованы следующие функции:
1. Пид регулятор
2. Вольтметр
3. Средняя температура
4. Пр…
Сразу оговорюсь для «писателей» я знаю о существовании модулей RTC и умею ими пользоваться. Пост немного о другом. Довольно часто в программах нужно определять интервалы времени, зачастую для этого и…
Ссылка на прошлую часть.
Проект «показамеры на базе Ардуины» не был заброшен или забыт, но во время зимних холодов немного подмерз. Весна пришла, проект растаял 🙂
По этой причине с прошлого раза мало…
Тема вольтметра, наверное, вторая по популярности (заезженности) после «блинка». Но все же решился написать про свой способ измерения напряжения.
Естественно самым точным (при применении «голой» ардуи…
В качестве контроллера CAN шины была выбрана платформа CANNY5nano.
Я бы хотел, что бы большее количество людей узнало о его возможностях.
В автомобильных проектах он идеален. Питание напрямую. КАН тра…
Решил и я поделиться своим творчеством с обществом. Как-то стало мне интересно узнать-посмотреть, а что же происходит в нашей CAN шине?
Ардуинка с дисплеем у меня уже валялись. Для подключения к шине…
Всем доброго времени суток! Предлагаю вам обсудить автомотическое включение ближнего света в зависимости от освещенности. В радиодеталях купил первый попавший фотодиод советский фд263 и подключил его…
При изготовлении одного девайса столкнулся с необходимостью измерять ток и напряжение. С напряжением все просто, используем обычный резистивный делитель. Для измерения тока тоже есть много вариантов.…
Собрал девайс для своего блока виртуальной панели! Состав: Ардуино Уно и МСР 2515shield к нему! Скетч из примеров библиотека SeedstudioCan-bus, легко ищется гуглом! Стандартный скетч receive check!и у…
Друг свапнул свой Волгарь и попросил сделать индикатор скоростей в том же стиле, что и щиток) Вот что получилось. Правда между переключениями стрелка стремится к нулю, это можно исправить в прошивке п…
Всем привет, есть не большие продвижения в моем проекте, решил я установить все же 2 датчика 18b20 (датчик температуры), один я ставлю в плафон, второй ставлю где пепельница для задних пассажиров . по…
Источник: https://www.drive2.ru/communities/941/blog/?page=2
Полноприводная машинка на основе Ардуино и RoboRoverM1
Проект полноприводной машинки на основе микроконтроллера Arduino Uno, сенсора HC-SR04 и на базе шасси RoboRoverM1.
Комплектующие
Для нашего транспорта понадобится приличное количество деталей. Полный список вы можете найти ниже.
- Драйвер мотора L298N
- Sharp GP2Y0A21YK0F Аналоговый датчик расстояния 10-80 см
- Ультразвуковой датчик — HC-SR04 (универсальный)
- Датчик TCRT5000 (цифровой выход)
- Мотор DAGU DC 1:48 (вы можете использовать 2 или 4 мотора)
- Arduino UNO
- Сенсорный экран V5
- Робот RoboRover M1
Вам не нужно покупать перечисленные выше аппаратные компоненты, если вы будете использовать шасси RoboRover M1. Это шасси имеет все необходимые компоненты:
- 2 инфракрасных датчика расстояния Sharp A21,
- 3 линейных датчика TCRT5000,
- 1 ультразвуковой датчик расстояния HC-SR04.
А драйвером двигателя является L298N с 4 двигателями (2 двигателя с каждой стороны, соединенные параллельно). Робот поворачивается как танк, меняя скорость вращения правого и левого колес.
И, конечно, из программного обеспечения нам нужна Arduino IDE для работы с нашим кодом.
Робота
Шасси
Очень простой проект, который демонстрирует основы сборки машинки/автомобиля Arduino. По этой причине мы используем шасси RoboRoverM1, но вы можете создать свой собственный автомобиль Arduino, используя свои комплектующие, так как важна идея. Для урока мы будем использовать свое собственное роботизированное шасси RoboRover M1, полноприводное шасси из пластика 4 мм.
Робот RoboRover M1 со всей установленной электроникой ниже. Также был сделан большой зеленый корпус для робота, чтобы защитить всю электронику внутри.
В собранном виде это выглядит таким образом.
Электроника
На фото ниже вы можете увидеть все датчики этого роботизированного автомобиля. Думаю, достаточно изучить основы роботизированного автомобильного движения:
- 3 линейных датчика, чтобы следовать за линией и изучить, как следовать за линией. Модель TCRT5000.
- 2 инфракрасных датчика расстояния, чтобы изучить, как измерить расстояние и написать алгоритмы обхода препятствий. Модель GP2Y0A21YK0F.
- 1 ультразвуковой датчик, который установлен на сервоприводе. Серво может вращаться, и вы можете сделать простую карту расстояний впереди робота. Модель ультразвукового датчика — HC-SR04, а модель сервопривода — MG995R.
Моторы
Чтобы заставить робота двигаться, нам нужны моторы, поэтому мы используем 4 желтых мотора DAGU 1:48 (передаточное число) 5V. Если вы делаете свою собственную машинку, вы можете использовать 2 мотора.
Для управления моторами мы используем моторный привод L298N, не самый лучший, потому что он использует много пинов ввода/вывода автомобиля Arduino, но это руководство для начинающих. Позже вы сможете обновить автомобиль с помощью I2C привода.
Питание машинки-робота
Чтобы позволить роботу двигаться, нам нужно использовать батарею. Рекомендуем использовать 7,4 В Li-Po 2S батарею, думаем, что это лучшее решение для такого типа робота. Не используйте батарейки типа АА или ААА, это плохой выбор.
Для Li-Po аккумулятора необходимо использовать специальное зарядное устройство и контроллер напряжения, но это того стоит.
Это зарядная станция, но вы можете найти разные модели. Самым дешевым является USB-зарядное устройство, но оно очень медленное.
Используйте небольшой тестер напряжения во время работы робота. Он покажет вам время, когда нужно начать заряжать аккумулятор. Эта мелочь поможет вам не разряжать батарею, потому что, если батарея Li-Po чрезмерно разряжена, она перестает правильно функционировать.
Подключение драйвера L298N
Припаиваем все двигатели через небольшой конденсатор и устанавливаем их.
Для правого двигателя один провод подключите к OUT3, а второй провод подключите к OUT4. Таким же образом подключите второй правый мотор.
Для левого двигателя один провод соединяется с OUT2, а второй провод соединяется с OUT1. Таким же образом подключите второй левый мотор.
Если вы сделали неправильное соединение, после загрузки программы тестирования, просто поменяйте провода так, как необходимо.
Сделайте такого рода разъем. Используйте двухпозиционный переключатель (для включения и выключения двигателей и сервопривода робота). Я думаю, вы знаете как паять. Красный разъем для батареи, проверьте, какой тип разъема установлен в вашей батарее. Рекомендуем использовать T-штекер.
- Схема соединения источника питания.
Т-образный разъем. Слева разъем батареи (мама), справа (папа) разъем робота.
Не соединяйте Т-образные разъемы сейчас. Сделайте это после того, как все соединения завершены, на последнем шаге.
Затем установите всё на свой автомобиль. Если вы используете другое собственное шасси, монтаж шасси может быть другим.
- Красный провод подключается к крайнему левому разъему + 12В 3-контактного разъема на драйвере L298N.
- Два черных провода подключаются к среднему разъему GND 3-контактного разъема на L298N.
- Затем возьмите 6 длинных проводов длиной 30-40 см и подключите их к контактам ENA, IN1, IN2, IN3, IN4, ENB на автомобильном приводе L298N.
- Провод № 7 подключите к среднему разъему GND 3-контактного разъема на драйвере L298N (туда же, куда вы подключали предыдущие черные провода).
- В конце концов, ваше соединение должно выглядеть так.
Если вы хотите использовать сервопривод в своем автомобиле-роботе, убедитесь, что он совместим с напряжением 7,4 В. Затем вы можете извлечь красный провод из разъема сервомеханизма и подключить провод к крайнему левому разъему + 12 В 3-контактного разъема на приводе L298N (там же, куда вы ранее подключали красный провод).
Сначала проверьте напряжение сервопривода! Если это не совместимо, просто подключите сервопривод к датчику шилда без каких-либо изменений. В моем случае сервопривод MG995R (MG995) совместим с 7,4 В, к сожалению, на фото мы забыли подключить сервопривод.
Подключение сенсорного шилда к Arduino Uno
Драйвер двигателя
Используйте простой сенсорный шилд для Arduino Uno, чтобы подключить все датчики и провода моторного привода. Наша модель — Arduino Sensor Shield V5.
Провод от автомобильного привода, который необходимо подключить к цифровым контактам на шилде:
- ENA на D5
- IN1 на D2
- IN2 на D8
- ENB на D3
- IN3 на D11
- IN4 на D10
Линейные датчики
Линейный датчик является цифровым, но мы можем использовать аналоговые входы Arduino Uno для считывания цифровых сигналов. Мы подключаем вывод GND датчика к выводу GND на экране, вывод VCC датчика к выводу VCC на шилде 5V.
Сигналы линейных датчиков мы подключаем к аналоговым контактам на шилде:
- Линейный датчик (слева) на A3
- Линейный датчик (в центре) на А4
- Линейный датчик (справа) на A5
Инфракрасные датчики
Аналоговые инфракрасные датчики расстояния Sharp мы подключаем аналогичным образом. Обратите внимание, что в этом случае средний провод датчиков Sharp (черный) — это GND, левый провод (красный) — это VCC, а правый провод (желтый) — это выходной сигнал.
Мы подключаем вывод GND датчика к выводу GND на шилде, вывод VCC датчика к выводу VCC на шилде 5V.
Сигналы инфракрасных датчиков мы подключаем к аналоговым контактам шилда:
- Датчик слева на A0
- Датчик справа на А1
- Ультразвуковой датчик и сервопривод
- Ультразвуковой датчик подключается к следующим контактам:
- подсоедините вывод GND датчика к выводу GND на шилде,
- вывод VCC датчика к выводу VCC на шилде 5V.
Другие контакты мы подключаем к цифровым входам шилда.
- Штырь к D7
- Эхо-штырь к D4
Сервопривод подключается к следующим контактам:
- подключите провод заземления (черный или коричневый) сервопривода к выводу заземления на шилде.
- если сервопривод совместим с 7,4 В, подключите провод VCC (красный или оранжевый) к крайнему левому разъему + 12 В 3-контактного разъема на драйвере L298N. Если сервопривод несовместим, подключите провод VCC сервопривода к выводу VCC на шилде сервопривода.
Сигнальный провод (желтый, белый или оранжевый) подключите к цифровому выводу D9.
Поздравляем! Ваш робот готов!
- Вы можете подключить черный разъем к Arduino, чтобы включить его.
Подключите аккумулятор с помощью Т-образного разъема (или любого другого). Включите двигатели с помощью этого переключателя.
Код проекта
Целиком код и все библиотеки вы можете скачать ниже в ZIP-архивах. Также ниже даются некоторые объяснения по программе для робота-машинки Ардуино.
Скачать файлы проекта .zip
Скачать библиотеки проекта .zip
Установка библиотек
Были созданы библиотеки для этого робота, чтобы изучение программирования было легким и увлекательным. Сделаны свои пользовательские библиотеки для следующих модулей: сервопривод, драйвер, инфракрасный датчик расстояния, ультразвуковой датчик расстояния.
Всё это сделано для тех, кто не является экспертом Arduino. Вы можете смотреть комментарии в библиотеках, чтобы лучше понять, как они работают. Перед тем, как работать с кодом, установите все библиотеки. Вы можете установить их так же, как и все обычные библиотеки Arduino.
Примеры кода
Ниже приведены несколько примеров кода. Пожалуйста, внимательно читайте комментарии в коде.
- Тест моторов
- Сначала тестим ваши моторы, если они вращаются неправильно, просто поменяйте местами провода.
- Загрузите программу, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала.
//Include all necessary libraries to control motoriver L298N
#include
//Create class instances for the motordriver L298N
Motors myMotors;
//Setup all class instances and attach them to the necessary ports
void setup() {
/* Motor digital pins are hardcoded in the library, for your reference pins connections is the next:
Motor 1: enA = 5, in1 = 2, in2 = 8
Motor 2: enB = 3, in3 = 11, in4 = 10 */
myMotors.attach();
}
int speed = 0; //variable to make accleration smoothly
void loop() {
/* How program runs:
Motors are rotating forward during 5 seconds on maximum possible speed 255
Motors are rotating backward during 5 seconds on maximum possible speed —255 */
for (speed; speed < 255; speed++) { myMotors.write(speed, speed); // Rotate motors forward and gain speed smoothly using for delay(15); // delay to make accleration smoothly } delay(5000); //delay 5 seconds for (speed; speed > -255; speed—)
{
myMotors.write(speed, speed); // Rotate motors forward and gain speed smoothly using for
delay(15); // delay to make accleration smoothly
}
delay(5000); //delay 5 seconds
}
Тест инфракрасного датчики расстояния
Проверяем инфракрасные датчики, чтобы понять, правильно ли они работают. Вся информация пойдет на последовательный порт.
Загрузите программу и откройте последовательный порт в Arduino IDE, чтобы увидеть измерения расстояния.
//Include all necessary files to control Sharp distance sensor
#include
//Create class instances for the Sharp distance sensors
Sharp mySharpA0;
Sharp mySharpA1;
//Setup all class instances and attach them to the necessary ports
void setup() {
//Serial port attach on the speed 9600
Serial.begin(9600);
//You can choose pins from A0 to A5 for the Arduino Uno and add more distance sensors
mySharpA0.attach(A0);
mySharpA1.attach(A1);
}
void loop() {
Serial.print(«Infrared sensor left: «);
Serial.println(mySharpA0.read());
Serial.print(«Infrared sensor right: «);
Serial.println(mySharpA1.read());
Serial.println(«»);
delay(500);
Радар ультразвукового датчик расстояния
Этот код проверяет ультразвуковой датчик и проверяет вращение сервопривода. Это простой радар. Сервопривод вращается влево, вправо или в среднее положение, ультразвуковой датчик измеряет расстояние.
Загрузите программу, откройте последовательный порт в Arduino IDE, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала.
//Include all necessary files to control ultrasonic distance sensor and rotate servo
#include
#include
//Create class instance for the ultrasonic distance sensor
Ultrasonic myUltrasonic;
//Create class instance for the servo
ServoMotor myServo;
//Setup all class instances and attach them to the necessary ports
void setup() {
//Serial port attach on the speed 9600
Serial.begin(9600);
//Attach sensor and servo
//Pins for the ultrasonic sensor and servo are hardcoded in the library
myUltrasonic.attach();
myServo.attach();
//Set servo in the middle position
myServo.write(90);
//Wait 2 seconds before program starts
delay(2000);
}
void loop() {
myServo.write(90); //Set servo in the middle position
Serial.print(«Distance center «);
Serial.println(myUltrasonic.read());
delay(1000); //Wait 1 second
myServo.write(130); //Turn servo left
Serial.print(«Distance left «);
Serial.println(myUltrasonic.read());
delay(1000); //Wait 1 second
myServo.write(50); //Turn servo right
Serial.print(«Distance right «);
Serial.println(myUltrasonic.read());
delay(1000); //Wait 1 second
}
Тестируем линейные сенсоры
//Include all necessary files to control line sensors
#include
//Create class instances for the line sensors
LineSensor myLineSensorA3;
LineSensor myLineSensorA4;
LineSensor myLineSensorA5;
//Setup all class instances and attach them to the necessary ports
void setup() {
//Serial port attach on the speed 9600
Serial.begin(9600);
//You can choose pins from A0 to A5 for the Arduino Uno and add more sensors
myLineSensorA3.attach(A3);
myLineSensorA4.attach(A4);
myLineSensorA5.attach(A5);
}
void loop() {
Serial.print(«Line sensor left: «);
Serial.println(myLineSensorA3.read());
Serial.print(«Line sensor center: «);
Serial.println(myLineSensorA4.read());
Serial.print(«Line sensor right: «);
Serial.println(myLineSensorA5.read());
Serial.println(«»);
delay(500);
}
Уклонение робота от препятствий с помощью инфракрасных датчиков расстояния
Эта программа позволит роботу избегать препятствия с помощью инфракрасных датчиков расстояния.
Загрузите программу, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала. Робот начнет двигаться и избегать препятствий!
//Include all libraries to control Sharp distance sensor, and motordriver L298N
#include
#include
//Create class instances for the Sharp distance sensors and motordriver L298N
Sharp mySharpA0;
Sharp mySharpA1;
Motors myMotors;
//Setup all class instances and attach them to the necessary ports
void setup() {
Serial.begin(9600);
//You can choose pins from A0 to A5 for the Arduino Uno and add more distance sensors
mySharpA0.attach(A0);
mySharpA1.attach(A1);
/* Motor digital pins are hardcoded in the library, for your reference pins connections is the next:
Motor 1: enA = 5, in1 = 2, in2 = 8
Motor 2: enB = 3, in3 = 11, in4 = 10 */
myMotors.attach();
}
void loop() {
/* How program runs:
If distance from the left sensor less than 60cm (true)
or distance from the right sensor less than 60cm (true),
we are going to the next enclosured «if» conditional statement.
If distance from both sensors is less than 35cm (true), robot is going backward.
Else we are going to the next enclosured «if» conditional statement.
If distance from the left sensor is less or equal to the distance from the right sensor,
robot turns to the right.
If distance from the left sensor is bigger than right sensor, robot turns left.
If distance from the both sensors more than 60cm, robot is running straight forward. */
if (mySharpA0.read()
Источник: https://ArduinoPlus.ru/4wd-mashinka-arduino-roboroverm1/
Датчик движения своими руками на Arduino | Каталог самоделок
Вспомним, что основа данного проекта Arduino. Он выполняет ряд важнейших функций: считывает данные с ИК-датчика, обрабатывает сигналы, реагирует на движения, а USB оповещает компьютер о необходимости отправить сообщение. В этой статье рассмотрим два вопроса:
- Подключение PIR-датчика к Arduino;
- Как настроить взаимосвязь между датчиком и автоматической отправкой e-mail.
Необходимо для проекта:
- Arduino UNO (выбрать можно на Aliexpress).
- PIR-датчик .
- Бредбоард.
- Связка проводов.
- Все перечисленные элементы для сборки можно увидеть на фотографиях:
В первую очередь нужен ПК с подключением к интернету. Мы использовали Raspberry Pi.
Подключаем PIR-датчик к набору Arduino:
Чтобы осуществить этот этап нужно взять провода, которые идут от датчика, и прикрепить их к платформе. Далее вам будет предоставлена фотография со схемой:
Работа со скетчем
При возникновении движения Arduino при помощи USB Serial должен послать электронное сообщение. Конечно же, если при любом возникшем движении отправлять e-mail, то почтовый ящик будет переполнен. Поэтому мы исправили это таким образом, если между двумя сигналами короткий промежуток времени, будет отправляться письмо с таким текстом:
int pirPin = 7;
int minSecsBetweenEmails = 60; // 1 min
long lastSend = -minSecsBetweenEmails * 1000;
void setup()
{
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop()
{
long now = millis();
if (digitalRead(pirPin) == HIGH)
{
if (now > (lastSend + minSecsBetweenEmails * 1000))
{
Serial.println(«MOVEMENT»); lastSend = now;
}
else
{
Serial.println(«Too soon»); }
}
delay(500);
}
«MinSecsBetweenEmails» – эта переменная может переключаться на другие значения, которые будут удобны пользователю. К примеру, можно установить интервал, который равен одной минуте – это будет означать, что следующий e-mail будет отправлен только через 60 секунд.
«LastSend» поможет отследить время, в которое было отправлено последнее сообщение. Инициализация данной переменной происходит с отрицательным числом, которое равно миллисекундам, что указаны в «MinSecsBetweenEmails». В итоге, мы получаем гарантию того, что после запуска скетча в Arduino сразу же запустится PIR-датчик.
За счет чего мы можем высчитать миллисекунды, сравнить их число со временем последнего срабатывания датчика? Все благодаря встроенной функции под названием Millis. В том случае, если обнаружено движение, но прошло мало времени с последнего активизации датчика будет отправлено письма с текстом «Too soon».
Эту функцию сначала надо проверить. Для этого открывается Serial Monitor. Далее рассмотрим, как он выглядит:
После того, как вы убеждены в исправной работе, можно записывать программу на Python, его используют для обрабатывания сигналов от платформы.
Как установить PySerial и Python:
Операционная система Linux имеет автоматически установленный Python. Система Windows не обладает такой характеристикой, поэтому программу необходимо установить самостоятельно. PySerial исполняет роль библиотеки, она поможет поддерживать связываться с Arduino.
Установка Python:
Python 3 нередко вызывает затруднения при работе с PySerial, особенно если вы используете Windows. Чтобы этого избежать, можно вместо третьей версии скачать Python 2.
Завершив установку программы в меню «Пуск» можно обнаружить особую группу. Когда мы перейдем к процессу установки библиотеки, нам понадобится сотрудничество с Python, применив командную строку. Поэтому лучше сразу добавить к PATH нужный каталог. Далее можно увидеть вспомогательную фотографию:
Для добавления каталога нам потребуется: открыть панель управления, в ней найти раздел «System Properties». Потом нажимаем клавишу, которая называется «Переменная среда» (Environment Variabes), перед нами всплывет окно. В его нижней части должен находиться «Path», который нужно выбрать.
Теперь кликнем на «Edit» – Изменение и завершаем процесс нажатием «значения переменной». Нельзя удалять текст, который получили, к нему следует дописать такую надпись – «;C:Python27». Не забываем после каждой папки, что указана в тексте ставить «;». Теперь проверяем правильно ли осуществлен ввод «Path». Для этого в командную строку вводим слово «python».
Если ошибок не возникло, то на экране появится следующая картинка:
Установить PySerial:
Независимо от используемой операционной системы, скачиваем .tar.gz установочный пакет для PySerial 2.6 с . Этот сайт может помочь это сделать – //pypi.python.org/pypi/pyserial. Получаем файл с именем pyserial-2.6.tar.gz. Если используется Windows, то будет нужна распаковка файлов в выбранную папку.
Это не стандартный файл формата ZIP, придется сделать дополнительные действия – скачать 7-zip (это можно сделать здесь – //www.7-zip.org/). Для системы Linux необходимо воспользоваться терминальной сессией, в ней дать команду «CD», указать название той папки, в которую скачали pyserial-2.6.tar.gz.
Чтобы выполнить распаковку нужно ввести:
$ tar -xzf pyserial-2.6.tar.gz
После этого потребуется выполнить команду:
sudo python setup.py install
Python
Потребуется создать отдельную программу для работы с Python. Нужно скопировать код в файл с таким именем – «movement.py». В Linux можно использовать «нано» редактор, а для системы Windows необходимо создать файл, используя редактор Python «IDLE ». Он доступен в меню «Пуск».
import time
import serial
import smtplib
TO = 'putyour@email.here'
GMAIL_USER = 'putyour@email.here'
GMAIL_PASS = 'putyourpasswordhere'
SUBJECT = 'Intrusion!!'
TEXT = 'Your PIR sensor detected movement'
ser = serial.Serial('COM4', 9600)
def send_email():
print(«Sending Email»)
smtpserver = smtplib.SMTP(«smtp.gmail.com»,587)
smtpserver.ehlo() smtpserver.starttls()
smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS)
header = 'To:' + TO + '
' + 'From: ' + GMAIL_USER
header = header + '
' + 'Subject:' + SUBJECT + '
'
print header
msg = header + '
' + TEXT + '
'
smtpserver.sendmail(GMAIL_USER, TO, msg)
smtpserver.close()
while True:
message = ser.readline()
print(message)
if message[0] == 'M' :
send_email()
time.sleep(0.5)
- Это показано на следующей картинке:
- После изменений, программа запуститься при помощи командной строки:
python movement.py
- Итак, установка завершена.
- На этом возможности не заканчиваются, есть расширения, которые позволяют получать сообщения с отчетами о температуре или других сведениях.
- Прикрепленные файлы: Скетчи и коды.
- Доронин Виталий, Липецк.
Источник: https://volt-index.ru/electronika-dlya-nachinayushih/datchik-dvizheniya-svoimi-rukami-na-arduino.html
Замер разгона автомобиля на arduino (Wemos D1)
В одной из прошлых частей мы собрали простой спидометр с возможностью замера разгона до сотни, сегодня мы расширим его функционал. На борту платы Wemos D1, благодаря чипу ESP8266, есть полноценный WiFi, так давайте же задействуем его, создадим web сервер и будем передавать результаты замеров на телефон.
Подключение
Подключаем все модули абсолютно также, как в прошлый раз:
- Соединим дисплей с шиной I2C: VCC -> 3V3, GND -> GND, SCL -> D1, SDA -> D2.
- А GPS модуль с программным UART: V -> 3V3, G -> GND, R -> D8, T -> D7.
Web сервер на ESP8266
В этот раз мы выжмем максимум из NEO-7, в настройках зададим рейт обновления 16 раз в секунду, минимум 5 спутников для фиксации и автомобильный режим. Эти настройки позволяют повысить точность замеров.
Создать web-сервер на ESP8266 проще простого. Необходимо указать на каком порту он будет ждать подключения, для http это традиционно 80й порт, и указать, по каким запросам, какую функцию выполнять.
Я подготовил небольшую html страничку, которая будет запрашивать последние 10 результатов замеров и отображать их на экране. Для максимального быстродействия результаты будут отправляться в формате json.
const char *ssid = «ARDULOGIC»; // Название сети WiFi
const char *password = «1234567890»; // Пароль для подключения
ESP8266WebServer server(80); // Создаем веб сервер на 80 порту
void ALServer::serverHandle()
{
server.handleClient(); // Ждём подключения
}
void ALServer::createAP()
{
WiFi.softAP(ssid, password); // Создаём точку WiFi
// Указываем по каким роутам какие методы запускать
server.on(«/», [this]() {
handleRoot();
});
server.on(«/style.css», [this]() {
handleStyle();
});
server.on(«/results», [this]() {
handleResults();
});
server.begin();
}
// Метод формирует стартовую страницу http://192.168.4.1
void ALServer::handleRoot()
{
server.send(200, «text/html», data_indexHTML);
}
void ALServer::handleStyle() {
server.send(200, «text/css», data_styleCSS);
}
void ALServer::handleResults()
{
StaticJsonBuffer jsonBuffer;
JsonArray& arrayJ = jsonBuffer.createArray();
// Результат будет отправлять в формате json
for (int i = 0; i < _n; i++) { if (0.0 != _meterings[i].accel30) { JsonObject& object = jsonBuffer.createObject(); dtostrf(_meterings[i].accel30, 3, 1, buf30); object["a30"] = (String)buf30; dtostrf(_meterings[i].accel60, 3, 1, buf60); object["a60"] = (String)buf60; dtostrf(_meterings[i].accel100, 3, 1, buf100); object["a100"] = (String)buf100; arrayJ.add(object); } } char buffer[512]; arrayJ.printTo(buffer, sizeof(buffer)); server.send(200, "text/html", buffer); }
Скачать архив со скетчем: Speedometer3.zip
Теперь если подключиться к устройству по WiFi, после замера можно увидеть такую картину.
Дисплей
В предыдущем варианте дисплей отображал только скорость и результат последнего замера. Давайте добавим в него больше информации. Для удобства отладки будем выводить на экран количество спутников, точность позиционирования, время и координаты положения. Добавим в код новую структуру для хранения этой информации и немного изменим вывод на экран.
struct FullData
{
unsigned int numSV; // Спутники
float hAcc; // Точность
char gpsTime[9]; // Время
char bufLatitude[10];
char bufLongitude[10];
unsigned int gSpeedKm = 0; // Скорость
};
void LCD::updateScreen(FullData* fullData, Metering* metering)
{
// Рисуем линии «сигнала» gps
display->clear();
display->drawVerticalLine(7, 2, 8);
display->drawVerticalLine(6, 2, 8);
display->drawVerticalLine(4, 5, 5);
display->drawVerticalLine(3, 5, 5);
display->drawVerticalLine(1, 8, 2);
display->drawVerticalLine(0, 8, 2);
display->drawHorizontalLine(0, 11, 128);
display->drawHorizontalLine(0, 54, 128);
// Спутники
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(11, 0, (String)fullData->numSV);
// Точность
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(42, 0, (String)fullData->hAcc);
// Время
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->setFont(ArialMT_Plain_10);
display->drawString(128, 0, fullData->gpsTime);
// Разгон до 30 км/ч
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->setFont(ArialMT_Plain_16);
dtostrf(metering->accel30, 3, 1, buf30);
display->drawString(122, 10, (String)buf30);
// Разгон до 60 км/ч
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->setFont(ArialMT_Plain_16);
dtostrf(metering->accel60, 3, 1, buf60);
display->drawString(122, 24, (String)buf60);
// Разгон до 010 км/ч
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->setFont(ArialMT_Plain_16);
dtostrf(metering->accel100, 3, 1, buf100);
display->drawString(122, 38, (String)buf100);
// Координаты
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(0, 54, fullData->bufLatitude);
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->setFont(ArialMT_Plain_10);
display->drawString(128, 54, fullData->bufLongitude);
// Скорость
char gpsSpeed[3];
sprintf(gpsSpeed, «%03d», fullData->gSpeedKm);
display->setTextAlignment(TEXT_ALIGN_CENTER);
display->setFont(Orbitron_Light_30);
display->drawString(45, 20, gpsSpeed);
display->display();
}
Вот что у нас получится в итоге.
Источник: https://ardulogic.ru/posts/zamer-razgona-avtomobilya-na-arduino-wemos-d1
Детектор скорости движущегося автомобиля на Ардуино своими руками
В этом проекте я покажу вам, как спроектировать и построить простую схему детектора для определения скорости движущегося автомобиля или любого движущегося объекта с использованием Arduino NANO и инфракрасных датчиков (ИК).
Принцип работы
ИК-датчики являются основной частью данного проекта. Практически вы можете реализовать настройку ИК-датчиков разными способами, но в этом проекте я использовал два ИК-датчика отражательного типа, разместив их на расстоянии 30 см друг от друга.
ИК-датчик включает в себя ИК-светодиод (передатчик) и фототранзистор (приемник). Когда объект проходит между датчиками, свет отражается от объекта и падает на фототранзистор. Используется операционный усилитель IC (LM393), к которому подключен фототранзистор. Когда объект оказывается перед датчиком, он посылает логический сигнал HIGH в Arduino.
То есть, когда движущийся автомобиль достигает первого ИК-датчика, то он активируется. С этого момента запускается таймер, который будет продолжать отсчитывать время, пока автомобиль не достигнет второго ИК-датчика.
Подбирая расстояние между датчиками в пределах 5 метров можно рассчитать скорость, с которой автомобиль будет двигаться от первого датчика ко второму, так как время движения вам уже известно.
Используемая формула: Speed = distance / Time, где
- Speed — скорость,
- distance — расстояние между датчиками,
- Time — время измеренное модулем ардуино.
Все расчеты и сбор данных выполняются Arduino, а окончательный результат отображается на ЖК-модуле 16X2.
Используемые компоненты
КомпонентСпецификация
Количество
Где купить
Arduino | Nano Rev3.0 | 1 | Ссылка |
ИК-датчик | IR FC-51 | 2 | Ссылка |
LCD | 16X2 (1602A) | 1 | Ссылка |
Блок питания | 12 Вольт | 1 | |
Переключатель | SPST | 1 | Ссылка |
Потенциометр | 10 кОм | 1 | Ссылка |
Схема проекта
На следующем рисунке показана принципиальная электрическая схема проекта детектора скорости автомобиля.
Электрическая схема детектора скорости
В Arduino контакты D2 и D3 являются прерываниями, где D2 — int.0, а D3 — int.1. Выходные контакты ИК-датчиков подключены к этим контактам.
ЖК-дисплей подключен к выводам D4-D9 Arduino, где D4 подключен к RS, D5 подключен к E, а D6-D9 Arduino подключены к выводам D4-D7 ЖК-дисплея. Выводы 15 (A) и 16 (K) используются для подсветки ЖК-дисплея.
Потенциометр R1 используется для ручной настройки контраста дисплея через V0.
Описание контактов LCD модуля (1602A):
VSS | «-» Питание модуля |
VDD | «+» Питание модуля |
VO | Вывод управления контрастом дисплея |
RS | Выбор регистра |
RW | Выбор режима записи или чтения |
E | Разрешение обращений к индикатору |
DB0-DB7 | Биты интерфейса |
A | «+» Питание подсветки |
K | «-» Питание подсветки |
Программирование
В начале кода заголовочный файл объявляется с именем «LiquidCrystal.h», который используется для ЖК-дисплея. В следующей строке контакты LCD указаны в функции «LiquidCrystal lcd (4,5,6,7,8,9)». Здесь цифра в скобках показывает контакты Arduino, которые подключены к LCD.
- #include
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); - В строках 4 и 5 sensor1 и sensor2 объявлены как целые числа (integer) — это выводы Arduino, которые подключены к ИК-датчикам.
- int sensor1 = 2;
int sensor2 = 3;
После этого объявляются 4 целых числа с именем Time1, Time2, Time и flag. Где «Time1» — это измеренное время, когда «sensor1» активирован, а «Time2» — это измеренное время, когда «sensor2» активирован. Time — это разница между «Time1» и «Time2», которая эквивалентна времени, в течении которого автомобиль проезжал между «sensor1» и «sensor2» или «sensor2» и «sensor1».
int Time1;
int Time2;
int Time;
int flag = 0;
Затем мы объявляем целочисленную константу distance, которая является расстоянием между датчиками IR1 и IR2 в сантиметрах. Для примера я взял расстояние равным 30 см. Вы, конечно же, можете поменять на свое значение (лучше до 5 метров).
int distance = 30;
Далее переменная Speed, объявляется как число с плавающего запятой (тип float). И она используется для хранения скорости автомобиля.
float Speed;
При запуске «void setup ()» срабатывают 2 функции обработки внешних прерываний «attachInterrupt(0,fun1,RISING)» и «attachInterrupt(1,fun2,FALLING)». Например, «attachInterrupt(0,fun1,RISING», означает, что когда IR2 обнаружит падающую волну (int.0), то прерывание запустит функцию fun1.
ЖК-дисплей запускается с помощью функции «lcd.begin (16,2)». А очищается с помощью функции «lcd.clear ()». Сообщение на экране «SPEED MEASURMENT» печатается на с помощью функции «lcd.print».
void setup() {
attachInterrupt(0,fun1,RISING);
attachInterrupt(1,fun2,FALLING);
lcd.begin(16,2);
lcd.clear();
lcd.print(«SPEED MEASURMENT»);
}
void fun1() запускается, когда активирован «interrupt0 (int.0)». В этой функции текущее время измеряется с помощью «Time1 = millis ()».
Функция void fun2(), это тоже самое, что и «void fun1 ()», но запускается она, когда активируется «interrupt1 (int.1)».
void fun1()
{
Time1 = millis();
if (flag == 0) {flag = 1;}
else {flag = 0;}
}
void fun2()
{
Time2 = millis();
if (flag == 0) {flag = 1;}
else {flag = 0;}
}
В «void loop ()», время Time измеряется с помощью «Time1» и «Time2». «Time» должно быть положительным, поэтому дополнительно используется «if else». Но этот цикл выполняется, когда flag=0, поэтому используется условие «if». Если «Time1» и «Time2» равны, «Speed» будет нулевым.
В строке 47 проверяется if (Speed == 0). Если это условие верно, то на ЖК-дисплее печатается «… .OK….», что указывает на то, что система готова к использованию.
Строки 51 и ниже отвечают за отображение на ЖК-дисплее скорости движущегося объекта, после того, как «Time1» и «Time2» станут равными нулю.
void loop() {
if (flag == 0){
if (Time1 > Time2) {Time = Time1 — Time2; Speed = (distance*1000)/Time;}
else if (Time2 > Time1) {Time = Time2 — Time1; Speed = (distance*1000)/Time;}
else {Speed = 0;}
}
if (Speed == 0) {
lcd.setCursor(0, 1);
lcd.print(«…….OK…….»);
}
else {
lcd.setCursor(2, 1);
lcd.print(Speed);
lcd.print(» cm/sec»);
delay(10500);
Time1 = 0;
Time2 = 0;
}
}
Полный скетч проекта:
Детектор скорости движущегося объекта на Arduino
Демонстрация работы
На анимации ниже вы можете посмотреть демонстрацию работы проекта. Датчики расположены на расстоянии 30 см, а между ними моделируется движение ручкой. В данном случае, скорость движения ручки была зафиксирована на уровне 17 см/с.
Конечно, эту разработку можно перенести и на реальные условия — на дорогу, измерив скорость движения автомобиля.
Демонстрация работы проекта
Источник: https://www.asutpp.ru/detektor-skorosti-dvizhuschegosya-avtomobilya-na-arduino.html
Урок 29. Тахометр. Определяем скорость вращения при помощи датчика линии
Тахометр собранный с использованием датчика линии прост в подключении. Вам не нужно вносить конструктивные изменения в деталь, скорость вращения которой требуется измерить: сверлить отверстия, делать прорези, устанавливать дополнительные элементы и т.д. Достаточно нанести на неё контрастную линию (чёрную на светлой поверхности или белую на тёмной) и поднести датчик линии, Вы сразу получите точный результат, количество оборотов в минуту. Скетч не нуждается в корректировке, независимо от того, какого цвета будет линия.
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеку:
- Библиотека iarduino_4LED (для работы с четырёхразрядным LED индикатором).
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE.
Видео:
Схема подключения:
LED индикатор подключается к любым двум выводам Arduino (как цифровым, так и аналоговым), номера указываются в скетче. Датчик линии подключается к любому аналоговому входу, номер указывается в скетче.
В данном уроке, LED индикатор подключён к цифровым выводам 2 и 3, а датчик линии подключён к аналоговому входу A0.
Алгоритм работы:
- Вывод информации на LED индикатор осуществляется только в момент перехода датчика линии со светлого на тёмное поле.
- Первой строкой функции loop, проверяем не находится ли датчик линии на тёмном поле, если это так, то …
- Выводим количество оборотов в минуту на LED индикатор (если не зафиксировано переполнение millis) и сохраняем время перехода
- Выполняем цикл while до тех пор, пока датчик линии не покинет тёмное поле. Благодаря чему предыдущая операция выполняется только 1 раз, за всё время нахождения датчика на тёмном поле.
- Если датчик находится на тёмном или светлом поле, дольше 6 секунд, то выводим надпись «STOP» (эти строки можно убрать, если количество оборотов Вашего устройства ниже 10 в минуту).
Код программы:
#include // подключаем библиотеку для работы с четырёхразрядным LED индикатором
iarduino_4LED dispLED(2,3); // объявляем объект для работы с функциями библиотеки iarduino_4LED, с указанием выводов индикатора ( CLK , DIO )
const uint8_t pinLine = A0; // объявляем константу с указанием номера аналогового входа, к которому подключен датчик линии
uint32_t strLine = 0; // время перехода датчика со светлого на тёмное поле
void setup(){
dispLED.begin(); // инициируем LED индикатор
}
void loop(){
if(analogRead(pinLine)>400){ // если показания датчика линии больше 400 (тёмное поле)
if(strLine350){ // ждём пока датчик линии не выйдет из тёмного поля
if((millis()-strLine)>6000){dispLED.print(«STOP»);} // если датчик находится на тёмном поле дольше 6 секунд, то выводим на индикатор надпись «STOP»
}
} if((millis()-strLine)>6000){dispLED.print(«STOP»);} // если датчик находится на светлом поле дольше 6 секунд, то выводим на индикатор надпись «STOP»
}
скачать
Ссылки:
Источник: https://lesson.iarduino.ru/page/urok-29-tahometr-opredelyaem-skorost-vrascheniya-pri-pomoschi-datchika-linii/