Gemotoriseerd, geluid reageren Star Wars At-St Bandai Model, met Arduino. (9 / 12 stap)

Stap 9: Programma Arduino

Programma

Tijd voor onze Arduino program, hebt u het verbinden met een USB-poort van uw pc, dan openen de EDI en uploaden van de schets hieronder.

Over deze code die ik heb gemaakt kan ik zeggen:

  • het maakt gebruik van Millis en geen vertragingen zijn werk te doen
  • Het heeft 3 modi:
    • "Scannen": het is wanneer de machine is zoals het scannen van het milieu langzaam haar hoofd links en rechts.
    • "AfraidSx": het is wanneer een geluid wordt ontdekt aan de linkerkant. De machine draait naar links, en beweegt willekeurig een it is hoofd uitzoeken als er iets om te schieten is op.
    • "AfraidDx": hetzelfde als hierboven, maar aan de rechterkant.
  • Geluid detectie zal leiden tot een van de bovenstaande modi

  • "Detecteren lawaai" (het moeilijkste deel) is altijd actief en het doel ervan is om te onderscheiden tussen aanroepen en lawaai. Voordat dit werd ingevoerd, iets geactiveerd de hoofd rotatie en was niet erg cool.
  •  #include <br> 
     Servo servo; 
     int center = 115; int limitsx = 85; int limitdx = 145; int Behaviour = 1; //setta behaviuour iniziale int pos = 85; int Direction=1; byte endingAfraid = 0; 
     //knock const int knockSensor = 5; // the piezo is connected to analog pin 0 //const int threshold = 100; // threshold value to decide when the detected sound is a knock or not int sensorReading = 0; unsigned long millisAtKnockDx = 0; 
     //knock sx const int knockSensor2 = 3; // the piezo is connected to analog pin 0 //const int threshold = 100; // threshold value to decide when the detected sound is a knock or not int sensorReading2 = 0; unsigned long millisAtKnockSx = 0; 
     //verboselog const int VelocityCiclo1 = 1000; int CountCiclo1 = 0; unsigned long previousMillis1; 
     //afraiddx const int StartVelocityCiclo2 = 100; const int EndVelocityCiclo2 = 500; int CountCiclo2 = 0; unsigned long previousMillis2; byte servoSweep2 = 0; 
     //afraidsx const int StartVelocityCiclo4 = 100; const int EndVelocityCiclo4 = 500; int CountCiclo4 = 0; unsigned long previousMillis4; byte servoSweep4 = 0; 
     //ledloop const int VelocityCiclo5 = 200; int CountCiclo5 = 0; unsigned long previousMillis5; byte servoSweep5 = 0; 
     //scan const int VelocityCiclo3 = 130; int CountCiclo3 = 0; unsigned long previousMillis3; int pos3 = 0; 
     //DetectnOise int KnockDetected = 0; int PreviousKnockDetected = 0; const int VelocityCiclo6 = 500; //lentezza del ciclo di detect rumore int CountCiclo6 = 0; unsigned long previousMillis6; int NoiseTresh = 2; //soglia. abbassare per rendere meno sensibile al casino. se ho almeno 3 knock in 1000 msec allora non è un tirgeer.... int NoiseDetected = 0; 
     //DDelayUscita da noise const int VelocityCiclo7 = 1000; //lentezza dolp la quale tornare alla normalità... int CountCiclo7 = 0; unsigned long previousMillis7; 
     void setup(){ servo.attach(6); Serial.begin(9600); // initialize the serial communications 4 debug //pinMode(ControlSwitch, INPUT); // //pinMode(Led5, OUTPUT); pos3 = limitsx; 
     //IntLed---------------------- //led pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(7, OUTPUT); //IntLed---------------------- } 
     void loop(){ 
     switch (Behaviour){ case 1: Scan(); //AfraidFr(); break; 
     case 2: if ((millis() <= millisAtKnockDx)) { // cicli dopo i quali tornare in scan AfraidDx(); } else { Direction=0; Behaviour = 1; endingAfraid = 1; } break; 
     case 3: if ((millis() <= millisAtKnockSx)) { // cicli dopo i quali tornare in scan AfraidSx(); } else { Direction=1; Behaviour = 1; endingAfraid = 1; } break; } 
     KnockTriggerDx(); KnockTriggerSx(); VerboseLog(); DetectNoise(); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); digitalWrite(9, HIGH); digitalWrite(8, HIGH); digitalWrite(7, HIGH); } 
     void KnockTriggerDx() { // read the sensor and store it in the variable sensorReading: sensorReading = digitalRead(knockSensor); // if the sensor reading is greater than the threshold: if (sensorReading == 1) { // toggle the status of the ledPin: Serial.println("Knock DX !!!!!!!!!!!"); KnockDetected++; // setto per riconoscere parlato. millisAtKnockDx = millis() + random(3000,10000); // azzero counter afraid dx if (NoiseDetected == 0){ Behaviour = 2; //vado in afraid dx } delay(200); 
     } } 
    VOID KnockTriggerSx() {/ / Lees de sensor en sla het in de variabele sensorReading: sensorReading2 = digitalRead(knockSensor2); / / als de sensorgegevens groter dan de drempel is: als (sensorReading2 == 1) {/ / de status van de ledPin in-/ uitschakelen: Serial.println ("Knock SX!!!"); KnockDetected ++; Setto per riconoscere parlato. millisAtKnockSx = millis() + random(3000,10000); azzero counter bang dx als (NoiseDetected == 0) {gedrag = 3; //vado in bang sx void KnockTriggerSx() { // read the sensor and store it in the variable sensorReading: sensorReading2 = digitalRead(knockSensor2); // if the sensor reading is greater than the threshold: if (sensorReading2 == 1) { // toggle the status of the ledPin: Serial.println("Knock SX !!!!!!!!!!!"); KnockDetected++; // setto per riconoscere parlato. millisAtKnockSx = millis() + random(3000,10000); // azzero counter afraid dx if (NoiseDetected == 0){ Behaviour = 3; //vado in afraid sx } delay(200); } } delay(200); void AfraidDx(){ if (millis() >= previousMillis2){ CountCiclo2++; previousMillis2 = previousMillis2+random(StartVelocityCiclo2,EndVelocityCiclo2); // each case gets 100ms servoSweep2 = random(1,4); //seleziona caso random tra 1 e 3 /*if (servoSweep == 7){ //cicla tutti i casi servoSweep = 1; }*/ } switch (servoSweep2){ case 1: pos = limitdx-3; servo.write(pos); break; case 2: pos = limitdx-6; servo.write(pos); break; case 3: pos = limitdx; servo.write(pos); break; } // end of sweep } 
     void AfraidSx(){ if (millis() >= previousMillis4){ CountCiclo4++; previousMillis4 = previousMillis4+random(StartVelocityCiclo4,EndVelocityCiclo4); // each case gets 100ms servoSweep4 = random(1,4); //seleziona caso random tra 1 e 3 /*if (servoSweep == 7){ //cicla tutti i casi servoSweep = 1; }*/ } switch (servoSweep4){ case 1: pos = limitsx+3; servo.write(pos); break; case 2: pos = limitsx+6; servo.write(pos); break; case 3: pos = limitsx; servo.write(pos); break; } // end of sweep } 
     void LedLoop(){ 
     } 
     void Scan(){ 
     if (millis() >= previousMillis3){ if (endingAfraid == 1) { //se to uscendao da afraid resetto la pos per fluidità endingAfraid = 0; if (Direction == 0) { previousMillis3 = previousMillis2; pos3 = limitdx - 6 ; } else{ previousMillis3 = previousMillis4; pos3 = limitsx + 6 ; } } CountCiclo3++; //debug// Serial.println(pos3); previousMillis3 = previousMillis3+VelocityCiclo3 ; 
    Als (millis() > = previousMillis3) {als (endingAfraid == 1) {//se te uscendao da bang resetto la pos per fluidità endingAfraid = 0; als (richting == 0) {previousMillis3 = previousMillis2; pos3 = limitdx - 6; if (Direction % 2) { //se dispari (da basso a alto) (da limit sx a limit dx) if(pos3 < limitdx) { pos3++; servo.write(pos3); } else { Direction++; // se ho raggiunto il limite aumenta di 1 direzione, invertendola } } else //se pari if(pos3 > limitsx) { pos3--; servo.write(pos3); } else { Direction++; // se ho raggiunto il limite aumenta di 1 direzione, invertendola } else {previousMillis3 = previousMillis4; pos3 = limitsx + 6; } } 
    Als (richting % 2) {//se dispari (da basso een alto) (da limiet sx een limiet dx) if(pos3 < limitdx) {pos3 ++; servo.write(pos3); void DetectNoise() { if (millis() >= previousMillis6){ CountCiclo6++; //se dopo un po di tempo/VelocityCiclo6)... previousMillis6 = previousMillis6+VelocityCiclo6 ; // ho accumulato troppi knokkeddx ed sx.... if (PreviousKnockDetected <= KnockDetected){ // per capirlo sottracco quelli di ora - quelli previus ciclo (lento) se > x sono in noise... PreviousKnockDetected = KnockDetected+NoiseTresh; // Azzer.... NoiseTresh = soglia che vado a aggiugnere... Serial.println(); Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!noise detected!!! chi parla?????????????????"); //triggero log Serial.println(); Behaviour = 1; //e vado in modalità idonea... NoiseDetected = 1; //qs variabile impedisce ad altri knoc di cambiare behaviour x un po'.... previousMillis7 = previousMillis6+VelocityCiclo7 ; //setto dalay per rientro varaibile NoiseDetected else {richting ++; / / se ho raggiunto il limite aumenta di 1 direzione, invertendola }else{ if (millis() >= previousMillis7){ //dopo xx ulteirori millisecondi.. CountCiclo7++; NoiseDetected = 0; //vado via dastato di noisedetected... } } PreviousKnockDetected = KnockDetected+NoiseTresh; //debug// Serial.print("trigger rilevati in unità di tempo= "); //debug// Serial.println(PreviousKnockDetected-KnockDetected); } } anders //se pari if(pos3 > limitsx) {pos3--; servo.write(pos3); void VerboseLog() { if (millis() >= previousMillis1){ CountCiclo1++; previousMillis1 = previousMillis1+VelocityCiclo1 ; // each case gets 100ms else {richting ++; / / se ho raggiunto il limite aumenta di 1 direzione, invertendola //fun Verboselog Serial.print("| CountCiclo1= "); Serial.print(CountCiclo1); 
     Serial.print("| knockDX= "); Serial.print(millisAtKnockDx); 
     Serial.print("PreviousKnocKDetected= "); Serial.print(PreviousKnockDetected); 
    } else {als (millis() > = previousMillis7) {//dopo xx ulteirori millisecondi... CountCiclo7 ++; NoiseDetected = 0; Vado via dastato di noisedetected... Serial.print("KnocKDetected= "); Serial.print(KnockDetected); Serial.print("NoiseDetectedStatus= "); Serial.print(NoiseDetected); PreviousKnockDetected = KnockDetected + NoiseTresh; debug / / Serial.print ("leiden tot rilevati in unità di tempo ="); debug / / Serial.println(PreviousKnockDetected-KnockDetected); Serial.println("end"); 
     } 
     } 
    			
              

    Gerelateerde Artikelen

    Houten Star Wars AT-AT walker model

    Houten Star Wars AT-AT walker model

    Hallo, mijn naam is Jeroen en ik ben een amateur model maker. Ik maak modellen (meestal werken)van foto's en meestal van hout. Ik ben momenteel op een Trebuchet ik dit doen in mijn garage. Echter aangezien het behoorlijk koud hier wilde ik om te begi
    Star Wars wo Tredwell Droid

    Star Wars wo Tredwell Droid

    In deze fijne Instructable ik zal laten zien hoe maak je een star wars schaaleindwaarde Tredwell droid "uit star wars. de bouwstijl is matig moeilijk en is een lange gebouwd en is ook een R/C als u ervoor kiest om te worden.De droid Tredwell was een
    Star wars R2-D2 xbox 360

    Star wars R2-D2 xbox 360

    Video hier:Star Wars R2-D2 Xbox 360 met projectorDit is een een van een soort star wars r2d2 xbox 360 met projector en aux ingangen. Maat gebouwd door mij... Mark Bongo eigenaar van Major League Mods. voor uw gratis E-boek over hoe 2 mod je xbox...
    Star Wars Bed lampen Kids

    Star Wars Bed lampen Kids

    Net als een heleboel mensen hou ik van Star Wars. Ik ben opgegroeid met de eerste trilogie en hoewel de tweede trilogie was niet zo goed was het nog steeds mooi. Nu dat de 3e trilogie is bij ons ik dacht dat ik zou delen de lampen maakte ik een paar
    Rahsia Star Wars flexibele zwaard

    Rahsia Star Wars flexibele zwaard

    Beste lezers/fans,Dit speciale Star Wars flexibele zwaard is alleen met behulp van goedkope led strip. U kunt het krijgen van DIY DIY,, Recycle center en trash(free) voor over minder dan USD5. Hopelijk kunt u genieten van 'kopiëren en plakken' en de
    Ik maakte het op TechShop - pictogram voor star wars fiets competitie

    Ik maakte het op TechShop - pictogram voor star wars fiets competitie

    http://www.techshop.wsWell en TechShop Detroit heeft zijn 1 jarig bestaan op zaterdag 6/1.  Als het is iets als hun grootse opening zullen vorig jaar er dingen daar voor mensen van alle leeftijden om te genieten van...  Mijn zoon urenlang maken van s
    Aanpasbare gemotoriseerde boom Topper met Star Wars Flair

    Aanpasbare gemotoriseerde boom Topper met Star Wars Flair

    dit Instructable zal u tonen hoe te maken van een gemotoriseerde boom topper voor uw kerstboom.  Ik maakte dit als een verrassing vroeg kerstcadeau voor mijn vrouw zodat zij kan genieten van het door het grootste deel van December.  Dit is iets dat k
    Multi-Functional Star Wars Astromech Droid

    Multi-Functional Star Wars Astromech Droid

    E4-B4Astromech droid voor het huis.Video links voor mobiele apparaten die de videominiaturen bovenstaande animatie wordt niet afgespeeld:Het maken van E4-B4 Astromech Droid VideoE4-B4: Showcase Video, deel 1E4-B4: Rocket Man VideoE4-B4: Zin in een dr
    Rey (Star Wars: The Force ontwaakt) Free Comic Book Day 2016

    Rey (Star Wars: The Force ontwaakt) Free Comic Book Day 2016

    Groeten nogmaals Instructable-keteers!Per gebruikelijk, ik ben slaap beroofd en over cafeïnehoudende weer zoals ik zitten omlaag wilt typen van een ander kostuum avontuur.In het begin was er een komische winkelIk weet dat ik heb eerder gezegd dat ik
    Star Wars Thermal Detonator 3d afgedrukt

    Star Wars Thermal Detonator 3d afgedrukt

    De machtige Jabba vraagt waarom hij vijftig duizend moet betalen.Omdat hij een thermal detonator houdt!Met Star Wars dag snel nadert leek het mij alleen passend dat mijn volgende project een Star Wars een was. Hebben reeds een lightsaber, dacht ik da
    K'NEX Motorized Walking AT-TE uit Star Wars

    K'NEX Motorized Walking AT-TE uit Star Wars

    In deze ible zal ik u tonen hoe te bouwen van een K'NEX lopen alle terrein tactische Enforcer (ook bekend als AT-TE), uit de Star Wars-films en Clone Wars serie. Het model is volledig gemotoriseerd en wandelt over verschillende terreinen zoals: Vinyl
    K'NEX Star Wars Millennium Falcon

    K'NEX Star Wars Millennium Falcon

    "You 've nooit gehoord van de Millennium Falcon?"-Han SoloZo ja, dat is ongeveer te veranderen! Omdat in dit instructable ik zal je laten zien hoe ik mijn K'NEX Millennium Falcon uit de originele Star Wars-films gemaakt! Dit ruimteschip was lang
    K'NEX Star Wars Lambda-klasse Shuttle

    K'NEX Star Wars Lambda-klasse Shuttle

    Onderschat niet de kracht van Instructables!-Darth Vader - Episode IVDit instructable zal u tonen hoe te maken van een pendeldienst van de Lambda-klasse van de Star Wars-films! Ik heb dit model voor de K'NEX-wedstrijd 2015. Persoonlijk ben ik een Sta
    BB8 gebouwd met Lego Star Wars-delen... En nog het beweegt aan het einde van deze tutorial

    BB8 gebouwd met Lego Star Wars-delen... En nog het beweegt aan het einde van deze tutorial

    Ik had dit model Lego ideeën ingezondenhttps://Ideas.Lego.com/projects/127584Als je deze Lego-versie van BB8, please vote voor dit project.Log in met uw sociale media-accounten voor het stemmen.Merci te miljoen!Ik keek "Een nieuwe hoop" in 1977