SADbot : le robot touchés selon les saisons de dessin (11 / 11 étapes)

Étape 11 : Le rendent intéressant

Maintenant, nous allons faire SADbot dessiner quelque chose d’intéressant. Couper deux environ 5
longueurs de FT de pêche ligne et attacher chacun sur le trou dans le centre de la
poulies. Attachez l’autre extrémité de la ligne à une pince à ressort et pince sur un
marqueur. Monter le livre blanc sur votre planche de toile avec du ruban ou colliers.

Nous allons dire les moteurs pas à pas à dessiner dans des directions aléatoires par défaut, puis
de se comporter comme ils le faisaient avant lorsque quelqu'un est couvrant une cellule photoélectrique. Cette volonté
créer un dessin comme ceux fait de SADbot dans la Galerie de fenêtre de Eyebeam.   Profitez ! Jouer avec les cellules photoélectriques, ainsi vous pouvez interagir avec SADbot et faire des dessins intéressants.

/*
SADbot v.03
SADbot dessinera une distance aléatoire dans une direction aléatoire jusqu'à un
cellule photoélectrique est bloqué. Lorsque SADbot détecte une cellule photoélectrique a été bloquée, il
tirera vers lui. Moteurs pas à pas sont conduits par le biais de Sparkfun
V4.3 EasyDriver
CC-GNU GPL par Ben Leduc-Mills et Fab Roberts
Créé : 2010.06
*/

#include //import bibliothèque de stepper
#define 200 étapes / / 360/1.8 (angle de pas) = 200 pas/tour
déclarer les nouveaux objets de moteurs pas à pas de la bibliothèque de stepper (un par moteur)
Stepper right_motor (marches, 6, 7) ; 6 = DIR, 7 = ÉTAPE
Stepper left_motor (marches, 11, 12) ; 11 = DIR, 12 = ÉTAPE
distance de l’int ; jusqu’où doivent aller moteurs
int le plus bas ; pour stocker la plus faible valeur de la cellule photoélectrique
int i ; pour une boucle

variables pour 4 cellules photoélectriques
int photo_up ;
int photo_down ;
int photo_left ;
int photo_right ;

Définissez la taille du canevas. 1000 marches est d’environ 4 pouces
#define CANVASWIDTH 32000
#define CANVASHEIGHT 20000

distance totale pour la vérification de limites
SADbot démarre au Centre (canvaswidth/2 et canvasheight/2)
flotteur totalWidth = CANVASWIDTH 2 ;
float totalHeight = CANVASHEIGHT 2 ;
int randomDirection ;
int randomDistance ;

void setup() {}
Serial.Begin(9600) ; lancer imprimé série alors nous pouvons voir les choses
régler la vitesse du moteur (en tr/min)
right_motor.setSpeed(200) ;
left_motor.setSpeed(200) ;
graine aléatoire permet d’obtenir mieux les nombres aléatoires
* la valeur une broche analogique que vous n’utilisez pas
randomSeed(analogRead(4)) ;
} / / fin d’installation

void loop() {}
lire et imprimer toutes les valeurs de capteur des broches analogiques 0-3
photo_up = analogRead(0) ;
Serial.Print("up") ;
Serial.println(photo_up) ;

photo_down = analogRead(1) ;
Serial.Print("Down") ;
Serial.println(photo_down) ;

photo_left = analogRead(2) ;
Serial.Print("left") ;
Serial.println(photo_left) ;

photo_right = analogRead(3) ;
Serial.Print("Right") ;
Serial.println(photo_right) ;

Delay(1000) ; Donnez-moi le temps de les lire dans le moniteur

avant l’application, vérifiez nos totalHeight et totalWidth
Serial.Print("totalHeight:") ;
Serial.println(totalHeight) ;
Serial.Print("totaWidth:") ;
Serial.println(totalWidth) ;
Delay(1000) ; Donnez-moi le temps de les lire dans le moniteur

stocker les valeurs de cellule dans un tableau
int photoValues [] = {photo_down, photo_left, photo_up, photo_right} ;
plus bas = 9999 ; Ceci réglé plus haut que les valeurs de cellule photo-électrique possible
boucle pour trouver la plus petite valeur de la cellule photoélectrique

pour (i = 0; i < 4; i ++) //4 = nombre de capteurs
{
Serial.println(photoValues[i]) ; imprime les photoValue tableau
assigner des cellule réelle valeur à la variable « plus basse » si elle est inférieure
que tout ce qui est « plus bas » est défini sur (commence à 9999)
Si (le plus bas > = photoValues [i]) {}
plus bas = photoValues [i] ;
}
Imprimez-le pour confirmer que la valeur la plus faible est sélectionnée
Serial.Print("lowest:") ;
Serial.println(lowest) ;
Delay(1000) ; attendre une seconde avant une boucle de sorte que nous pouvons lire les valeurs
} //end pour

distance = plus bas ; Définissez la distance de transport = valeur la plus basse

Si la valeur la plus basse indique une photocellule couverte, attirer vers le plus bas
modifier ce seuil selon éclairage
Si (le plus bas < 550)
{
trouver le capteur qui correspondait à l’aller plus bas, cette direction,
mais seulement si SADbot est dans les limites de la toile
Si ((plus bas == photoValues[0]) & & ((totalHeight + distance) <
CANVASHEIGHT))
{
(distance) ;
totalHeight += distance ; variable totalHeight incrément
}
ElseIf ((plus bas == photoValues[1]) & & ((totalHeight-distance) > 0))
{
vers le bas (à distance) ;
totalHeight = distance ; décrémente la variable totalHeight
}
ElseIf ((plus bas == photoValues[2]) & & ((totalWidth-distance) > 0))
{
gauche (distance) ;
totalWidth = distance ; décrémente la variable totalWidth
}
ElseIf ((plus bas == photoValues[3]) & & ((totalWidth + distance) <
CANVASWIDTH))
{
droit (à distance) ;
totalWidth += distance ; variable totalWidth incrément
}
} //end si

dans le cas contraire, personne ne couvre tous les capteurs, tirage au sort selon aléatoire
d’autre
{
Choisissez un chiffre aléatoire 1 à 9 pour mapper à la direction
randomDirection = aléatoire (1, 9) ;
Serial.Print ("direction aléatoire:") ;
Serial.println(randomDirection) ;

Choisissez le nombre aléatoire de 1 à 200 et à la carte à distance
randomDistance = aléatoire (1, 200) ;
Serial.Print ("distance aléatoire:") ;
Serial.println(randomDistance) ;
indications pour n’importe quelle valeur randomDirection généré
Switch (randomDirection)
{
cas 1: //go vers le haut
Si ((totalHeight + randomDistance) < CANVASHEIGHT)
{
Up(randomDistance) ;
totalHeight += randomDistance ;
}
rupture ;

cas 2: //go vers le bas
Si ((totalHeight-randomDistance) > 0)
{
Down(randomDistance) ;
totalHeight = randomDistance ;
}
rupture ;

case 3: //go à gauche
Si ((totalWidth-randomDistance) > 0)
{
Left(randomDistance) ;
totalWidth = randomDistance ;
}
rupture ;

case 4: droit //go
Si ((totalWidth + randomDistance) < CANVASWIDTH)
{
Right(randomDistance) ;
totalWidth += randomDistance ;
}
rupture ;

cas 5: position verticale //go
Si (((totalWidth + randomDistance) < CANVASWIDTH) & & ((totalHeight
+ randomDistance) < CANVASHEIGHT))
{
upRight(randomDistance) ;
totalWidth += randomDistance ;
totalHeight += randomDistance ;
}
rupture ;

case 6: //go upLeft
Si (((totalWidth-randomDistance) > 0) & & ((totalHeight +
randomDistance) < CANVASHEIGHT))
{
upLeft(randomDistance) ;
totalWidth = randomDistance ;
totalHeight += randomDistance ;
}
rupture ;

cas 7: //go carrément
Si (((totalWidth + randomDistance) < CANVASWIDTH) & & ((totalHeight-randomDistance) > 0))
{
downRight(randomDistance) ;
totalWidth += randomDistance ;
totalHeight = randomDistance ;
}
rupture ;

cas 8: //go downLeft
Si (((totalWidth-randomDistance) > 0) & & ((totalHeight-randomDistance) > 0))
{
downLeft(randomDistance) ;
totalWidth = randomDistance ;
totalHeight = randomDistance ;
}
rupture ;

par défaut : //just en cas
Left(0) ;
} //end commutateur
} else //end
} //end loop()

/*
Voici les fonctions directionnelles. Taille de boucle = distance.
Numéros de mesure positive sont dans le sens horaire, négatif dans le sens antihoraire
*/

Sub (int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(1) ;
left_motor.Step(-1) ;
}
}

Sub vers le bas (int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(-1) ;
left_motor.Step(1) ;
}
}

vide laissé (int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(-1) ;
left_motor.Step(-1) ;
}
}

Sub droit (int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(1) ;
left_motor.Step(1) ;
}
}

Sub vertical (int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(2) ;
left_motor.Step(-.2) ;
}
}

Sub upLeft(int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(.2) ;
left_motor.Step(-2) ;
}
}

vide carrément (int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(-.2) ;
left_motor.Step(2) ;
}
}

Sub downLeft(int distance)
{
pour (i = 0; i < distance; i ++) {}
right_motor.Step(-2) ;
left_motor.Step(.2) ;
}
}

Articles Liés

Comment transformer les bras robot axée sur les Adunio en une imprimante 3D et l’iphone 6 s dans un PTZ camara

Comment transformer les bras robot axée sur les Adunio en une imprimante 3D et l’iphone 6 s dans un PTZ camara

Après jour et dur travail nuit de, nous sommes finalement arrivés Dobot armer une imprimante 3D de haute précision ! Il est différent de l'imprimante 3D traditionnel Delta et XYZ. C'est peut-être le premier bras robotique Bureau qui peut être utilisé
Kit Robot pédagogique pour les débutants

Kit Robot pédagogique pour les débutants

mBot est un kit de robot pédagogique pour les débutants d'acquérir une expérience pratique sur la programmation graphique, électronique et robotique. C'est une solution tout-en-un pour l'apprentissage de la robotique et conçu pour l'éducation de la t
Pizza Happy Face pour toutes les saisons

Pizza Happy Face pour toutes les saisons

Qui pourrait dire non à une succulente tranche de pizza maison ? C'est le fast food plus populaire dans le monde. Notre dîner de famille de week-end préférée est la pizza. Il existe de nombreuses variétés de pizzas, mais mon favori de la famille est
4 commandes essentielles pour faire des dessins dans AutoCAD : les utiliser pour dessiner une étoile

4 commandes essentielles pour faire des dessins dans AutoCAD : les utiliser pour dessiner une étoile

Ce Instructable est écrit pour ceux juste apprendre et débutent avec AutoCAD, avec le but en passant sur quelques bons conseils. Il suppose que quelque facilité avec l'ordinateur.Je vais montrer comment faire l'étoile ci-dessus à l'aide de quatre com
Bras de Robot en carton pour les Robots bon marchés

Bras de Robot en carton pour les Robots bon marchés

C'est probablement l'Instructable j'ai hâte du meilleur parti de ma série "Pour les Robots bon marché". Il est le plus cool que j'ai fait jusqu'ici et par là même les plus difficiles.Robotique ne commence vraiment à se refroidir jusqu'à ce que v
ROBOT contrôlé par les doigts humains

ROBOT contrôlé par les doigts humains

Cette innovation vient les mouvements de la main qui peuvent contrôler un robot. Dans ce projet, j'utilise flex capteur et je prends le capteur flex lire et mettre cette lecture sur intel edison. comme une valeur analogique et manipuler ces valeurs e
Robot contrôlé manuellement les mouvements

Robot contrôlé manuellement les mouvements

Dans ce tutoriel nous allons construire un petit arduinobot que nous pouvons contrôler les mouvements de la main. Nous interfacer avec le robot à l'aide d'une webcam qui est pointée à un écran blanc. Nous passons notre doigt, qui est encapsulé dans u
Toutes les saisons, tous les jours fériés, dirigé les boucles d’oreilles électroniques

Toutes les saisons, tous les jours fériés, dirigé les boucles d’oreilles électroniques

OK, donc nous sommes sur le point de faire des boucles d'oreilles très poussées.Ce n'est pas un projet débutant, et je recommande à ceux qui veulent prendre cela, commencez par petits projets et travailler vos compétences jusqu'à présent.Donc d'abord
Construire un Habitat de toutes les saison extérieure Cat

Construire un Habitat de toutes les saison extérieure Cat

[début novembre 2012 - M. Max lit dans la maison de l'habitat]C'était au printemps de 2007 quand notre bien-aimé M. Spanky (alias Houdini) s'est échappé une fois de plus ; Cette fois-ci en sautant d'une fenêtre ouverte à l'étage. Heureusement, une se
Mixage de couleurs RGB LED touch jouet pour les enfants

Mixage de couleurs RGB LED touch jouet pour les enfants

je veux créer un jouet interactif pour mes enfants à jouer avec moi. Nous tenir mains ensemble, puis le RGB LED montre différentes couleurs. Maintenez serré ou plus léger, ou toucher différentes parties du corps de l'autre montrera des couleurs diffé
Ligne simple robot qui suit pour les débutants

Ligne simple robot qui suit pour les débutants

Suiveur de ligne est une machine qui peut suivre un chemin d'accès. Le chemin peut être visible comme un blackline sur une surface blanche (ou vice versa), ou il peut être invisible comme un champ magnétique-wikipedia.COMPOSANTS :1. dc motors-2 (vous
Peluches piège d’un 5 Gallon seau d’eau pour toutes les saisons

Peluches piège d’un 5 Gallon seau d’eau pour toutes les saisons

ventiler l'air humide chaud dans votre maison de la sécheuse. N'envoyez pas votre belle air chaud à l'extérieur. Quand il se réchauffe à l'extérieur, rapidement configurer le piège de la charpie pour évacuer vers l'extérieur et enregistrer votre syst
Une cuisine savoureuse et Camping pour toutes les saisons

Une cuisine savoureuse et Camping pour toutes les saisons

Quand j'ai été engagé dans l'étude travaille pour la nouvelle construction de routes dans le nord-est de l'Inde, deux de mes collègues ingénieurs et moi-même eu du mal à porter le déjeuner à emporter avec nous. Déjeuner ne pourrait pas être établie à
Comment faire toucher n' aller les patins de votre hélicoptère RC

Comment faire toucher n' aller les patins de votre hélicoptère RC

faire une unité de masse ou de voler avec ces skis pour hélicoptères rc! + comment faire les skis !Étape 1: matériaux Tapeciseauxchoix de la denthélicoptère RCet fiche ou carton légerÉtape 2: Faire 2 triangles Découper 2 triangles avec lumière m de c