Hoe het bouwen van een andere nutteloze machine: gemakkelijk om te maken, en moeilijk om te gebruiken! (9 / 9 stap)

Stap 9: Optionele Update: beweging detectie


ik heb een nabijheidssensor vandaag (GP2Y0A21), dus nu ik het gebruiken kan om het verplaatsen van de machine als de gebruiker de tuimelschakelaar benadert :)

Voor deze extra stap, ik ga ervan uit u al hebt gebouwd de wielen om verkeer toe te staan (Zie optionele stap 8). Alles wat nu overblijft is het toevoegen van de sensor en enkele wijzigingen aanbrengen in de code voor de beweging detectie.

De sensor heeft 3 draden, geel signaal draad aangesloten op pin 3 op de arduino, terwijl de rode en zwarte verbonden bent met de v5 en grond respectievelijk op het bord.

Ik heb de sensor verborgen onder de deur, zoals in de afbeelding geplaatst, dus het kan 'zien' van de gebruiker verkeer alleen wanneer de deur wordt geopend. precies wat ik nodig heb!

Ik had ook voor het wijzigen van de code een beetje (hier) voor de uitvoering van een beweging detectie routine (Zie de code, in de functie zee7()), zodanig dat wanneer beweging wordt gedetecteerd, het vak gaan, eerst naar rechts en naar links, dan de hand klapt de schakelaar en verbergen. De code wordt zwaar commentaar, ik hoop dat ik niet overdrijven!

U kunt de bijgewerkte code hieronder vinden, merk ook op dat ik heb de machine pakt de beweegt willekeurig, kan dit worden veranderd naar sequentiële door gewoon boolean randomize = false;

Bedankt allemaal voor uw geweldige suggesties!

De code (beter te downloaden van het bestand gekoppeld aan deze stap in plaats van kopiëren/plakken van onderen) :

#include
Servo doorServo;
Servo handServo;

unsigned long TimerA, TimerB;       timer voor de beweging detectie routine
int switch_pin = 2;               set schakelaar op pin 2

motor variabelen
int motorThrottle = 11;
int motorDirection = 13;
int motorrem = 8;

Afstand variabelen
int motionPin = 3;               Motion sensor pin op analoge 0
int lastDist = 0;                om te onthouden van de laatste afstand
int currentDist = 0;
int propageren = 200;                Drempel voor verkeer (instelling is zodanig dat u de gewenste sensetivity van bewegingsdetectie)

int pos = 0;
int selectedMove = 0;             verplaatsen van selector
int Testmove = 0;                 test modus: ingesteld op het nummer voor het testen van slechts één geselecteerde beweging verplaatsen
(ingesteld op nul te lopen normaal dwz: roundrobbin op alle bewegingen)
Boolean randomize = true;        Als de waarde true, het vak verhuizers willekeurig, doen zal als ingesteld op false, dan de bewegingen sequencially van 1 tot en met 10 gebeuren zal

VOID Setup
{
Serial.begin(9600);
pinMode (switch_pin, INPUT);
doorServo.attach(9);           deur servo ingesteld op Pin 9 pwm
handServo.attach(10);          hand servo ingesteld op Pin 10 pwm
doorServo.write(80);           set deur verstopt positie
handServo.write(0);            set hand standpunt verstopt
Setup kanaal B, aangezien kanaal A is voorbehouden door de deur en hand servo's en niet ber gebruikt op hetzelfde moment
pinMode (motorDirection, OUTPUT); Ingewijden Motor kanaal B pin
pinMode (motorrem, OUTPUT); Ingewijden rem kanaal B pin

}

void loop
{

Als de schakelaar ingeschakeld is, dan deur en hand uit te schakelen het verplaatsen...
if(digitalRead(switch_pin) == HIGH)
{

Als (Testmove == 0)
{

if(randomize == false)
{
Als (selectedMove > 10)
{
selectedMove = 0; Wanneer alle bewegingen worden gespeeld, herhaalt u de bewegingen vanaf begin
}
}
anders
{
selectedMove = random(11);
}
}
anders
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
Als (selectedMove == 0) {switchoff();}
else if (selectedMove == 1) {switchoff();}
else if (selectedMove == 2) {switchoffbitaraddod();}
else if (selectedMove == 3) {crazydoor();}
else if (selectedMove == 4) {crazyslow();}
else if (selectedMove == 5) {m7anika7anika();}
else if (selectedMove == 6) {m3alla2();}
else if (selectedMove == 7) {switchoff();}
else if (selectedMove == 8) {matrix();}
else if (selectedMove == 9) {sneak();}
else if (selectedMove == 10) {zee7();}

Als (Testmove == 0 & & randomize == false) {}
selectedMove ++;         overschakelen naar de volgende stap, zo niet in testmodus
}

}
}

Bibliotheek van bewegingen

elementaire beweging
VOID switchoff()
{
Bewegende deur
voor (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}

Bewegende hand
voor (pos = 0; pos < 129; pos = 4)
{
handServo.write(pos);
delay(15);
}

verbergen van de hand
voor (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
delay(15);
}
}

verplaatsen van 3: open en wacht, dan verplaatsen van hand en wacht, dan schakelen van en verbergen
VOID switchoffbitaraddod()
{
Bewegende deur
voor (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}
delay(800);
Bewegende hand
voor (pos = 0; pos < 100; pos = 4)
{
handServo.write(pos);
delay(15);
}
delay(1000);
voor (pos = 100; pos < 129; pos = 4)
{
handServo.write(pos);
delay(15);
}

verbergen van de hand
voor (pos = 129; pos > = 0; pos-= 5)
{
handServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
delay(15);


}

}

verplaatsen van 4: open deur dan sluit het vele malen, wachten, dan snel reoprn een nd-schakelaar uit en verbergen.

VOID crazydoor()
{

Bewegende deur
voor (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
delay(15);
}
Bewegende deur
voor (pos = 80; pos < 110; pos = 3)
{
doorServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 110; pos > = 80; pos-= 15)
{
doorServo.write(pos);
delay(15);
}
delay(700);
Bewegende deur
voor (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
delay(15);
}
delay(700);
verbergen van deur
voor (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
delay(15);
}

---voor de switch van---/ /
Bewegende deur
voor (pos = 80; pos < 155; pos = 8)
{
doorServo.write(pos);
delay(15);
}

Bewegende hand
voor (pos = 0; pos < 129; pos = 3)
{
handServo.write(pos);
delay(15);
}

verbergen van de hand
voor (pos = 129; pos > = 0; pos-= 3)
{
handServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 155; pos > = 80; pos-= 15)
{
doorServo.write(pos);
delay(15);
}

}

verplaatsen van 5: open deur, verplaats hand heel langzaam vooruit en terug naar verbergen heel langzaam, dan snel de deur dicht
VOID crazyslow()
{

Bewegende deur
voor (pos = 80; pos < 155; pos = 1)
{
doorServo.write(pos);
delay(30);
}

Bewegende hand
voor (pos = 0; pos < 129; pos = 1)
{
handServo.write(pos);
delay(30);
}

verbergen van de hand
voor (pos = 129; pos > = 0; pos-= 1)
{
handServo.write(pos);
delay(30);
}

verbergen van deur
voor (pos = 155; pos > = 125; pos-= 1)
{
doorServo.write(pos);
delay(30);
}
delay(100);
voor (pos = 125; pos > = 80; pos-= 4)
{
doorServo.write(pos);
delay(15);
}

}

6 verplaatsen:

ongeldig m7anika7anika() {}

Bewegende deur
voor (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}

Bewegende hand
voor (pos = 0; pos < 70; pos = 1)
{
handServo.write(pos);
delay(15);
}
delay(800);


verbergen van deur
voor (pos = 155; pos > 130; = pos-= 3)
{
doorServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 130 pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}
verbergen van deur
voor (pos = 155; pos > 130; = pos-= 3)
{
doorServo.write(pos);
delay(15);
}
verbergen van deur
voor (pos = 130 pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}

handServo.write(40);
delay(1000);

Bewegende hand
voor (pos = 40 pos < 129; pos = 4)
{
handServo.write(pos);
delay(15);
}

verbergen van de hand
voor (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
delay(15);
}


voor (pos = 120; pos > = 80; pos-= 1)
{
doorServo.write(pos);
delay(15);
}



}

ongeldig m3alla2() {}
Bewegende deur
voor (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}

Bewegende hand
voor (pos = 0; pos < 127; pos = 4)
{
handServo.write(pos);
delay(15);
}
verbergen van deur
voor (pos = 155; pos > 130; = pos-= 3)
{
doorServo.write(pos);
delay(15);
}
delay(2000);

voor (pos = 130 pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}

voor (pos = 155; pos > = 140; pos-= 3)
{
doorServo.write(pos);
delay(15);
}
voor (pos = 140 pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}
delay(500);
verbergen van de hand
voor (pos = 127; pos > = 0; pos-= 4)
{
handServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
delay(15);
}

}

VOID matrix()
{

Bewegende deur
voor (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}

Bewegende hand
voor (pos = 0; pos < 80; pos = 4)
{
handServo.write(pos);
delay(15);
}

voor (pos = 80; pos < 129; pos = 1)
{
handServo.write(pos);
delay(30);
}
delay(300);

voor (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
delay(10);
}

verbergen van deur
voor (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
delay(15);
}

}

VOID sneak()
{
Bewegende deur
voor (pos = 80; pos < 130; pos = 1)
{
doorServo.write(pos);
delay(30);
}
delay(2000);

Bewegende hand
voor (pos = 0; pos < 40 pos = 1)
{
handServo.write(pos);
delay(30);
}

delay(500);

voor (pos = 130 pos < 155; pos = 4)
{
doorServo.write(pos);
delay(15);
}
delay(100);

voor (pos = 40 pos < 90; pos = 4)
{
handServo.write(pos);
delay(15);
}
delay(500);
verbergen van de hand
voor (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
delay(15);
}
delay(100);
voor (pos = 70 pos < 90; pos = 4)
{

handServo.write(pos);
delay(15);
}
delay(100);
voor (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
delay(15);
}
delay(100);

voor (pos = 70 pos < 129; pos = 4)
{

handServo.write(pos);
delay(15);
}

voor (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
delay(15);
}
verbergen van deur
voor (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
delay(15);
}
}

deze stap zal de deur open en wacht voor verkeer, als gevonden in de buurt van de schakelaar,
het vak gaan eerst naar rechts en vervolgens naar links, en tot slot de hand beweegt en draait de uitschakelaar
VOID zee7()
{

open deur
voor (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
delay(15);
}
delay(1200);    wachten om te stabiliseren sensor lezingen na het openen van de deur

instellen van de timer en lees de sensor
wachten op beweging die groter is dan de drempel of als timer verloopt (5 sec),
lastDist = analogRead(motionPin);
TimerA = millis();

terwijl (millis ()-TimerA < = 5000)
{
currentDist = analogRead(motionPin);

De huidige afstand wijkt af van de laatste afstand door meer dan de drempel?
zo ja, dan naar rechts vak verplaatsen
Als ((currentDist > lastDist propageren || currentDist < lastDist - propageren) || currentDist > 300)
{

voorwaartse @ halve snelheid naar links (Kies de snelheid en de vertraging
(dwz delay(300) volgens u vak en accuspanning zodanig dat het verkeer gooien wenselijk is)
digitalWrite (motorDirection, laag);  Bepaalt de richting van kanaal A
digitalWrite (motorrem, laag);      Losraken van de rem voor kanaal B
analogWrite (motorThrottle, 100);    Draait de motor op Channel B op volle snelheid
delay(300);
digitalWrite (motorrem, hoge); Eengage de rem voor kanaal B
breken;
}
lastDist = currentDist;
}

instellen van de timer en lees de sensor
wachten op beweging die groter is dan de drempel of als timer verloopt (5 sec),
delay(1200);  wachten om te stabiliseren sensor lezingen na het openen van de deur
lastDist = analogRead(motionPin);
TimerB = millis();
terwijl (millis ()-TimerB < = 5000)
{
currentDist = analogRead(motionPin);
het vak al bewoog naar rechts en de huidige afstand afwijken van de laatste afstand door meer dan de drempel?
Zo ja, dan naar links verplaatsen
Als ((currentDist > lastDist propageren || currentDist < lastDist - propageren) || currentDist > 300)
{

achterwaartse @ halve snelheid naar rechts (het kiezen van de snelheid en de vertraging
(dwz delay(300) volgens u vak en accuspanning zodanig dat het verkeer gooien wenselijk is)
digitalWrite (motorDirection, hoge); Stelt LINKSAF richting van kanaal B
digitalWrite (motorrem, laag);   Losraken van de rem voor kanaal B
analogWrite (motorThrottle, 100);   Draait de motor op Channel B op halve snelheid
delay(300);
digitalWrite (motorrem, hoge); Eengage de rem voor kanaal B
breken;
}

lastDist = currentDist;

}
delay(100);
Bewegende hand
voor (pos = 0; pos < 130; pos = 4)
{
handServo.write(pos);
delay(15);
}

verbergen van de hand
voor (pos = 130; pos > = 0; pos-= 4)
{
handServo.write(pos);
delay(15);
}

verbergen van deur
voor (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
delay(15);
}
}

Gerelateerde Artikelen

PT. 1 hoe het bouwen van een wiel van de pottenbakkers met een loopband motor!

PT. 1 hoe het bouwen van een wiel van de pottenbakkers met een loopband motor!

Deze tutorial is pt 1.  de snelle versie van hoe het bouwen van een pottenbakkers wiel met behulp van onderdelen uit de stapel van schroot en delen van een loopband van $10.  Ik heb gezocht hoog en laag op het web naar informatie over dit onderwerp,
Hoe het bouwen van een aangepaste "bed of nails" tester voor uw 3D-printer elektronica

Hoe het bouwen van een aangepaste "bed of nails" tester voor uw 3D-printer elektronica

Als u een heleboel PCB (Printed Circuit Board) zijn productie, wil je een soort van QA-om ervoor te zorgen dat uw planken zijn functioneel en zonder gebreken. De meest populaire methode voor het testen van in-circuit is het gebruik van een bed van sp
Scout Project: Hoe het bouwen van een Trebuchet

Scout Project: Hoe het bouwen van een Trebuchet

dus voor welke reden dan ook, de voorpagina van mijn Instructable is leeg... na mij schrijven (in mijn mening) een vrij koele opening... Damnation! Nou... laten we proberen dit weer hè?Nou... Welkom bij de tweede aflevering van mijn Scout projecten..
Hoe het bouwen van een pergola: awesome maken van de grond af.

Hoe het bouwen van een pergola: awesome maken van de grond af.

Als je hebt grote achtertuin landscaping ideeën, dan hoe het bouwen van een pergola - die rotsen - moet worden op uw lijst. Deze pergola is een één-van-een-kinder met een multifunctionele ruimte voor zithoek en serveren. Wij hopen dat u love it zo ve
Hoe het bouwen van een figuurframe

Hoe het bouwen van een figuurframe

hoe het bouwen van een high-end houten fotolijst aangepast aan een grote olieverf op doek. Awesome art door Emily Keyishian.Stap 1: Controleer of het verwerven van kunst Iets briljant maken, of iemand die heeft en is bereid om het te verkopen aan u v
Hoe het bouwen van een stevige werkbank goedkoop

Hoe het bouwen van een stevige werkbank goedkoop

Denk snel. Wat is de meest gebruikte hulpmiddel in uw werkplaats? Welk hulpmiddel gebruik je elke dag en voor elk project? Hebt u uw werkbank gezegd? Goed hebt. Dank erover. Een goede, solide workbench is het belangrijkste kenmerk van een goed uitger
Hoe het bouwen van een goedkope werkbank voor houtbewerking met behulp van een mal van Kreg HD, met VIDEO tutorial

Hoe het bouwen van een goedkope werkbank voor houtbewerking met behulp van een mal van Kreg HD, met VIDEO tutorial

Gratis plannen zijn ook hierna beschikbaar in Imperial en Metric.Stap 1: Zie volledige Video Tutorial Video hier.Warren uit één hout Tools toont hoe het bouwen van een goedkope en makkelijke eiland houtbewerking werkbank met hond gaatjes, gewrichten
Hoe het bouwen van een eenvoudige water raket

Hoe het bouwen van een eenvoudige water raket

Welkom bij dit instructable!Voor een schoolproject of gewoon voor de lol, is bouwen en lanceren van uw eigen water rocket een uitdagende maar geweldige ervaring. In deze tutorial laten we u hoe te beginnen en hoe te bouwen van je eigen, eenvoudige wa
Hoe het bouwen van een 1 deel gebonden zand schimmel

Hoe het bouwen van een 1 deel gebonden zand schimmel

dit is hoe het bouwen van een gekleefde 1 deel zand mal voor het gieten van metaal. Ik maakte dit op Techshop. www.techshop.WSStap 1: Stap 1: Maak een patroon Eerste stap in het creëren van een gekleefde zand schimmel is het creëren van een patroon t
Hoe het bouwen van een Rocket Mass Heater

Hoe het bouwen van een Rocket Mass Heater

er zijn twee belangrijke factoren die een Rocket Mass Heater (RMH) van een gewone houtkachel onderscheiden. Een is dat de verbranding die plaatsvindt in een RMH, als gevolg van de toegenomen ontwerp en geïsoleerde branden kamer veel vollediger. Een R
Hoe het bouwen van een oproep van de Turkije wingbone

Hoe het bouwen van een oproep van de Turkije wingbone

dit instructable zullen een beschrijving van hoe het bouwen van een wingbone Turkije oproep. Deze oproep is gemakkelijk op te bouwen, maar moeilijk te beheersen. Bellen in een Turkije met een oproep die u zelf uit een ander Turkije gemaakt is echter
Hoe het bouwen van een vrachtwagen hotrod in 3 gemakkelijke stappen

Hoe het bouwen van een vrachtwagen hotrod in 3 gemakkelijke stappen

In dit instructable I 'm gonna u kennismaken met het programma knippen. Volg mee als we een hotrod van start bouwen tot finish. We hadden wat hulp van beroemdheid en vele, vele mensen die vrijwillig dit idee tot leven te brengen. De bovenstaande foto
Hoe het bouwen van een computer

Hoe het bouwen van een computer

In dit Instructable zal ik uitleggen hoe het bouwen van een computer. Voor een normale computer (een die niet watergekoelde is) zal u deze onderdelen nodig:Zaak moederbordCompatibel met moederbord CPUHeatsink voor CPURAM compatibel met moederbordHard
Hoe het bouwen van een zachte lucht-cursus

Hoe het bouwen van een zachte lucht-cursus

dit is hoe het bouwen van een zachte luchtmachtbasis die een aanvallende kant en een verdedigende kant heeft.Stap 1: Belangrijkste verdediger muur Dit is waar de verdediger van start.1. vind 6 stevige logboeken ongeveer 6 ft lange.2. graven 6 gaten o