Comment construire une autre machine inutile : difficile à utiliser et facile à faire ! (9 / 9 étapes)

Etape 9: Mise à jour facultative : détection de mouvement

J’ai un capteur de proximité aujourd'hui (GP2Y0A21), alors maintenant je peux l’utiliser pour déplacer la machine, l’utilisateur s’approche de l’interrupteur à bascule:)

Pour cette étape supplémentaire, je suppose que vous avez déjà construit les roues pour permettre le mouvement (voir étape facultative 8). Tout ce qui reste maintenant est d’ajouter la sonde et de faire quelques modifications dans le code de détection de mouvement.

Le capteur a 3 fils de fils, jaune signal connectée à la broche 3 sur arduino, tandis que le rouge et le noir sont connectés à la v5 et sol respectivement sur la planche.

J’ai placé le capteur caché sous la porte, comme illustré dans l’image, donc il peut « voir » les mouvements de l’utilisateur uniquement lorsque la porte s’ouvre. exactement ce que j’ai besoin !

J’ai dû également changer le code un peu (ici) pour mettre en œuvre une routine de détection de mouvement (voir le code, dans la fonction zee7()), telle que lorsque le mouvement est détecté, la boîte se déplacera, tout d’abord à droite, puis vers la gauche, puis la main fait basculer l’interrupteur et se cacher. Le code est largement commenté, j’espère que je n’en faites pas trop !

Vous pouvez trouver le code de mise à jour ci-dessous, Notez également que j’ai fait le choix de machine les coups au hasard, ceci peut être changé en séquentiel en définissant simplement boolean randomiser = false ;

Merci à tous pour vos excellentes suggestions !

Le code (préférable de télécharger le fichier joint à cette étape au lieu de copier/coller par le dessous) :

#include
Servo doorServo ;
Servo handServo ;

unsigned long TimerA, TimerB ;       minuterie pour la routine de détection de mouvement
int switch_pin = 2 ;               Mettez l’interrupteur sur la broche 2

moteurs variables
int motorThrottle = 11 ;
int motorDirection = 13 ;
frein moteur int = 8 ;

Variables de distance
int motionPin = 3 ;               Motion sensor broche analogique 0
int lastDist = 0 ;                se rappeler la dernière distance
int currentDist = 0 ;
battre l’int = 200 ;                Seuil de mouvement (Réglez-le de sorte que vous obtenez le sensetivity désiré de détection de mouvement)

int pos = 0 ;
int selectedMove = 0 ;             déplacer le sélecteur
int Testmove = 0 ;                 mode test : ensemble pour déplacer nombre pour ne tester qu’un seul déplacement sélectionné
(la valeur zéro à fonctionner normalement c’est à dire : roundrobbin sur tous les coups)
randomize, boolean = true ;        Si true, la boîte fera déménageurs au hasard, si la valeur false, puis les coups seront fera sequencially de 1 à 10

void setup()
{
Serial.Begin(9600) ;
pinMode (switch_pin, entrée) ;
doorServo.attach(9) ;           Set servo porte sur 9 broches pwm
handServo.attach(10) ;          Set servo main sur 10 broches pwm
doorServo.write(80) ;           ensemble porte pour cacher la position
handServo.write(0) ;            Set main pour cacher la position
Installation canal B, étant donné que canal A est réservé par les servos de porte et de la main et ne peut pas ber utilisé en même temps
pinMode (motorDirection, sortie) ; Goupille d’initiés moteur canal B
pinMode (frein moteur, sortie) ; Goupille d’initiés frein canal B

}

void loop()
{

Si l’interrupteur est allumé, puis déplacez la porte et la main pour l’éteindre...
if(digitalRead(switch_pin) == HIGH)
{

Si (Testmove == 0)
{

if(Randomize == false)
{
Si (selectedMove > 10)
{
selectedMove = 0 ; Lorsque tous les coups sont joués, répétez les mouvements du début
}
}
d’autre
{
selectedMove = random(11) ;
}
}
d’autre
{
selectedMove = Testmove ;
}
Serial.println(selectedMove) ;
Si (selectedMove == 0) {switchoff();}
ElseIf (selectedMove == 1) {switchoff();}
ElseIf (selectedMove == 2) {switchoffbitaraddod();}
ElseIf (selectedMove == 3) {crazydoor();}
ElseIf (selectedMove == 4) {crazyslow();}
ElseIf (selectedMove == 5) {m7anika7anika();}
ElseIf (selectedMove == 6) {m3alla2();}
ElseIf (selectedMove == 7) {switchoff();}
ElseIf (selectedMove == 8) {matrix();}
ElseIf (selectedMove == 9) {sneak();}
ElseIf (selectedMove == 10) {zee7();}

Si (Testmove == 0 & & randomiser == false) {}
selectedMove ++ ;         passer au coup suivant, sinon en mode test
}

}
}

Bibliothèque de mouvements

mouvement de base
Sub switchoff()
{
Porte en mouvement
pour (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

Passer la main
pour (pos = 0; pos < 129; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}

cacher la main
pour (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
}

déplacer 3: ouvrir et attendre, puis passer la main et attendre, puis changez d’et cacher
Sub switchoffbitaraddod()
{
Porte en mouvement
pour (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
Delay(800) ;
Passer la main
pour (pos = 0; pos < 100; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}
Delay(1000) ;
pour (pos = 100; pos < 129; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}

cacher la main
pour (pos = 129; pos > = 0; pos-= 5)
{
handServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;


}

}

déplacer les 4: ouvrir la porte puis fermez ça plusieurs fois, attendre, puis rapidement reoprn une nd éteindre et cacher.

Sub crazydoor()
{

Porte en mouvement
pour (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos) ;
Delay(15) ;
}
Porte en mouvement
pour (pos = 80; pos < 110; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 110; pos > = 80; pos-= 15)
{
doorServo.write(pos) ;
Delay(15) ;
}
Delay(700) ;
Porte en mouvement
pour (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
Delay(700) ;
porte de masquage
pour (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos) ;
Delay(15) ;
}

---de commutateur de---/ /
Porte en mouvement
pour (pos = 80; pos < 155; pos = 8)
{
doorServo.write(pos) ;
Delay(15) ;
}

Passer la main
pour (pos = 0; pos < 129; pos = 3)
{
handServo.write(pos) ;
Delay(15) ;
}

cacher la main
pour (pos = 129; pos > = 0; pos-= 3)
{
handServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 155; pos > = 80; pos-= 15)
{
doorServo.write(pos) ;
Delay(15) ;
}

}

déplacer 5: porte ouverte, puis déplacez main très lentement vers l’avant et arrière à cacher très lentement, puis refermez vite la porte
Sub crazyslow()
{

Porte en mouvement
pour (pos = 80; pos < 155; pos = 1)
{
doorServo.write(pos) ;
Delay(30) ;
}

Passer la main
pour (pos = 0; pos < 129; pos = 1)
{
handServo.write(pos) ;
Delay(30) ;
}

cacher la main
pour (pos = 129; pos > = 0; pos-= 1)
{
handServo.write(pos) ;
Delay(30) ;
}

porte de masquage
pour (pos = 155; pos > = 125; pos-= 1)
{
doorServo.write(pos) ;
Delay(30) ;
}
Delay(100) ;
pour (pos = 125; pos > = 80; pos-= 4)
{
doorServo.write(pos) ;
Delay(15) ;
}

}

déplacer 6 :

void m7anika7anika() {}

Porte en mouvement
pour (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

Passer la main
pour (pos = 0; pos < 70; pos = 1)
{
handServo.write(pos) ;
Delay(15) ;
}
Delay(800) ;


porte de masquage
pour (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
porte de masquage
pour (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
porte de masquage
pour (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

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

Passer la main
pour (pos = 40; pos < 129; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}

cacher la main
pour (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos) ;
Delay(15) ;
}


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



}

void m3alla2() {}
Porte en mouvement
pour (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

Passer la main
pour (pos = 0; pos < 127; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}
porte de masquage
pour (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
Delay(2000) ;

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

pour (pos = 155; pos > = 140; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
pour (pos = 140; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
Delay(500) ;
cacher la main
pour (pos = 127; pos > = 0; pos-= 4)
{
handServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

}

matrix() Sub
{

Porte en mouvement
pour (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

Passer la main
pour (pos = 0; pos < 80; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}

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

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

porte de masquage
pour (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}

}

Sub sneak()
{
Porte en mouvement
pour (pos = 80; pos < 130; pos = 1)
{
doorServo.write(pos) ;
Delay(30) ;
}
Delay(2000) ;

Passer la main
pour (pos = 0; pos < 40; pos = 1)
{
handServo.write(pos) ;
Delay(30) ;
}

Delay(500) ;

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

pour (pos = 40; pos < 90; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}
Delay(500) ;
cacher la main
pour (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos) ;
Delay(15) ;
}
Delay(100) ;
pour (pos = 70; pos < 90; pos = 4)
{

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

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

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

pour (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos) ;
Delay(15) ;
}
porte de masquage
pour (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
}

ce mouvement va ouvrir la porte et d’attendre pour le mouvement, si détecté près de l’aiguillage,
la boîte se déplacera d’abord à droite, puis vers la gauche, et enfin la main se déplace et s’éteint l’interrupteur
Sub zee7()
{

porte ouverte
pour (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
Delay(1200) ;    attendre pour stabiliser les lectures du capteur après l’ouverture de la porte

Réglez la minuterie et lire le capteur
Attendez de mouvement qui dépasse le seuil, ou si la minuterie expire (5 s),
lastDist = analogRead(motionPin) ;
TimerA = millis() ;

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

La distance actuelle s’écarte de la dernière distance supérieure au seuil ?
dans l’affirmative, puis déplacer boîte vers la droite
Si ((currentDist > lastDist battre || currentDist < lastDist - battre) || currentDist > 300)
{

avant @ demi-vitesse vers la gauche (choisir la vitesse et le retard
(boîte de delay(300) c’est à dire selon vous et tension de la batterie telle que le mouvement jeter est souhaitable)
digitalWrite (motorDirection, basse) ;  Établit la bonne direction du canal A
digitalWrite (frein moteur, faible) ;      Débloquer le frein pour le canal B
analogWrite (motorThrottle, 100) ;    Fait tourner le moteur à pleine vitesse sur canal B
Delay(300) ;
digitalWrite (frein moteur, HIGH) ; Eengage le frein pour le canal B
rupture ;
}
lastDist = currentDist ;
}

Réglez la minuterie et lire le capteur
Attendez de mouvement qui dépasse le seuil, ou si la minuterie expire (5 s),
Delay(1200) ;  attendre pour stabiliser les lectures du capteur après l’ouverture de la porte
lastDist = analogRead(motionPin) ;
TimerB = millis() ;
tandis que (millis ()-TimerB < = 5000)
{
currentDist = analogRead(motionPin) ;
la boîte déjà bougea vers la droite et l’actuelle dévient de distance de la dernière distance supérieure au seuil ?
Dans l’affirmative, puis déplacer vers la gauche
Si ((currentDist > lastDist battre || currentDist < lastDist - battre) || currentDist > 300)
{

en arrière @ moitié de vitesse vers la droite (choisir la vitesse et le retard
(boîte de delay(300) c’est à dire selon vous et tension de la batterie telle que le mouvement jeter est souhaitable)
digitalWrite (motorDirection, HIGH) ; Établit à gauche en direction du canal B
digitalWrite (frein moteur, faible) ;   Débloquer le frein pour le canal B
analogWrite (motorThrottle, 100) ;   Fait tourner le moteur sur le canal B à mi-vitesse
Delay(300) ;
digitalWrite (frein moteur, HIGH) ; Eengage le frein pour le canal B
rupture ;
}

lastDist = currentDist ;

}
Delay(100) ;
Passer la main
pour (pos = 0; pos < 130; pos = 4)
{
handServo.write(pos) ;
Delay(15) ;
}

cacher la main
pour (pos = 130; pos > = 0; pos-= 4)
{
handServo.write(pos) ;
Delay(15) ;
}

porte de masquage
pour (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos) ;
Delay(15) ;
}
}

Articles Liés

Une autre Machine inutile - aka iUseless

Une autre Machine inutile - aka iUseless

J'ai eu la boîte d'un iPhone d'Apple disponible et fait une version de la machine inutile avec elle. J'ai l'intention de la donner à mon fils qui travaille chez Apple.Fondamentalement, j'ai suivi la méthode illustrée dans ce Instructable:.J'ai suivi
Comment construire une boîte inutile

Comment construire une boîte inutile

Ce guide vous montrera comment créer une simple boîte inutile. J'estime que cela pourrait être construit parfaitement en environ 6 heures. Elle nécessite des connaissances de base des circuits, l'IDE Arduino, et l'impression 3D est sympa, mais pas né
Comment construire une douche Walk-in (partie 2: montage mural Wedi)

Comment construire une douche Walk-in (partie 2: montage mural Wedi)

Il s'agit d'un tutoriel épique...Je vous promets que vous allez apprendre comment construire une douche à l'italienne en 1 heure ou moins.C'est une garantie de sérieuse, mais je me tiens derrière elle.Pourquoi ?Nous l'avons fait exprès étape par étap
Comment construire une mitrailleuse de niveau 3

Comment construire une mitrailleuse de niveau 3

Eh bien maintenant, j'ai cherché sur le site et découvert qu'il y a très peu, voire aucune, comment-à s sur Team Fortress 2, un des meilleurs a récemment publié des jeux faite par Valve.J'ai donc décidé de vous instruire sur la façon de faire quelque
Comment construire une fusée à eau simple

Comment construire une fusée à eau simple

Bienvenue à cette instructable !Que ce soit pour un projet d'école ou juste pour le fun, construire et lancer votre propre fusée à eau sont un difficile mais expérience impressionnante. Dans ce tutoriel nous allons vous montrer comment débuter et com
Comment construire une éolienne.

Comment construire une éolienne.

Aujourd'hui je vais vous montrer comment construire une éolienne en fonctionnement. Pour notre second projet de l'année, on nous a donné la tâche de produire une éolienne qui pourrait alimenter un petit moteur. Quel que soit l'équipe a produit le plu
Comment construire une cuisine extérieure

Comment construire une cuisine extérieure

Une cuisine extérieure est un excellent moyen de divertir votre famille et vos invités, mais aussi de jeter des parties incroyables sous ciel ouvert. La cuisine de plein air auront généralement tous le « fun » gadgets dont la plupart des gens n'ont p
Lessons Learned While Building une boîte inutile en utilisant un Arduino et un Instructable

Lessons Learned While Building une boîte inutile en utilisant un Arduino et un Instructable

Donc, j'ai trouvé une Instructable sur le site qui semblait assez bons. Tu vois, je voulais exploiter la puissance d'un Arduino pour exécuter une boîte inutile. J'allais construire et programmer à l'aide de l'Instructable j'ai trouvé sur le site. Non
Comment construire une maison de carte

Comment construire une maison de carte

dans ce instructable, je vais vous montrer comment construire une maison simple carte. Je vais aussi vous montrer quelques-unes de mes maisons de carte. S'il vous plaît ne pas critiquer cette instructable, certaines personnes là-bas ne sais vraiment
Comment construire une horloge qui projette l’heure sur le mur

Comment construire une horloge qui projette l’heure sur le mur

ce Instructable vous montre comment construire une horloge projecteur. Ce dispositif permet au temps de projet sur le mur. Basé sur un petit écran LCD réveil (pas trop petite, au lieu de cela, vous ne serez en mesure de projeter et de travailler dess
Comment construire une Jeep RC bricolage avec télécommande mini-missile launcher et intégré HD appareil photo

Comment construire une Jeep RC bricolage avec télécommande mini-missile launcher et intégré HD appareil photo

suivre ma chaîne youtube : http://www.youtube.com/user/educatetowin?feature=mheeSite Web : http://www.educatetube.comHôte : SipskiComment construire une télécommande RC Jeep avec mini-lance-missiles. Toujours porter des lunettes de sécurité et faire
Comment construire une zone de pique-nique chinois 3 niveaux

Comment construire une zone de pique-nique chinois 3 niveaux

Comment construire une zone de pique-nique chinois 3 niveauxEn même temps un cadeau pour un couple nouvellement marié, la boîte de pique-nique hiérarchisé est un élément plutôt inhabituel et pas un projet pour lequel vous trouverez facilement instruc
Comment construire une remorque vélo

Comment construire une remorque vélo

Dans ce Instructable je vais vous montrer comment construire une remorque de vélo pour se déplacer quoi que ce soit. J'utilise le mien pour prendre des trucs pour ma part. J'ai également fait un crochet pour attacher la remorque pour mon vélo électri
Comment construire une étagère sur mesure : recyclage en même temps

Comment construire une étagère sur mesure : recyclage en même temps

Bonjour et Bienvenue !Ce Instructable se composent d'un comment construire une étagère sur mesure ; et recyclage en même temps. C'est une idée de spin-off d'insperational de Innerbubba Instructable 60-Minute-bibliothèque. Donc, comme toujours, je doi