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

 

Умная мусорная корзина на основе Arduino

Автор: Mike(admin) от 5-06-2018, 02:55

Мусорная корзина или мусорное ведро является важной частью нашей жизни. Но проблема, которую мы должны решить – это открывание крышки. Из-за постоянно открытой крышки мухи и прочие насекомые садятся на мусор, а а потом они бродят по кухне или обеду. Это приводит к серьезной проблеме с санитарией. Но открывать каждый раз крышку для скидывания мусора не всегда удобно.


Умная мусорная корзина на основе Arduino

Поэтому можно автоматизировать открывание крышки мусорного ведра с использованием Arduino Uno. Этот умный девайс автоматически открывает свою крышку, когда над ним что-то (например, рука) появляется.


Схема интеллектуального мусорного ящика показана на приведенном ниже рисунке. Как известно, плата Arduino Uno состоит из микроконтроллера ATmega328 AVR, который является сердцем платы. Разработка сопровождается другими компонентами, такими как источник питания, ультразвуковой модуль HC-SR04 и сервомотор. Эхо-сигнал ультразвукового датчика и триггерная линия соединены с цифровым выводом D7 и D8 платы Arduino. Линия + Vcc подключается к питанию + 5 В, а контакт заземления GND подключается к заземляющему контакту платы arduino uno. Линия управления (ШИМ) сервомотора подключена к цифровому выводу D9 ардуино. Серводвигатель используется, чтобы открыть крышку мусорной корзины. Для этого проекта заданный уровень расстояния между крышкой и рукой с мусором установлен на 30 - 70 см.


Умная мусорная корзина на основе Arduino

Ультразвуковой датчик HC-SR04 используется для определения расстояния между корзиной и руками пользователя. Принцип нахождения расстояния от препятствия - это сонарная волна. Он обнаруживает препятствие, когда контакт триггера получает высокий импульс. Когда этот датчик проверяет наличие руки (препятствия), он начинает посылать восемь циклов ультразвукового всплеска на частоте 40 кГц, а затем ожидает отраженного ультразвукового сигнала. Поскольку мы знаем, что в ультразвуковом сенсорном модуле есть два барабана, где один предназначен для передачи ультразвукового импульса, а другой предназначен для приема ультразвукового сигнала. Как только препятствие обнаружено, эхо-сигнал модуля устанавливается в высокий логический уровень. Период ожидания отраженного импульса полностью зависит от местоположения препятствия. Когда сигнал эха получен, мы можем рассчитать расстояние, используя формулу: Расстояние (в см) = (продолжительность / 2) / 29,1.


Простейшая часть проекта умной мусорной корзины с использованием Arduino – часть программного обеспечения, потому что она проста и понятна. Программа проверки расстояния также использует встроенную библиотечную функцию «Servo.h» для работы сервопривода. Вы можете установить любое значение вращения двигателя, используя функцию «myServo.write (angle)», но здесь мы использовали только два состояния (1) нулевой градус открывания и (2) 180 градусов.



#define trigPin 12;    
#define echoPin 11;
#define servoPin 7;
 
Servo servo;
    
long duration, dist, average;   
int flag=0;   // флаг кнопки
long aver[3];   // массив для усреднения
 
void setup() {       
    servo.attach(servoPin);  
    pinMode(3,INPUT);  // кнопка подключается к D3
    pinMode(trigPin, OUTPUT);  // Назначить линию триггера как выход
    pinMode(echoPin, INPUT);  // Назначить линию эхо как вход
    servo.write(180);         // Открывать крышку при поступлении питания
} 
 
void measure() {  // для датчика расстояния
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(15);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
dist = (duration/2) / 29.1;    // получения расстояния
}
  
void loop() { 
 
if (digitalRead(3)==1 && flag==0) {     // если кнопка нажата
  servo.write(180);  // открыть крышку
  delay(1000);       // ждать 1 секунду для сервомотора
  flag=1;             // запоминаем, что крышка открыта
}
 
if (digitalRead(3)==0 && flag==1) { // если кнопка отпущена
  servo.write(3);    // закрыть крышку
  delay(1000);       // ждать 1 секунду для сервомотора
  flag=0;          // запоминаем, что крышка закрыта
}
  
if (flag==0) {
  for (int i=0;i<=2;i++) {   // для среднего значения расстояния
    measure();               
    aver[i]=dist;            
    delay(50);              // 50 мс задержка между измерениями
  }
  dist=(aver[0]+aver[1]+aver[2])/3;    // среднее значение расстояния по трем измерениям
} 
 
if (dist>10 && dist<30 && flag==0) {    // если рука на расстоянии от 10 до 30 см
  servo.write(180);  
  delay(10000);       // открыть крышку на 10 секунд
  servo.write(3);    
  delay(1000);      
}
 
if (dist>30 && dist<60 && flag==0) {    // если рука на расстоянии от 30 до 60 см
  servo.write(180);  
  delay(3000);       // открыть крышку на 3 секунды
  servo.write(3);    
  delay(1000);      
}
 
}



© digitrode.ru


Теги: Arduino




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

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

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