User Tools

Site Tools


notes:c4eng:fall2022:projects:fso1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
notes:c4eng:fall2022:projects:fso1 [2022/11/16 22:12] – [DEMONSTRATION] mward14notes:c4eng:fall2022:projects:fso1 [2022/11/17 14:07] (current) – [DEMONSTRATION] cmille71
Line 13: Line 13:
 ====OVERVIEW==== ====OVERVIEW====
  
 +#include <wiringPi.h>
 +#include <stdio.h>
 +#include <sys/time.h>
 +#include <softTone.h>
 +#include <stdlib.h>
 +#include <math.h>
 +
 +#define rled    28
 +#define yled    27
 +#define buzzer  8
 +#define trigPin 4
 +#define echoPin 5
 +#define MAX_DISTANCE 220        // define the maximum measured distance
 +#define timeOut MAX_DISTANCE*60 // calculate timeout according to the maximum m$
 +#define gled     1
 +//function pulseIn: obtain pulse time of a pin
 +int pulseIn(int pin, int level, int timeout);
 +float getSonar(){   //get the measurement result of ultrasonic module with unit$
 +    long pingTime;
 +    float distance;
 +    digitalWrite(trigPin,HIGH); //send 10us high level to trigPin
 +    delayMicroseconds(10);
 +    digitalWrite(trigPin,LOW);
 +    pingTime = pulseIn(echoPin,HIGH,timeOut);   //read plus time of echoPin
 +    distance = (float)pingTime * 340.0 / 2.0 / 10000.0; //calculate distance wi$
 +    return distance;
 +}
 +
 +int main(){
 +    printf("Program is starting ... \n");
 +
 +    wiringPiSetup();
 +    softToneCreate (buzzer);
 +    float distance = 0;
 +    pinMode(trigPin,OUTPUT);
 +    pinMode(echoPin,INPUT);
 +    pinMode(gled, OUTPUT);
 +//    pinMode(buzzer, OUTPUT);
 +    while(1){
 +        distance = getSonar();
 +        printf("The distance is : %.2f cm\n",distance);
 +        softToneWrite(buzzer, 1000-distance*15);
 +        if (distance>=20)
 +        {
 +                digitalWrite(gled, HIGH);
 +        }
 +        else
 +        {
 +                digitalWrite(gled, LOW);
 +        }
 +        if (distance<20)
 +        {
 +                digitalWrite(yled, HIGH);
 +        }
 +        else
 +        {
 +                digitalWrite(yled, LOW);
 +        }
 +        if (distance<10)
 +        {
 +                digitalWrite(rled, HIGH);
 +                digitalWrite(yled, LOW);
 +        }
 +        else
 +        {
 +                digitalWrite(rled, LOW);
 +        }
 +
 +        delay(10);
 +    }
 +    return 1;
 +}
 +
 +int pulseIn(int pin, int level, int timeout)
 +{
 +   struct timeval tn, t0, t1;
 +   long micros;
 +   gettimeofday(&t0, NULL);
 +   micros = 0;
 +   while (digitalRead(pin) != level)
 +   {
 +      gettimeofday(&tn, NULL);
 +      if (tn.tv_sec > t0.tv_sec) micros = 1000000L; else micros = 0;
 +      micros += (tn.tv_usec - t0.tv_usec);
 +      if (micros > timeout) return 0;
 +   }
 +   gettimeofday(&t1, NULL);
 +   while (digitalRead(pin) == level)
 +   {
 +      gettimeofday(&tn, NULL);
 +      if (tn.tv_sec > t0.tv_sec) micros = 1000000L; else micros = 0;
 +      micros = micros + (tn.tv_usec - t0.tv_usec);
 +      if (micros > timeout) return 0;
 +   }
 +   if (tn.tv_sec > t1.tv_sec) micros = 1000000L; else micros = 0;
 +   micros = micros + (tn.tv_usec - t1.tv_usec);
 +   return micros;
 +}
 ====CIRCUIT==== ====CIRCUIT====
  
Line 202: Line 300:
  
 Seconds can be isolated by simply putting ''.second'' at the end of the variable name. so ''time.second'' will be the isolated second value. Seconds can be isolated by simply putting ''.second'' at the end of the variable name. so ''time.second'' will be the isolated second value.
-=====PROJECT 7=====+=====Proximity Sensor=====
  
 ====OVERVIEW==== ====OVERVIEW====
 +Basically my fso1 was a distance sensor with a buzzer and light system. As you get closer the buzzer gets higher pitched If distance>30cm the green light was on and the buzzer was off. If distance<30cm the yellow light turned on and the green light turned off. If distance<10cm the red light turned on and the yellow light turned off.
 ====CIRCUIT==== ====CIRCUIT====
 +{{:notes:c4eng:fall2022:projects:20221110_105850.jpg?400|}}
 ====DEMONSTRATION==== ====DEMONSTRATION====
 +{{ :notes:c4eng:fall2022:projects:20221116_224819_202914968439831.mp4 |}}
 =====PROJECT 8===== =====PROJECT 8=====
  
Line 244: Line 342:
  
  
-=====PROJECT 11=====+==========Model Rocket Thrust Vector Control (TVC)============
  
 ====OVERVIEW==== ====OVERVIEW====
 +In this project, I used the Adafruit Gy-521 and two Servos. These electronics were used for the goal of making sure that a model rocket is properly orientated during its flight and guaranteeing a nominal trajectory for it.
  
-====CIRCUIT====+The GY-521 is an accelerometer/gyroscope that will detect a change in the orientation of the craft as it is flying and will send a signal to the Arduino that the orientation of the craft is off. This will then send a signal to the servos that the orientation is off and needs to be fixed. Determining how much of a correction needs to be made is determined by a Proportional Integral Derivative (PID). A device that will automatically apply an accurate and responsive correction to a control function. This basically determines how fast/ intensely the servo responds to an error in the orientation of the device.
  
-====DEMONSTRATION==== 
  
 =====PROJECT 12===== =====PROJECT 12=====
notes/c4eng/fall2022/projects/fso1.1668636760.txt.gz · Last modified: 2022/11/16 22:12 by mward14