цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Автоматический стеклоочиститель для автомобиля на основе Arduino и датчика дождя своими руками

Автоматический стеклоочиститель для автомобиля на основе Arduino и датчика дождя своими руками

Автор: Mike(admin) от 9-03-2018, 16:05

Проект автоматического стеклоочистителя представляет собой автоматическую систему активации дворников автомобиля, которая контролирует интенсивность осадков и соответственно контролирует частоту работы стеклоочистителя.


Автоматический стеклоочиститель для автомобиля на основе Arduino и датчика дождя своими руками

По данным ВОЗ, ежегодно из-за дорожно-транспортных происшествий и главным образом в дождливые сезоны погибает более 1.25 миллиона человек в год. Люди умирают из-за небольших ошибок. Но можно уменьшить это число, оснастив машину автоматической системой очистки стекол.


Проект в основном нацелен на автомобильное применение. Он основан на микроконтроллерной плате Arduino UNO и датчике дождя, предназначенном для измерения интенсивность осадков. В зависимости от данных, собранных от модуля датчика дождя, активируется сервомотор для управления движениями стеклоочистителя. Пользователю также предоставляется информация о количестве осадков с помощью ЖК-модуля, включенного в проект. Сервомотор управляется сигналом ШИМ, и его скорость изменяется контроллером. Схема подключения всех элементов системы автоматического стеклоочистителя показана ниже.


Автоматический стеклоочиститель для автомобиля на основе Arduino и датчика дождя своими руками

Модуль датчика дождя, который мы используем для этого конкретного проекта, представляет собой детектор MH-RD. Этот модуль содержит 4 контакта: Vcc, A0, D0 и Gnd. Два вывода Vcc и Gnd этого модуля сопряжены с выводами питания модуля Arduino. Из двух оставшихся выводов модуля A0 обеспечивает аналоговый выход, а к D0 обеспечивается цифровой выход. Но в нашем случае, нам необходимо лишь контролировать изменение интенсивности осадков, поэтому мы игнорируем цифровой вывод D0 и подключаем аналоговый выход модуля к одному из аналоговых входных контактов платы Arduino Uno.


Для управления движением стеклоочистителя установлен серводвигатель. Сервомотор принимает соответствующий выходной сигнал ШИМ, который отвечает за регулировку положения своего вала до желаемой позиции. Контакт от серводвигателя подключается к цифровому контакту 9, который является одним из выводов ШИМ платы Arduino UNO. ЖК-дисплей 16x2 JHD162A выполняет задачу отображения интенсивности осадков на экране. Этот ЖК-дисплей основан на драйвере HD44780 от Hitachi. На ЖК-дисплее есть два режима работы; 4-битный режим и 8-битный режим. Для этого проекта мы будем использовать 4-битный режим. Интерфейс платы Arduino Uno и LCD значительно упрощается благодаря использованию встроенного файла библиотеки LiquidCrystal.h. Выводы Arduino 13, GND и 10 соответствуют контрольным выводам ЖК-дисплея: RS, RW и En соответственно. Аналогично, контакты Arduino 7,6,5 и 4 связаны с выводами данных D4-D7 на ЖК-дисплее.


Первоначально, когда устройство активируется, стеклоочиститель переходит в нулевое положение благодаря сервомотору. Контроллер продолжает отслеживать сигнал, полученный от модуля детектора дождя. Когда модуль дождя регистрирует осадки, контроллер проверяет, пересекает ли этот сигнал пороговое значение, заданное в устройстве. Как только это произойдет, контроллер запускает сервомотор, который начинает работать. Интенсивность ШИМ-сигнала определяет скорость серводвигателя. А интенсивность осадков постоянно отображается на ЖК-дисплее.


Далее представлен код (скетч) для Arduino.


#include <LiquidCrystal.h>
#include <Servo.h>

LiquidCrystal lcd(11,10,7,6,5,4);
Servo myservo; 

int InInPositionition = 0; 
int SensorValue = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  myservo.attach(9);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Automatic Auto."); 
  lcd.setCursor(0,1);
  lcd.print("Wiper System");
  delay(3000); 
  lcd.clear();
  lcd.setCursor(5,0);
  lcd.print("Rain fall");
  lcd.setCursor(0,1);
  lcd.print("Intensity-");
}

void wipe(int Speed)
{

  if(Speed>400){Speed=5000;lcd.print("  LOW ");}
  if(Speed>350&&Speed<=400){Speed=3000;lcd.print("MEDIUM");}
  if(Speed<=350){Speed=500;lcd.print(" HIGH ");}
  for (InPosition = 180; InPosition >= 0; InPosition--) {
    myservo.write(InPosition);            
    delay(3);                    
  }
  for (InPosition = 0; InPosition <= 180; InPosition++) { 
    myservo.write(InPosition);             
    delay(3);                       
  }
  delay(Speed);
}

void loop() 
{
lcd.setCursor(10,1);
SensorValue = analogRead(A0);
Serial.println(SensorValue);
if(SensorValue>600){myservo.write(180);lcd.print(" NIL  ");delay(1000);}
if(SensorValue<=600){lcd.setCursor(10,1);wipe(SensorValue);}
}



Теги: Arduino, авто




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий