Hur man bygger en annan värdelös maskin: lätt att göra, och svårt att använda! (9 / 9 steg)

Steg 9: Valfri uppdatering: rörelse detektering



Har jag en rörelsesensor idag (GP2Y0A21), så nu jag kan använda den för att flytta maskinen om användaren närmar sig Vippbrytare :)

Att detta ytterligare steg, jag antar att du redan har byggt hjulen för att möjliggöra rörlighet (se valfria steg 8). Alla vad som återstår nu är att lägga till sensorn och göra vissa ändringar i koden för rörelse upptäckten.

Sensorn har 3 trådar, gul signal tråd ansluten till stift 3 på arduino, medan den röda och svarta är anslutna till v5 och marken respektive på styrelsen.

Jag har placerat sensorn dolt under dörren som visas i bilden, så det kan "se" användarens rörelse endast när dörren öppnas. exakt vad jag behöver!

Jag hade också ändra koden lite (här) för att genomföra en rörelse upptäckten rutin (se koden i funktionen zee7()), så att när rörelse upptäcks, rutan kommer att flytta, först till höger och sedan till vänster, sedan handen vänder växeln och Dölj. Koden är kraftigt kommenterade, jag hoppas jag inte överdriva!

Du kan hitta uppdaterade koden nedan, Observera också att jag har gjort den maskin plockar flyttas slumpmässigt, detta kan ändras tillbaka till sekventiellt genom att helt enkelt ange boolean randomize = false;

Tack alla för era bra förslag!

Koden (bättre att hämta filen bifogas detta steg i stället för att klistra in nedan) :

#include
Servo doorServo;
Servo handServo;

osignerade långa TimerA, TimerB; timer för rörelse upptäckten rutinen
int switch_pin = 2; Ställ in omkopplaren på pin 2

motoriska variabler
int motorThrottle = 11;
int motorDirection = 13.
int motorBrake = 8;

Avståndet variabler
int motionPin = 3; Motion sensor stift på analoga 0
int lastDist = 0; att komma ihåg senaste avstånd
int currentDist = 0;
int tröska = 200. Tröskelvärde för rörelse (ställa in den så att du får den önskade sensetivity av rörelsedetektorn)

int pos = 0;
int selectedMove = 0; flytta väljaren
int Testmove = 0; testläge: att flytta nummer att testa bara en valda drag
(inställd på noll för att köra normalt dvs: roundrobbin på alla flyttar)
Boolean randomize = sant; om sant, rutan kommer att göra movers slumpmässigt, om inställd på false då flyttar kommer att ske sequencially från 1 till 10

void setup()
{
Serial.BEGIN(9600);
pinMode (switch_pin, ingång);
doorServo.attach(9); ställa in dörren servo på Pin 9 pwm
handServo.attach(10); ställa in hand servo på Pin 10 pwm
doorServo.write(80); Ställ in dörren till gömmer sig position
handServo.write(0); Ställ in hand för att dölja position
UppsΣttningskanal B, sedan kanal A är reserverade av dörren och hand servon och inte kan ber används samtidigt
pinMode (motorDirection, produktionen); Initierar Motor kanal B pin
pinMode (motorBrake, produktionen); Initierar broms kanal B pin

}

void loop()
{

om den är påslagen, då flytta dörren och hand att stänga av...
IF(digitalRead(switch_pin) == hög)
{

om (Testmove == 0)
{

IF(randomize == false)
{
om (selectedMove > 10)
{
selectedMove = 0; När alla flyttar spelas, upprepa flyttar från början
}
}
annat
{
selectedMove = random(11);
}
}
annat
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
om (selectedMove == 0) {switchoff();}
annat if (selectedMove == 1) {switchoff();}
annat if (selectedMove == 2) {switchoffbitaraddod();}
annat if (selectedMove == 3) {crazydoor();}
annat if (selectedMove == 4) {crazyslow();}
annat if (selectedMove == 5) {m7anika7anika();}
annat if (selectedMove == 6) {m3alla2();}
annat if (selectedMove == 7) {switchoff();}
annat if (selectedMove == 8) {matrix();}
annat if (selectedMove == 9) {sneak();}
annat if (selectedMove == 10) {zee7();}

om (Testmove == 0 & & randomize == false) {
selectedMove ++; Växla till nästa drag om inte i testläge
}

}
}

Biblioteket flyttar

grundläggande drag
void switchoff()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Rörliga hand
för (pos = 0; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}

gömmer sig hand
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}

Flytta 3: öppna och vänta, sedan flytta handen och vänta, sedan byta av och dölja
void switchoffbitaraddod()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(800);
Rörliga hand
för (pos = 0; pos < 100; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(1000);
för (pos = 100; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}

gömmer sig hand
för (pos = 129, pos > = 0; pos-= 5)
{
handServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);

}

}

Flytta 4: öppna dörren då nära den många gånger, vänta, sedan snabbt reoprn en nd switch off och dölja.

void crazydoor()
{

Rörliga dörren
för (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
Delay(15);
}
Rörliga dörren
för (pos = 80; pos < 110; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 110; pos > = 80; pos-= 15)
{
doorServo.write(pos);
Delay(15);
}
Delay(700);
Rörliga dörren
för (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(700);
dölja dörren
för (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
Delay(15);
}

---av växeln av---/ /
Rörliga dörren
för (pos = 80, pos < 155, pos = 8)
{
doorServo.write(pos);
Delay(15);
}

Rörliga hand
för (pos = 0; pos < 129; pos = 3)
{
handServo.write(pos);
Delay(15);
}

gömmer sig hand
för (pos = 129, pos > = 0; pos-= 3)
{
handServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 155; pos > = 80; pos-= 15)
{
doorServo.write(pos);
Delay(15);
}

}

flytta 5: öppna dörren, sedan flytta handen mycket långsamt fram och tillbaka till gömmer sig mycket långsamt och sedan snabbt stänga dörren
void crazyslow()
{

Rörliga dörren
för (pos = 80, pos < 155, pos = 1)
{
doorServo.write(pos);
Delay(30);
}

Rörliga hand
för (pos = 0; pos < 129; pos = 1)
{
handServo.write(pos);
Delay(30);
}

gömmer sig hand
för (pos = 129, pos > = 0; pos-= 1)
{
handServo.write(pos);
Delay(30);
}

dölja dörren
för (pos = 155; pos > = 125; pos-= 1)
{
doorServo.write(pos);
Delay(30);
}
Delay(100);
för (pos = 125; pos > = 80; pos-= 4)
{
doorServo.write(pos);
Delay(15);
}

}

flytta 6:

void m7anika7anika() {

Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Rörliga hand
för (pos = 0; pos < 70; pos = 1)
{
handServo.write(pos);
Delay(15);
}
Delay(800);

dölja dörren
för (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

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

Rörliga hand
för (pos = 40; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}

gömmer sig hand
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

för (pos = 120; pos > = 80; pos-= 1)
{
doorServo.write(pos);
Delay(15);
}

}

void m3alla2() {
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Rörliga hand
för (pos = 0; pos < 127; pos = 4)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(2000);

för (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

för (pos = 155; pos > = 140; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
för (pos = 140, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(500);
gömmer sig hand
för (pos = 127; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}

}

void matrix()
{

Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Rörliga hand
för (pos = 0; pos < 80; pos = 4)
{
handServo.write(pos);
Delay(15);
}

för (pos = 80; pos < 129; pos = 1)
{
handServo.write(pos);
Delay(30);
}
Delay(300);

för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(10);
}

dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}

}

void sneak()
{
Rörliga dörren
för (pos = 80; pos < 130; pos = 1)
{
doorServo.write(pos);
Delay(30);
}
Delay(2000);

Rörliga hand
för (pos = 0; pos < 40; pos = 1)
{
handServo.write(pos);
Delay(30);
}

Delay(500);

för (pos = 130; pos < 155; pos = 4)
{
doorServo.write(pos);
Delay(15);
}
Delay(100);

för (pos = 40; pos < 90; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(500);
gömmer sig hand
för (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);
för (pos = 70; pos < 90; pos = 4)
{

handServo.write(pos);
Delay(15);
}
Delay(100);
för (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);

för (pos = 70; pos < 129; pos = 4)
{

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

för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}

Detta steg kommer att öppna dörren och vänta för rörelse, om de upptäcks nära växeln,
rutan kommer att flytta först till höger och sedan till vänster, och slutligen handen rör sig och stänger av växeln
void zee7()
{

öppna dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(1200); vänta med att stabilisera sensormätningar när dörren öppnas

ställa in timern och läsa sensorn
vänta för rörelse som överstiger tröskeln eller om timer går ut (5 sek),
lastDist = analogRead(motionPin);
TimerA = millis();

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

Det nuvarande avståndet avviker från senaste avståndet mer än tröskeln?
Om ja, sedan flytta rutan till höger
om ((currentDist > lastDist tröska || currentDist < lastDist - tröska) || currentDist > 300)
{

framåt @ halvfart till vänster (välja hastighet och förseningen
(i.e delay(300) du rutan och batterispänningen så att rörelsen kasta är önskvärt)
digitalWrite (motorDirection, låg); Upprättar rätt riktning av kanal A
digitalWrite (motorBrake, låg); Lossa bromsen för kanal B
analogWrite (motorThrottle, 100); Snurrar motorn på kanal B i full fart
Delay(300);
digitalWrite (motorBrake, hög); Eengage bromsar för kanal B
bryta;
}
lastDist = currentDist;
}

ställa in timern och läsa sensorn
vänta för rörelse som överstiger tröskeln eller om timer går ut (5 sek),
Delay(1200); vänta med att stabilisera sensormätningar när dörren öppnas
lastDist = analogRead(motionPin);
TimerB = millis();
medan (millis ()-TimerB < = 5000)
{
currentDist = analogRead(motionPin);
rutan redan rörde sig till höger och det nuvarande avståndet avviker från det senaste avståndet mer än tröskeln?
Om ja, sedan flytta till vänster
om ((currentDist > lastDist tröska || currentDist < lastDist - tröska) || currentDist > 300)
{

bakåt @ halvfart till höger (välja hastighet och förseningen
(i.e delay(300) du rutan och batterispänningen så att rörelsen kasta är önskvärt)
digitalWrite (motorDirection, hög); Upprättar vänster riktning av kanal B
digitalWrite (motorBrake, låg); Lossa bromsen för kanal B
analogWrite (motorThrottle, 100); Snurrar motorn på kanal B på halvfart
Delay(300);
digitalWrite (motorBrake, hög); Eengage bromsar för kanal B
bryta;
}

lastDist = currentDist;

}
Delay(100);
Rörliga hand
för (pos = 0; pos < 130; pos = 4)
{
handServo.write(pos);
Delay(15);
}

gömmer sig hand
för (pos = 130; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}

Se Steg
Relaterade Ämnen

Hur man gör en leksak som dina fåglar kommer att använda för sitt bo

I detta instructable jag kommer att visa dig hur man gör en leksak som dina fåglar absolut kommer att älska och använda för boet.Steg 1: Material och verktygdu behöver:råg gräs eller pinnarett gummibandsträngoch saxSteg 2: skärJag använde råg gräs så...

Hur man gör bäst någonsin gödselmedel utan att använda kemikalier

här är hur man gör naturliga gödselmedel som gör att dina växter växa riktigt bra och göra din vege smaka fantastiskt!Steg 1: du behöver... en strandStora väskorstor container - jag använder en 40 gallon trummavattentidSteg 2: steg 1. Gå till strande...

Hur man bygger ett hem gjorde spole slingrande maskin för Bifilar Trifilar spolar och bortom

detta är en Video av spolen slingrande maskinen jag gjort, mest sätta ihop med kasserade artiklar, endast ett par saker köptes från arkivet (kopplingsdosor, Counter), resten jag kommer från en mikrovågsugn, skrot trä jag hade liggandes etc. vad funge...

Hur man bygger ett hem bibliotek i källaren med hjälp av bokhyllor och tusentals böcker

följer min Youtubekanal: http://www.youtube.com/user/educatetowin?feature=mheeHemsida: http://www.educatetube.comVärd: SipskiHur man bygger ett hem bibliotek i källaren. Du behöver bara minst 5 till 7 bokhyllor (beroende på hur stor din källaren vägg...

Hur man bygger en Media fil Hub för ditt hem (för MacOS och Windows)

vill skapa ett nav för alla i huset att dela filmer, musik och filer?Vad du behöver:• Trådlös Router (jag rekommenderar den ASUS RT-N56U. Dess routern jag har och det fungerar perfekt för detta)• Dator med Internetanslutning (helst flera datorer - an...

Hur du spelar in din egen röst på Xbox utan att använda en dator

för att spela in allt ljud inklusive chatt inklusive din egen röst samtidigt utan att använda en separat inspelning enhet eller mikrofon mixer, behöver du en eftermarknad gaming headset med mikrofon övervakning såsom Turtle Beach X31. Denna typ av he...

Hur man bygger en Hoverboard kan du rida

Kom ihåg dessa hover styrelser som alla Rider runt. nu kan du bygga din egen elektriska hover bräda hemma som du kan rida. För att se hur du kan gå igenom min instructables tutorial och titta på videon för att komplettera läraren. Du hittar alla mina...

Hur man bygger en snö Fort

Tidiga barndomsminnen ofta med tillfredsställelsen av att spela med ett färskt snöfall att göra snöänglar, kasta snöbollar, och ser som kunde bygga större snögubbe. Om du vill känna dig lite nostalgisk då är detta Instructable för dig. Vi kommer att...

Hur man bygger en kort hus

i detta instructable, jag kommer att visa dig hur man bygger ett enkelt kort hus. Jag kommer också att visa några av mina kort hus. Skicka inte kritisera detta instructable, människor där ute egentligen vet inte hur man gör ett korthus.Steg 1: Base d...

Hur man bygger en Fighter stil pappersflygplan

dessa instruktioner visar hur man konstruerar en Fighter pappersflygplan. Detta är ett bra sätt att visa dina vänner och familj ett unikt sätt att bygga ett pappersflygplan. Instruktionerna är för personer med lite ledig tid och alla som vill lära di...

Hur man bygger en Popsicle Stick träskepp

våra äldsta nyligen fick i uppdrag att en familj projektet att bygga en modell av en av de tre skepp som seglade med Columbus när han upptäckte den nya världen. Som tur är det, valde hon att bygga Nina över Pinta och Santa Maria. Varför lycklig? Efte...

Hur man bygger akvarium.

Akvariet är kontrollerad konstgjord miljö där fisk och vattenlevande organismer kan leva från deras naturliga miljö.Hantera akvariet är en populär hobby över hela världen. Detta är en hobby som inte kommer göra dig besviken, men det kommer att bli et...

Hur man bygger en billig arbetsbänk för träbearbetning med en HD Kreg Jigg, med VIDEO tutorial

Gratis planer finns även nedan i Imperial och metriska.Steg 1: Se Full Video Tutorial Video här.Warren från en trä verktyg visar hur man bygger en billig och enkel ön träbearbetning workbench med hund hål, lederna är gjorda med Kreg HD pocket hole ji...

Hur man bygger en enkel elmotor

hur man bygger en enkel elmotor:-En elmotor fungerar genom att skicka en ström genom en spole av tråd. När nuvarande passerar genom spolen skapar en elektromagnetisk dipol. En permanent magnet magnetfält interagerar med dipol av spolen tillämpa ett v...

Hur man bygger en Sonic skruvmejsel

detta instructable visar hur man bygger en egen sonic skruvmejsel.Eftersom jag anser att en sonic är något som byggare bör design, brukar jag även exakta mått.Steg 1: Inälvsprodukter THE CIRCUITDetta är den krets som jag används för både sonic ljud s...

Hur man bygger en pirat fartyg lekplats

beslutade vi att bygga ett piratskepp för mitt barnbarn... Detta är hur vi gjorde det.Jag började med att dra fram några grundläggande skisser av vad jag trodde skulle vara en cool look och utarbetat några grundläggande tekniska idéer. Vår idé var at...

Hur man bygger en Wind Power Generator

skörda vinden för energi inte är ett nytt koncept. Ursprunget till med vindarna till som producerar mekanisk energi förloras i dimma tid. Mänskligheten var med vindkraft att flytta sina skepp och Mala sin säd minst ett par tusen år sedan. Med tillkom...

Hur man gör en Arduino Powered CNC-maskin

Stegvisa instruktioner om hur man bygger en låg kostnad CNC-maskin med en Arduino Uno!Steg 1: Fabricera en bas och x-axeln slädeRoller skate hjul kommer att användas att skapa x-axeln släden. En kombination av 2 in och 1 i stål slangar bildar basen a...

Hur man bygger en eremitkräfta (eller annan liten varelse) bur

detta instructable kommer att förse dig med information om hur man bygger en eremitkräfta bur. Om inte du är ett fan av eremitkräftor, kan du använda det för hamstrar. Eller ödlor. Eller möss. Eller... Ja, du får idén.Barnen bestämde de ville få erem...