Arduino King Cobra Game: 5 étapes

Arduino King Cobra Game: 5 étapes

Table des matières:

Anonim

À quand remonte la dernière fois qu'un appareil électronique vous a été empalé?

Pour moi, ça faisait trop longtemps.

Entrez … Le King Cobra Arduino! (TM, R, Copyright, Brevet en instance … pas vraiment).

J'ai eu quelques nouvelles pièces et je voulais construire quelque chose au cours de mon déjeuner récemment. C'est ce que je suis venu avec.

J'appelle ces sessions "One Hour Hackathons". Seulement, c'est juste moi, et je les chronomètre rarement, et oui, ils sont seuls.

Prendre plaisir! Vous ne trouverez pas de schéma ici, car je suis un artiste. Mais vous trouverez des photos mal prises et annotées! Yahoo!

AVERTISSEMENT: Je recommande de construire cela sans les crocs de pouce-pouce, les enfants. La maladie née du sang ne fait pas rire, pas plus qu’un procès. J'ai martelé le bout de mon virement pour qu'il soit émoussé (spoiler, je sais). Certains ont suggéré de bonnes idées, comme une pointe de marqueur rouge, une éponge imbibée de peinture et des fils électrochocs. On peut dire que tout vaut mieux que la punaise. Fais attention!

Provisions:

Étape 1: La recherche de pièces de serpent

Une liste des éléments indispensables à la réalisation de vos rêves les plus fous:

1. Un Arduino Peu importe (n'importe quel modèle devrait fonctionner). J'ai utilisé un micro

2. Un servo moteur analogique. Le mien est un Tower Pro SG90 avec un balayage à 180 degrés

3. Un capteur de distance à ultrasons PING

4. Un porte-piles avec piles. Le mien est de 6V au total, mais Arduino recommande 7-12 volts pour la stabilité

5. Une planche à pain ou un circuit imprimé pour le câblage

6. Câblage

7. Une petite cravate

8. une tête de serpent

9. Un peu de bande

Étape 2: cervelle de serpent

Mon serpent fonctionne sur un Arduino Micro. Vous pouvez utiliser n'importe quel Arduino, ajustez simplement vos broches en conséquence.

La façon dont cela fonctionne est la suivante:

1. Le capteur à ultrasons Ping lit la distance de vos mains ou des objets devant lui 50 fois par seconde

2. S'il est suffisamment proche, le servomoteur est tourné vers le bas dans votre main.

Comme le code fonctionne maintenant, la "tête Cobra" n'attend pas que votre main se rapproche trop, mais se déplace en fonction de votre distance. Donc, plus vous vous rapprochez, plus il baisse pour vous aider.

Étape 3: Les yeux de serpent

Les "yeux" sont en réalité un capteur de distance à ultrasons. Celles-ci sont disponibles sur Radio Shack et en ligne.

Ils travaillent en envoyant un "ping" aigu puis en mesurant le temps qu'il faut pour l'entendre rebondir. Étant donné que la vitesse du son est connue, il peut déterminer à un centimètre environ la distance à laquelle l’objet est touché. Cool!

Il a 3 broches:

Une broche de terre (GND)

Une broche 5 volts (5V)

Une broche de signal (SIG)

Les deux premiers l'alimentent. La broche signal est responsable de l'envoi du ping, puis de l'écoute de son retour.

Étape 4: Muscle du serpent

Il s’agit d’un mini-moteur servo typique. Ils sont très pratiques à utiliser lorsque vous devez faire tourner un moteur dans une position exacte.

Ils sont assez rapides et ont un bon couple, mais veillez à ne pas les tirer dessus car ils pourraient se dissoudre avec le temps.

Ils ont trois fils:

marron / noir: terre -

rouge / orange: tension positive +

jaune: signal (envoie généralement une valeur comprise entre 0 et 180 degrés)

Étape 5: Le code Cobra (pas Python) HAH!

Voici le code Arduino que je cours. C'est une modification de leur échantillon de capteur à ultrasons Ping.

Ajuster la variable "numReadings" sur une valeur plus élevée aura pour résultat des lectures moins bruyantes, mais aussi un retard plus important dans le temps de réaction.

Prendre plaisir!

// Copier à partir d'ici …

#comprendre

Servo myservo; // crée un objet servo pour contrôler un servo

int val; // valeur de mappage de plage pour l'asservissement

const int pingPin = 7; // Broche de signal du capteur de ping de parallaxe

const int numReadings = 5; // mis plus haut pour lisser plus, provoque également plus de latence

lectures int numReadings; // les lectures de l'entrée analogique

int index = 0; // l'index de la lecture en cours

int total = 0; // le total cumulé

int moyenne = 0; // la moyenne

int lastValue = 0;

void setup() {

// initialise la communication série:

Serial.begin (9600);

myservo.attach (9); // attache le servo sur la broche 9 à l'objet servo

// efface le tampon de la valeur de lissage

for (int thisReading = 0; thisReading <numReadings; thisReading ++)

lectures thisReading = 0;

}

boucle vide ()

{

// établit des variables pour la durée du ping, // et la distance résulte en pouces et centimètres:

longue durée, pouces, cm;

int fadeValue = 0;

// Le PING))) est déclenché par une impulsion HAUTE de 2 microsecondes ou plus.

// Donnez au préalable une impulsion basse et basse pour assurer une impulsion haute et propre:

pinMode (pingPin, OUTPUT);

digitalWrite (pingPin, LOW);

delayMicroseconds (2);

digitalWrite (pingPin, HIGH);

délaiMicrosecondes (5);

digitalWrite (pingPin, LOW);

// La même broche est utilisée pour lire le signal du PING))): a HIGH

// impulsion dont la durée est le temps (en microsecondes) à partir de l'envoi

// du ping à la réception de son écho d'un objet.

pinMode (pingPin, INPUT);

duration = pulseIn (pingPin, HIGH);

// convertit le temps en distance

pouces = microsecondes vers pouces (durée);

cm = microsecondesToCentimètres (durée);

// le code de lissage commence ici

// soustrais la dernière lecture:

total = total - lectures index;

// lit le capteur:

lectures index = cm; // analogRead (inputPin);

// ajoute la lecture au total:

total = total + lectures index;

// avance à la prochaine position dans le tableau:

indice = indice + 1;

// si nous sommes à la fin du tableau …

if (index> = numReadings)

// … retourne au début:

indice = 0;

// calcule la moyenne:

moyenne = total / numReadings;

// le code de lissage se termine ici

// remappe la plage de valeurs et déplace le servo

val = moyenne;

val = carte (val, 10, 40, 0, 179); // valeur d'échelle à utiliser avec le servo analogique demi-tour Tower Pro (valeur comprise entre 0 et 180)

si (moyenne <25)

{myservo.write (val);} // définit la position du servo en fonction de la valeur mise à l'échelle si elle se trouve à une certaine distance

délai (10); // laisse le servo refroidir, ou quelque chose comme ça

}

microsecondes longues en pouces (microsecondes longues)

{

// Selon la fiche technique de Parallax pour le PING))), il y a

// 73,746 microsecondes par pouce (c’est-à-dire que le son voyage à 1130 pieds par

// seconde). Cela donne la distance parcourue par le ping, aller

// et revenons, nous divisons par 2 pour obtenir la distance de l'obstacle.

// Voir:

retour en microsecondes / 74/2;

}

microsecondes longues en centimètres (microsecondes longues)

{

// La vitesse du son est de 340 m / s ou 29 microsecondes par centimètre.

// Le ping va et vient, donc pour trouver la distance du

// objet on prend la moitié de la distance parcourue.

retour en microsecondes / 29/2;

}

//Jusqu'ici…