Introduction: ULTRASONIC FAN
Made by KCIS Grade 9 Brian Hou J05438
"Smart fan"
Supplies
- Arduino Leonardo
- breadboard
- jumper wires
- ultrasonic sensor
- servo motor
- DC motor
- plastic fan
- container
- cork
Step 1: INTRO
Instead of blowing with no purpose, this fan blows when it senses something or someone before blowing
Step 2: STEPS:
- gather the materials
- servo motor to Dpin #3
- ultrasonic sensor: Trig to Apin #5, Echo to Apin #4
- connect L298n to Arduino Board
- connect DC motor to L298n
- reset the servo motor to 0 degrees
- glue the cork to the servo motor
- glue the ultrasonic to the cork facing 0 degrees
- glue the DC motor on to the cork, also pointing at 0 degrees
- put the following code in:
//to use servo motor #include <Servo.h> //ultrasonic pins int Echo = A4; int Trig = A5; //setup servo motor to "Servo1" Servo Servo1; //servo to number 3 int servoPin = 3; //sensor to number 2 int Sensor_pin = 2; //set angle to 0 degrees int angle = 0; int angle_step = 6; int Distance_test()//set up the ultrasonic sensor { digitalWrite(Trig, LOW); delayMicroseconds(2); digitalWrite(Trig, HIGH); delayMicroseconds(20); digitalWrite(Trig, LOW); float Fdistance = pulseIn(Echo, HIGH); Fdistance = Fdistance / 29 / 2; return (int)Fdistance; } void setup() { pinMode(Sensor_pin, INPUT);//set up servo motor Servo1.attach(servoPin); Servo1.write(0); delay(2000); pinMode(Echo, INPUT); pinMode(Trig, OUTPUT); Serial.begin(9600); pinMode(8, OUTPUT); pinMode(7, OUTPUT); pinMode(6, OUTPUT); Serial.begin(9600); angle = 0; Servo1.write(angle); } void loop()//non stop loop { Servo1.write(0);//reset servo Servo1.write(10);//servo to 10 degrees delay(200);//delay(wait) 200 millisecends Servo1.write(0);//reset servo delay(500);//delay(wait) 500 millisecends angle = 0; for (int i = 0; i <= 180; i += angle_step) { Servo1.write(i); delay(200); int dis = Distance_test(); Serial.println(dis); if (dis < 20) { angle = i; Serial.println(angle); break; } } //spin motor if (angle > 0) { Servo1.write(angle); digitalWrite(7, 1); digitalWrite(6, 0); delay(10000); digitalWrite(7, 0); delay(2000); } // go back home for (int i = angle; i >= 0; i -= 5) { Servo1.write(i); delay(100); } delay(5000); angle = 0; }
Step 3: TRIAL and ERROR
Originally, I was going to use the passive infrared sensor(PIR) to control the DC motor, but after using it, I found out a huge problem...The PIR was a 180 degrees sensor which can only be used digitally instead of analogically. Which means that, instead of telling you how far or where the object is, it can only tell you whether if there is movement going on within its 180 degrees radius. After hundreds and thousands of times of experimenting, I finally decided that the PIR was not effective enough for this project, so I came to the conclusion that the ultrasonic sensor would be better to use.