Projektet Frankenstein (1 / 5 steg)
Steg 1: Arduino kod:
/******************************************
SYFTE: Projektet Frankenstein
Skapad av Howard Kaplan
DATUM: 4.22.2015
Denna skiss används klassen HCSR04.h och HCSR04.cpp att få sensor input och butiker aktuella och tidigare distanserar använda följetong Monitor - distansera av det upptäckta objektet visas och beslutsamt som närmar sig eller upprullningskraften baserat på aktuella och tidigare avståndet. Ytterligare komponenter såsom lysdioder och servon som används och deras respektive stift är påslagen och off beroende på sensorn intervallvärden. Skissen använder också den Servo och campingtomter biblioteken.
*******************************************/
Libs
#include "HCSR04.h"//include kallar huvudet / klass fil
#include / / samtal servo lib-filer
MUSIK
#include "pitches.h"
Rad Sensor
#define echoPin 13 / / detta är echo PIN-koden för utbud sensor
#define triggerPin 12 / / detta är trigger PIN-koden för utbud sensor
HCSR04ProxSensor distanceSensor (echoPin, triggerPin), //here vi kallar konstruktören för att instansiera en sensor som heter "distanceSensor"
Musik matriser
int melodi [] = {
NOTE_A6, NOTE_C6, NOTE_E6, / / 3
NOTE_E6, NOTE_A6, / / 2
NOTE_C6, NOTE_E6, / / 2
NOTE_E6, NOTE_A6, / / 2
NOTE_C6, NOTE_E6, / / 2
NOTE_E6, NOTE_A6, NOTE_C6, / / 3
NOTE_E6, NOTE_G6, NOTE_B6, / / 3
NOTE_D6, / / 1
0,
NOTE_E6, NOTE_D6, NOTE_C6, NOTE_B6, / / 4
NOTE_A5, NOTE_A5 / / 1/23
};
Observera varaktigheter: 4 = fjärdedelsnot, 8 = åttondelen noterar, etc.:
int noteDurations [] = {
4,4,4,
8,4,
4,8,
4,8,
4,8,
4,4,4,
4,4,4,
1,
2,
8,8,8,8,
4,1,};
////
FLÄKT
int fan1 = 4; //Fan på stift 4
LED 2 stift - 4 lysdioder
int ledReds = 11. //2 röda
int ledGreens = 10; //2 grön
Servon 3
Servo servoEye, servoM; servoEye - har 2 servon till 1 stift (höger och vänster öga)
int posEye1 = 140; variabel att lagra servo position
//
int musicPin = 9;
int pauseBetweenNotes;
float avstånd;
Avstånd för att aktivera sensorn / slinga förändring
/***************************setup function****************************************************/
void setup() {
Serial.BEGIN (9600); //start seriell kommunikation
FLÄKT
pinMode(fan1,OUTPUT);
digitalWrite(fan1,LOW);
Servon
servoEye.attach(5); ögat
servoM.attach(3); mun
ställa in ögat startposition
servoEye.write(140);
Ställ in munnen
servoM.write(60);
Lysdioder
pinMode (ledReds, produktionen);
pinMode (ledGreens, produktionen);
}
/***************************main loop*********************************************************/
void loop() {
/******************SENSOR***************************************/
Serial.Print ("avståndet är:");
avståndet = distanceSensor.readSensor (); //here vi kallar "readSensor" metod för att bestämma avståndet
Serial.Print(Distance); / / skicka mätning till seriell bildskärmen
Serial.println ("cm");
om (distanceSensor.getLastValue() - avstånd > 1) {
Serial.println ("objektet närmar sig");
} //here vi kallar "getLastValue" metod för att bestämma riktningen av vinkar
om (distanceSensor.getLastValue() - avstånd < -1) {
Serial.println ("objekt upprullningskraften");
}
/ *** Huvudvillkoret uttalande *** /
FAN på / av
om (avstånd > = 40,00)
{
digitalWrite(fan1,LOW);
Lysdioder - Green ON Reds ut
digitalWrite (ledGreens, hög);
digitalWrite (ledReds, låg);
Servo ögon ser
servoEyesBacFor();
Servo munnen nära
servoM.write(50);
} annat {
digitalWrite(fan1,HIGH);
Lysdioder - grön OFF Reds på
digitalWrite (ledGreens, låg);
digitalWrite (ledReds, hög);
Servo sluta raka
servoEye.write(140);
Servo mun öppen
servoM.write(80);
Upprätta på Ritz
playMusic();
}
}
/*****************EYEs FUNCTION****************************************/
void servoEyesBacFor() {
för (posEye1 = 90; posEye1 < = 180, posEye1 + = 1) / / går från 0 grader till 180 grader
{
IF(distanceSensor.readSensor() < = 40,00) {
bryta;
}
i steg om 1 grad
servoEye.write(posEye1); berätta servo gå för att placera i variabel "pos"
Delay(5);
}
för (posEye1 = 180; posEye1 > = 90; posEye1-= 1) / / går från 180 grader till 0 grader
{
IF(distanceSensor.readSensor() < = 40,00) {
bryta;
}
servoEye.write(posEye1); berätta servo gå för att placera i variabel "pos"
Delay(5);
}
}
/***************************************/
void playMusic() {
för (int thisNote = 0; thisNote < 24; thisNote ++) {
Kontrollera avståndet och bryta sig ur loopen om utanför intervallet
IF(distanceSensor.readSensor() > = 40,00) {
thisNote = 0;
bryta;
}
int noteDuration = 1000/noteDurations [thisNote];
tonen (musicPin, melody[thisNote],noteDuration);
pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
noTone(musicPin);
}
}
/***********************The End!*************************/