Motoriserade, ljud reagerar Star Wars på St Bandai modell, med Arduino. (9 / 12 steg)

Steg 9: Programmet Arduino

Programmet

Dags för att programmera vårt Arduino, måste du ansluta den till en USB-porten på din pc, och sedan öppna EDI och ladda upp skissen nedan.

Om denna kod som jag gjort kan jag säga:

  • Det använder Millis och inte förseningar att göra sitt jobb
  • Den har 3 lägen:
    • "Scan": det är när maskinen är som skanning miljön går långsamt huvudet vänster och höger.
    • "AfraidSx": det är när ett ljud har upptäckts på vänster. Maskinen visar till vänster, och slumpmässigt flyttar en det är huvud räkna ut om det finns något att skjuta på.
    • "AfraidDx": samma som ovan, men till höger.
  • Sund upptäckt utlöser en av dessa transportmedel

  • "Upptäcka buller" (den svåraste delen) är alltid igång och dess syfte är att göra åtskillnad mellan mellan samtal och buller. Innan detta introducerades, något utlöste huvud rotation och var inte mycket cool.

#include < br >

Servo servo;

int center = 115;
int limitsx = 85.
int limitdx = 145;
int beteende = 1; setta behaviuour iniziale
int pos = 85.
int riktning = 1;
byte endingAfraid = 0;

Knock
CONST int gaspedalsignal = 5; piezo är ansluten till analoga stift 0
CONST int tröskel = 100; tröskelvärde som beslutar när upptäckta ljudet är en knock eller inte
int sensorReading = 0;
osignerade långa millisAtKnockDx = 0;

slå sx
CONST int knockSensor2 = 3; piezo är ansluten till analoga stift 0
CONST int tröskel = 100; tröskelvärde som beslutar när upptäckta ljudet är en knock eller inte
int sensorReading2 = 0;
osignerade långa millisAtKnockSx = 0;

Verboselog
CONST int VelocityCiclo1 = 1000;
int CountCiclo1 = 0;
osignerade långa previousMillis1;

afraiddx
CONST int StartVelocityCiclo2 = 100;
CONST int EndVelocityCiclo2 = 500.
int CountCiclo2 = 0;
osignerade långa previousMillis2;
byte servoSweep2 = 0;

afraidsx
CONST int StartVelocityCiclo4 = 100;
CONST int EndVelocityCiclo4 = 500.
int CountCiclo4 = 0;
osignerade långa previousMillis4;
byte servoSweep4 = 0;

ledloop
CONST int VelocityCiclo5 = 200.
int CountCiclo5 = 0;
osignerade långa previousMillis5;
byte servoSweep5 = 0;

Scan
CONST int VelocityCiclo3 = 130;
int CountCiclo3 = 0;
osignerade långa previousMillis3;
int pos3 = 0;

DetectnOise
int KnockDetected = 0;
int PreviousKnockDetected = 0;
CONST int VelocityCiclo6 = 500. lentezza del ciclo di upptäcka rumore
int CountCiclo6 = 0;
osignerade långa previousMillis6;
int NoiseTresh = 2; Soglia. abbassare per rendere meno sensibile al casino. se ho eller 3 slå 1000 MSEK allora non è un tirgeer...
int NoiseDetected = 0;

DDelayUscita da buller
CONST int VelocityCiclo7 = 1000; lentezza de la quale tornare alla normalità...
int CountCiclo7 = 0;
osignerade långa previousMillis7;

void setup() {
servo.attach(6);
Serial.BEGIN(9600); initiera seriell kommunikation 4 debug
pinMode (ControlSwitch, indata); //
pinMode (Led5, OUTPUT);
pos3 = limitsx;

//IntLed----------------------
ledde
pinMode (12, OUTPUT);
pinMode (11, OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
pinMode (8, OUTPUT);
pinMode (7, OUTPUT);
//IntLed----------------------

}

void loop() {

Växla (beteende) {
fall 1:
Scan();
AfraidFr();
bryta;

fall 2:
om ((millis() < = millisAtKnockDx)) {/ / cicli dopo jag quali tornare i scan
AfraidDx();
}
annat {
Riktning = 0;
Beteende = 1;
endingAfraid = 1;
}
bryta;

fall 3:
om ((millis() < = millisAtKnockSx)) {/ / cicli dopo jag quali tornare i scan
AfraidSx();
}
annat {
Riktning = 1;
Beteende = 1;
endingAfraid = 1;
}
bryta;
}

KnockTriggerDx();
KnockTriggerSx();
VerboseLog();
DetectNoise();

digitalWrite 12, hög.
digitalWrite (11, hög).
digitalWrite 10, hög.
digitalWrite (9, hög).
digitalWrite 8, hög.
digitalWrite (7, hög).
}

void KnockTriggerDx() {
Läs sensorn och lagrar det i variabeln sensorReading:
sensorReading = digitalRead(knockSensor);
om sensorn läsningen är större än tröskelvärdet:
om (sensorReading == 1) {
Växla status för ledPin:
Serial.println ("Knock DX!");
KnockDetected ++; setetför att per riconoscere parlato.
millisAtKnockDx = millis() + random(3000,10000); azzero counter rädd dx
om (NoiseDetected == 0) {
Beteende = 2; Vado i rädd dx
}
Delay(200);

}
}

void KnockTriggerSx() {
Läs sensorn och lagrar det i variabeln sensorReading:
sensorReading2 = digitalRead(knockSensor2);
om sensorn läsningen är större än tröskelvärdet:
om (sensorReading2 == 1) {
Växla status för ledPin:
Serial.println ("Knock SX!");
KnockDetected ++; setetför att per riconoscere parlato.
millisAtKnockSx = millis() + random(3000,10000); azzero counter rädd dx
om (NoiseDetected == 0) {
Beteende = 3; Vado i rädd sx
}
Delay(200);
}
}

void AfraidDx() {
om (millis() > = previousMillis2) {
CountCiclo2 ++;
previousMillis2 = previousMillis2+random(StartVelocityCiclo2,EndVelocityCiclo2); varje fall blir 100ms
servoSweep2 = random(1,4); seleziona caso slumpmässiga tra 1 e 3
/ * om (servoSweep == 7) {//cicla tutti jag casi
servoSweep = 1;
}*/
}
växel (servoSweep2) {
fall 1:
POS = limitdx-3;
servo.write(POS);
bryta;
fall 2:
POS = limitdx-6;
servo.write(POS);
bryta;
fall 3:
POS = limitdx;
servo.write(POS);
bryta;
} / / end av svep
}

void AfraidSx() {
om (millis() > = previousMillis4) {
CountCiclo4 ++;
previousMillis4 = previousMillis4+random(StartVelocityCiclo4,EndVelocityCiclo4); varje fall blir 100ms
servoSweep4 = random(1,4); seleziona caso slumpmässiga tra 1 e 3
/ * om (servoSweep == 7) {//cicla tutti jag casi
servoSweep = 1;
}*/
}
växel (servoSweep4) {
fall 1:
POS = limitsx + 3.
servo.write(POS);
bryta;
fall 2:
POS = limitsx + 6.
servo.write(POS);
bryta;
fall 3:
POS = limitsx;
servo.write(POS);
bryta;
} / / end av svep
}

void LedLoop() {

}

void Scan() {

om (millis() > = previousMillis3) {
om (endingAfraid == 1) {//se till uscendao da rädd resetto la pos per fluidità
endingAfraid = 0;
om (riktning == 0) {
previousMillis3 = previousMillis2;
pos3 = limitdx - 6.
}
annat {
previousMillis3 = previousMillis4;
pos3 = limitsx + 6.
}
}
CountCiclo3 ++;
debug / / Serial.println(pos3);
previousMillis3 = previousMillis3 + VelocityCiclo3;

om (riktning % 2) {//se Odd (da basso en alto) (da gräns sx en gräns dx)
IF(pos3 < limitdx) {
pos3 ++;
servo.write(pos3);
}
annat {
Riktning ++; se ho raggiunto il limite aumenta di 1 direzione, invertendola
}
}
annat //se pari
IF(pos3 > limitsx) {
pos3--;
servo.write(pos3);
}
annat {
Riktning ++; se ho raggiunto il limite aumenta di 1 direzione, invertendola
}

}
}

void DetectNoise()
{
om (millis() > = previousMillis6) {
CountCiclo6 ++;
se dopo un po di tempo/VelocityCiclo6)...
previousMillis6 = previousMillis6 + VelocityCiclo6;
Ho accumulato troppi knokkeddx ed sx...

om (PreviousKnockDetected < = KnockDetected) {/ / per capirlo sottracco quelli di ora - quelli föregående ciclo (lento) se > x sono i buller...
PreviousKnockDetected = KnockDetected + NoiseTresh; Azzer... NoiseTresh = soglia che vado en aggiugnere...
Serial.println();
Serial.println("!!! brus upptäckt! Chi parla???"); triggero logg
Serial.println();

Beteende = 1; e vado i modalità idonea...

NoiseDetected = 1; QS variabile impedisce ad altri knoc di cambiare beteende x un po'...
previousMillis7 = previousMillis6 + VelocityCiclo7; setetför att dalay per rientro varaibile NoiseDetected

} annat {
om (millis() > = previousMillis7) {//dopo xx ulteirori millisecondi...
CountCiclo7 ++;
NoiseDetected = 0; Vado via dastato di noisedetected...
}
}
PreviousKnockDetected = KnockDetected + NoiseTresh;
debug / / Serial.print ("utlösa rilevati i unità di tempo =");
debug / / Serial.println(PreviousKnockDetected-KnockDetected);
}
}

void VerboseLog()
{
om (millis() > = previousMillis1) {
CountCiclo1 ++;
previousMillis1 = previousMillis1 + VelocityCiclo1; varje fall blir 100ms

kul Verboselog
Serial.Print("| CountCiclo1 = ");
Serial.Print(CountCiclo1);

Serial.Print("| knockDX = ");
Serial.Print(millisAtKnockDx);

Serial.Print ("PreviousKnocKDetected =");
Serial.Print(PreviousKnockDetected);

Serial.Print ("KnocKDetected =");
Serial.Print(KnockDetected);

Serial.Print ("NoiseDetectedStatus =");
Serial.Print(NoiseDetected);

Serial.println("End");

}

}

Se Steg
Relaterade Ämnen

Star Wars AT-AT walker modell

Hej, jag heter Jeroen och jag är en amatör modell maker. Jag gör modeller (mestadels arbetar)från bilder och mestadels av trä. Jag arbetar för närvarande på en Trebuchet jag göra detta i mitt garage. Men eftersom det är ganska kallt här ville jag bör...

Star Wars ons Tredwell Droid

i denna fina Instructable jag kommer att visa hur man gör en star wars fullskaliga Tredwell droid "från star wars. bygget är måttligt svårt och är en lång bygga och är också en R/C om du väljer det är.Tredwell droid var en stötta i star wars episod 4...

DIY Star Wars Millennium Falcon Cockpit Playhouse

Innan jag börjar detta mycket lång Instructable, vill jag nämna att om du gillar detta projekt, jag skulle uppskatta dina gillar och röster. Tack för att vara så stöttande!Mina barn älskar Star Wars, och ganska mycket varje dag de sluta gå runt huset...

Star wars R2-D2 xbox 360

Videon här:Star Wars R2-D2 Xbox 360 med projektorDetta är en en av ett slag star wars r2d2 xbox 360 med projektor och aux-ingångar. Specialbyggda av mig... Mark Bongo ägare av Major League Mods. för din gratis E-bok på hur 2 mod xbox......

Rahsia Star Wars flexibla svärd

Kära läsare/fans,Detta speciella Star Wars flexibla svärd bara med billiga lysdiodsrand. Du kan få det från DIY, återvinn center och trash(free) för om mindre än USD5. Förhoppningsvis kan du njuta av "kopiera och klistra in" det och video ingår....

Anpassningsbara motoriserade Tree Topper med Star Wars stil

detta Instructable visar dig hur man gör en motoriserad tree topper för din julgran. Jag gjorde detta som en överraskning tidigt julklapp för min fru så hon kunde njuta av det genom större delen av December. Detta är något som kan anpassas till en st...

K'NEX motoriserade gå AT-TE från Star Wars

I denna kompatibel kommer att jag visa dig hur man bygger en K'NEX promenader alla terräng taktiska Enforcer (även känd som AT-TE), från Star Wars-filmer och Clone Wars-serien. Modellen är helt motoriserade och kan gå över flera terräng såsom: Vinyl...

Multi-Functional Star Wars Astromech Droid

E4-B4Astromechdroid för hemmet.Videolänkar för mobila enheter som inte kommer att spela video bilderna ovan:Tillverkningen av E4-B4 Astromech Droid VideoE4-B4: Showcase Video, en del 1E4-B4: Rocket Man VideoE4-B4: Sugen på en Drink?E4-B4: Dome viftar...

Jedi Nagai Sentinel: DIY Star Wars Cosplay

Välkommen alla och till min snabb "Gör det själv" Star Wars Cosplay tutorial!Som en ivrig Star Wars fan var jag övertygad om att fylla en Jedi dräkt/Cosplay före frisläppandet av den Star Wars: The Force vaknar film. Eftersom jag ville skapa en...

Fullskalig mouse droid från star wars

Jag älskar star wars och har alltid älskat bygga saker från filmen franchise. Jag har min egen Stormtrooper armour, efter att ha besökt en star wars dag på vår lokala science center bestämde jag mig för jag ville göra en Droid från filmen.R2D2 var mi...

Star Wars på Ingångsnivå Droid "Mouse Droid"

i denna fina Instructable jag kommer att visa hur man gör en star wars halv skala på Ingångsnivå Droid eller "mouse droid" från star wars. bygget är kreativt snabbt och billigt (runt $40).Första: avmarkera ett område för ditt arbete. du behöver...

Skapa animerade Star Wars öppna titlar!

Hej allaI några dagar, kommer den nya Star Wars-filmen att släppas. Jag ville göra något för detta. Jag fick idén att använda min favorit 3D-rendering programvara för att skapa något som jag kunde dela här.I detta Instructable, jag ska visa dig hur d...

Star Wars Sith Acolyte fin kostym

För att börja saker, vet jag det inte är normalt att vilja klä upp som en hotfull figur i spandex och skum pansar. Detta inlägg är för dem som driva igenom normalitet på jakt efter en massa galna roliga. Så här går du!--------------------------------...

BB8 byggde med Lego Star Wars delar... Och ändå moves i slutet av denna handledning

Jag har skickat in denna modell till Lego idéerhttps://Ideas.LEGO.com/projects/127584Om du gillar denna Lego version av BB8, rösta för det här projektet.Logga in med kontot sociala medieroch rösta för det.Tack själv en miljonen!Jag såg "Ett nytt hopp...

Mask av Darth Nihilus - Star Wars

"Han är ett sår i kraft, mer närvaro än kött, och i sitt vakna liv dör... att offra sig själv till hans hunger." ―Visas MarrEn annan mer lätt igenkännliga Sith-Lords av Star Wars franchise är Darth Nihilus, och jag ville ha hans mask (för mig oc...

Ahsoka Tano dräkt från Star Wars, Clone Wars

Min dotter ville verkligen vara Ahsoka Tano från Star wars, clone wars, för Halloween. För att få en uppfattning jag tittade runt på Instructables webbplats och hittade en Instructable här på hur man gör ett Togruta pannsmycke. Som författare kom upp...

Rey (Star Wars: The Force vaknar) gratis serietidning dag 2016

Hälsningar en gång Instructable-keteers!Som vanligt, jag är sömnbrist och över koffeinhaltiga igen när jag sitter ner för att skriva upp en annan kostym äventyr.I början var det en komisk butikJag vet jag har tidigare nämnt att jag har en vän (s) som...

Star Wars termisk Detonator 3d tryckt

Den mäktiga Jabba frågar varför han måste betala 50 000.Eftersom han håller en termisk detonator!Med Star Wars dagen närmar sig snabbt kändes det var endast lämpligt att mitt nästa projekt var en Star Wars en. Har redan gjort en ljussabel, tänkte jag...

Star Wars Shoptrooper Neopixel Birkin väska

För alla prinsessor i galaxen...Här är den heliga Graalen av handväskor... ok, den här off är en knockoff av något slag men jag kan garantera dig detta är enda i lager i det kända universumet.Lyser upp i Delicious Darth hallon, ljus sidan Cyan, Purpl...