Double Transducer: Heat to Air Speed

Ella's Final Implementation

Aidan's Final Implementation

Our Project -- Heat to Rotational Position to Air Speed

We used a thermisor, servo motor, IR proximity sensor, and fan to create our double transistor. We also made the project beach theme! This image shows a circuit composed of LCD screen, Arduino UNO, a protoboard, a solderless breadboard, a fan, and a power supply. There is a pink umbrella covering a servo motor and the whole circuit is mounted on a cardboard rectangle and has labels throughout it for the components as well as blue "waves". 

IMG_0179.MOV

Video of Our Project

This video shows a heat source (someone's hand) warming up the thermistor, which causes the servo to rotate the umbrella, which is sensed by the IR proximity sensor, which causes the fan power to increase. 

Simple Narrative Description: As the temperature gets higher, a mini umbrella moves and a fan turns on. A storyline to explain this could be if you are at the beach and the sun is making you too warm, you would like your umbrella to move to block the sun and your fan to turn on to cool you down. 

Discussion: 

This project has been a bit of a blur due to the short timeline and disjoint nature of our group, but it ultimately taught us a lot about techiniques such as soldering, breadboarding, and ideating. We had a group member become ill during the project and also added a person to the group approximately one class before the project was due, which caused a lack of ability to collaborate in-person on the project. Though we were unable to work together in the physical lab together, we did our best to communicate virtually via text and email to help each other through the circuits and technical aspects of the project, and had one 11pm last minute meet-up to share soldering skills in the lab. While timing, illness, and members being added at the last minute threw some major curveballs to the project, we persevered and did our best with the tools we were given. 

Skills that we learned through this project include how to solder using a protoboard, how to effectively breadboard, and how to ideate as a group and decide on the best path forward. Soldering skills threw a small curveball at us due to member illness, but we worked as a team to teach each other and ultimately we all got the hang of it and feel confident in our abilities to solder future projects, understanding the major do's and do-not's of this super useful prototyping skill. 

Skills in breadboarding are also super useful for prototyping (likely even more useful than soldering) as we quickly realized that being able to quickly and easily shift wires and components around was critical in individually building and testing each component of the project. We had some issues getting our IR proximity sensor to work, which ultimately was resolved by removing the extra potentiometer from the circuit, which we would have had a much harder time doing if we didn't have a solid grasp of breadboarding and also if we had already soldered it together. 

Effective ideation is another important skill that we learned -- we came up with the outlines of three ideas together, and then separetly worked on fleshing out each idea before coming back together to discuss our progress. From here, we discovered we had sort of created an "easy", "medium", and "hard" idea -- while we were tempted to go for the easy idea, we decided to challenge ourselves a little bit and go for the more medium-hard idea of using a servo motor and IR proximity sensor. Our easier idea of using light instead of rotational motion may have caused us fewer headaches down the line, but choosing to challenge ourselves a little more proved a better learning experience for the group. 

Easy steps in the project including wiring up the circuit for the thermistor, as it was already something we had done in class, as well as understanding the circuits for the IR sensor, servo motor, and DC motor (fan). Something that proved very challenging was the code for the servo motor -- no matter how much tweaking of values we did, the servo seemed to continually act slightly differently from day to day, which was really frustrating. This culminated in the servo working the morning of test day and then not working at all during the actual test -- we later discovered this was because the tip of the servo that holds the umbrella had been physically shifted in transit to the classroom. The servo acting funky throughout the process was definately the most frustrating and difficult part of the process. 

Creatively, we decided early on that given "heat" and "air speed" sounded like a perfect excuse to make our circuit beach themed. We achieved this by using blue napkins for waves and cocktail umbrellas for beach umbrellas. If given more time, we would have liked to experiment more with the umbrella and the IR proximity sensor and servo to try to find a more streamlined look and more consistent behaviour, but in all, we are proud of our creativity on this project. 

Next up, we are excited to keep learning the technical skills of prototyping and ideating to create more complex circuits as well as further our knowledge and experience in rapid prototyping and testing. We would like to make more time on future projects for the testing phase, which would mean starting physical prototyping sooner (and hopefully having more than one class period together to work). 

Progress Photo -- Pre-Solder

Building the circuit that would be soldered on a breadboard before putting it into a protoboard and solder to make sure that it works well in the system before making it permanent with the solder.  This image shows a solderless breadboard with a potentiometer, an IR proximity sensor, a resistor, and some wires. 

Progress Photo -- Soldering

This is the in-progress photo for the soldered IR proximity sensor. This was our implementation for the final version of this project. Not only was it an enriching skill to learn, but the project became easier to manage because of the separation of the breadboards. It also showed teamwork as some group members had prior experience, which led them to help others.

Progress Photo -- The Input

We decided to solder our thermistor to some breadboarding wire and rest it on an approximately 1 inch tall mount such that it could be easily moved up, down, in, or out to best accomodate the group before us on test day. This ended up working out super well -- we stretched it out to reach to their light bulb, which otherwise would not have aligned. 

Progress Photo -- Umbrella Time.

For a dash of creativity, we decided to decorate our project with a beach theme derived from our heat-to-fan relationship based prompt. We connected umbrellas to the servo motor, which acted as the information the input, the IR proximity sensor, read. In the end, we took it a step further and covered our projects in blue napkins as the "beach waves." Overall, this was a very enjoyable step that let us explore the project creatively!

Block Diagram

This diagram shows the information-flow relationships between the major components in our project for easy viewing and understanding. 

Electric Schematic

This diagram shows the electrical-flow relationships between the input, controller, and output. This is used to help understand the wiring.

Here is our code: 

#include <Servo.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>


// PROJECT TITLE

// Double Transducer: Heat to Air Speed


// Our project takes input from a thermistor 

// and drives a servo motor based on the temp

// read in from the thermistor. There is an IR 

// proximity sensor that drives a DC motor 

// powered fan depending on the IR sensor's input. 


// outside sources used:

// for IR sensor: https://courses.ideate.cmu.edu/60-223/f2023/tutorials/IR-proximity-sensor

// for LCD: https://courses.ideate.cmu.edu/60-223/f2023/tutorials/I2C-lcd 

// for DC motor: https://www.tutorialspoint.com/arduino/arduino_dc_motor.htm

// for thermistor: https://guides.ioref.org/parts/0270 


//pin mapping table:

// 5V & ground from Arduino to protoboard and/or solderless

// breadboard. Also uses a second 5V power supply 

// in order to have enough power to run DC

// motor and entire project -- all 5V should be 

// connected between Arduino, protoboard, and solderless

// breadboard, as well as all ground. 

// 

// A1 -- IR sensor

// A3 -- thermistor

// 5 -- servo

// 9 -- fan 


//make a servo object

Servo umbrellaMotor;


//make an lcd object

LiquidCrystal_I2C screen(0x27, 16, 2);


//receives from thermistor

const int THERMPIN = A3;

//sends to servo

const int SERVOPIN = 5;

//receives from ultrasonic ranger

const int IRPIN = A1;

// sends to fan DC motor

const int FANPIN = 9;

//sends to lcd screen

//const int LCDPIN = A0;


//lcd state and timer

const int LONGENOUGH = 250; // 4x/second

long timer = 0;

bool lcdState = LOW;


void setup() {

//servo

umbrellaMotor.attach(SERVOPIN);

pinMode(THERMPIN, INPUT);


//lcd

screen.init();

screen.backlight();


pinMode(IRPIN, INPUT);

pinMode(FANPIN, OUTPUT);


Serial.begin(9600);

}


void loop() {

// send servo position from thermistor values

int therm = analogRead(THERMPIN);

int servoPos = map(therm, 480, 520, 0, 150);

servoPos = constrain(servoPos, 0, 150);

umbrellaMotor.write(servoPos);


//dc motor

int inputRange = analogRead(IRPIN);

int fanSpeed = map(inputRange, 0, 550, 100, 2000);

fanSpeed = constrain(fanSpeed, 0, 255);

analogWrite(FANPIN, fanSpeed);


//lcd

if (millis() - timer >= LONGENOUGH) {

screen.home(); // go to first line, far right

screen.print("i:");

int thermLCD = map(therm,400,550,0,99);

thermLCD = constrain(thermLCD,0,99);

screen.print(thermLCD); //input sensor value


screen.setCursor(6, 0); // go to first line, middle

screen.print("m:");

int servoPosLCD = map(servoPos, 130,0,0,99);

screen.print(servoPosLCD); // middle step actuator


screen.setCursor(7, 1); // go to second line, middle

screen.print(inputRange); //IR pin value, middle step sensor

screen.setCursor(11, 1); // go to second line, end

screen.print("o:");

int fanSpeedLCD = map(fanSpeed,0,255,0,99);

screen.print(fanSpeedLCD); //fan speed, output actuator


Serial.println("ir reading: ");

Serial.print(inputRange);

Serial.println();

Serial.println("dc speed: ");

Serial.print(fanSpeed);

Serial.println();

Serial.println();


Serial.println("servo position: ");

Serial.print(servoPos);

Serial.println();

Serial.println();


Serial.println("thermistor: ");

Serial.print(therm);

Serial.println();

timer = millis();

}

}