Контроллер Arduino, УЗ-дальномер и сервомашинка — вот и всё, что понадобится для повторения подобной конструкции.
Скетч для Arduino (robo_trashcan.ino)
/* Created 2016 by AlexGyver AlexGyver Home Labs Inc. */ #include <Servo.h> //servo library Servo servo; int trigPin = 6; int echoPin = 7; long duration, dist, average; int flag=0; //button flag long aver[3]; //array for average void setup() { servo.attach(5); pinMode(3,INPUT); //button on D3 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); servo.write(180); //open cap on power on } void measure() { //here is for range sensor 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; //obtain distance } void loop() { if (digitalRead(3)==1 && flag==0) { //if button pressed servo.write(180); //open the cap delay(1000); //wait for servo flag=1; //button pressed } if (digitalRead(3)==0 && flag==1) { //if button unpressed servo.write(3); //close the cap delay(1000); //wait for servo flag=0; } if (flag==0) { for (int i=0;i<=2;i++) { //average distance measure(); aver[i]=dist; delay(50); //delay between measurements } dist=(aver[0]+aver[1]+aver[2])/3; //average distance by 3 measurements } if (dist>10 && dist<30 && flag==0) { //if hand on the distance 10...30 cm servo.write(180); delay(10000); //wait 10 seconds servo.write(3); delay(1000); } if (dist>30 && dist<60 && flag==0) { //if hand on the distance 30...60 cm servo.write(180); delay(2500); //wait 2.5 seconds servo.write(3); delay(1000); } }
далее: Оптимизация работы роботизированной мусорки для работы от батареи
Ссылки
Robotized Trashcan
По теме
Роботизированный мусорный бак и реакция людей
Радиоуправляемый логотип Android-а из бачка для мусора
Arduino
Ардуино что это и зачем?
Arduino, термины, начало работы
Разновидности плат Arduino, а также про клоны, оригиналы и совместимость
КМБ для начинающих ардуинщиков