Circuits

Com construir una altra màquina inútil: fàcil de fer i difícil d'utilitzar: 9 passos (amb imatges)

Три основных способа сети

Три основных способа сети

Taula de continguts:

Anonim

Es construeixen moltes màquines inútils, per què construir-ne una altra? Simplement, és molt divertit :) divertit i divertit.
Vaig intentar donar a aquesta versió un personatge, ja que sempre vaig sentir que hi havia algú "pensant dins de la caixa", així que aquí ho vaig provar, espero que hagi aconseguit donar-li "una" vida!
Estic molt feliç de compartir amb vosaltres tots els passos, amb totes les esperances de que pugueu construir fàcilment la vostra i donar-li un caràcter amarg o millor. La meva versió es basa en Arduino, potser pensis que és una cosa excessiva, però donada la flexibilitat que em va donar, crec que val la pena.
Aquí teniu un vídeo de tot. Més endavant, passem a les parts, passos, esquemes i codi
Avisa'm els teus comentaris i / o preguntes si n'hi ha.
Espero que gaudeixis!
f.

Subministraments:

Pas 1: Com funciona?

Tot està connectat a una placa Arduino, el tauler espera fins que el commutador estigui configurat com a lògica ALTA, és a dir, quan feu clic en el commutador, la placa emetrà dos servomotors per moure's d'una manera específica (més endavant, més tard), i després , el servo connectat a la "mà" girarà el commutador cap a la posició OFF i tornarà a la caixa, seguit del servo "porta". llavors tot es repeteix.
Si veieu el vídeo anterior, cada cop que el commutador estigui activat, la màquina respon de manera diferent, i això es fa simplement escrivint diferents funcions amb diferents temps en el codi Arduino (els anomeno "Moviments"). Cada vegada que l'interruptor està activat, estic trucant a un nou moviment fins que hagi acabat tot, torno a començar. Tingueu en compte que al pas 9, he proporcionat una altra versió del codi que selecciona moviments aleatoris en lloc de seqüencial. Podeu afegir tants moviments com vulgueu, sempre que tingueu prou memòria a l'Arduino.
L’arduino sempre està activat, per això he afegit un interruptor per a la bateria per estalviar energia quan la màquina no s’utilitza. Ja estic planejant utilitzar una interrupció al commutador, en lloc de la simple detecció ALTA / BAIX simple, i acoblar-la amb el mode de repòs. Això estalviarà energia quan la màquina no estigui en ús i, a més, permetrà que estigui sempre preparada (però això també complicarà el codi). Per tant, ara com ara, només és un simple interruptor ON / OFF i el tauler sempre funciona .

Pas 2: Les peces

Necessitarà:
Obligatori:
1. Una caixa
2. Qualsevol targeta Arduino amb sortides PWM (a vegades tinc una antiga, la Diecimila)
3. Dos servomotors RC estàndard (he utilitzat el Futaba - S3003, tenen un parell de 3,2 Kg / cm, més que suficient per moure la porta o la mà)
4. Una bateria de 6-12 V (vaig utilitzar la bateria de drone AR, és un 11.1 v / 1000 mA)
3. Un interruptor SPTT o SPST per al disparador (bàsicament, qualsevol commutador que us convingui)
5. Un altre interruptor per a la bateria
6. Un polsador per restablir l'Arduino per si voleu reiniciar el moviment / codi de la part superior.
7. Alguns cables de pont

Opcional:
En cas que vulgueu dissenyar un moviment que inclogui el moviment de la caixa (com el darrer moviment del vídeo), podeu obtenir:
1. Un escut de motor Arduino, també serà útil per a altres projectes (o podeu dissenyar-vos un pont H, cercar-lo)
2. Un cotxe RC econòmic perquè pugueu portar el motor de corrent continu i la caixa del canvi
A més, encara a la secció "opcional", he construït un circuit de desmuntatge de maquinari per tenir un disparador net quan el commutador està activat / desactivat. Es pot ometre i implementar fàcilment en el programari arduino utilitzant retards o temporitzadors. Vaig fer el debounce del maquinari perquè aviat canviaré el codi per utilitzar les interrupcions i, com que aquestes últimes no permeten un ús fiable de les funcions de retard / temporitzador a la rutina, he hagut de construir un simple circuit de desistiment per a ús futur. . Si voleu saltar aquesta part, només cal que connecteu un simple interruptor / resistència al pin 2 de l'arduino i implementeu una rutina de programari de rebot.
Per al debounce de maquinari:
1. condensador electrolític de 10mF
2. Resistència de 10K
3. Una porta no lògica i.e Inverter (xip 74HC04). Disposa de sis inversors, però només en necessitareu.
Construïm-ho …

Pas 3: Construir la caixa

Podeu utilitzar qualsevol caixa adequada. He construït el meu, potser no perfecte, però encara molt personal :)
1. He utilitzat 2 fulls de fusta BALSA de 5 mm, molt fàcils de treballar amb un tallador, i relativament fort donat el seu pes increïble.
2. Consumit de 5 tubs de cola de cianoacrilat (també coneguts com a grans adhesius d’acció ràpida)
Aquí està:
A 22 x 14 x 14 cm Caixa

Pas 4: Esquema

A dalt es troba l'esquema (dibuixat amb Fritzing), que mostra:
Part superior: La placa principal d’arduino, 2 servos i connectivitat. Tingueu en compte que, com s'ha esmentat anteriorment, podeu substituir tot el circuit de rebot (superior dret) amb una simple resistència / commutador.
Els servos "de porta" i "de mà" es alimenten directament del pin de 5 v de l'Arduino. Els cables de senyal estan connectats respectivament al pin 9 i 10. Aquests pins admeten PWM, de manera que els estic utilitzant per controlar l'angle / posició del servo (de 0 a 180 graus màxim).
Nota: el botó vermell és només un restabliment (similar al que es troba a la cara de la placa d’arduino). Ho he afegit per tenir accés ràpid per restablir el tauler / programari en qualsevol moment sense obrir la caixa. Simplement connecteu el pin RESET al sòl per fer el restabliment.
Part inferior: és necessari si voleu utilitzar un motor de corrent continu i moure la màquina al voltant. Es tracta de l’escut de motor arduino, que està muntat a la part superior de l’Arduino, de manera que tots els pins dels dos taulers estan connectats entre si. Els mostrem a continuació com a separats només per tenir més claredat, espero que sigui! Aquest blindatge pot controlar fins a 2 motors de CC (2 canals A / B) amb una facilitat increïble. Estic utilitzant només un ara. Permet establir el codi, la direcció, la velocitat i els trencaments de qualsevol dels 2 canals / motors disponibles. Estic utilitzant el canal B com es mostra a continuació. on pin
13 per a la direcció, pin 11 per a la velocitat i pin 8 per al control de frens.
La bateria és de 11.1 / 1000 mA, connectada a l’escut, alimentant així el motor de corrent continu, la placa principal d’arduino i els servos. Si no utilitzeu l’escut, podeu connectar directament la bateria al canó d’energia de la placa principal d’arduino.

Pas 5: Fixació dels servos

Aquí hi ha els servos de mans i portes instal·lats:
En primer lloc, necessiteu instal·lar els servos en els seus llocs correctes, això necessita una mica de prova i error fins que obtingueu el moviment necessari. Podeu utilitzar l’exemple Servo que s’ofereix a l’arduino IDE per provar els servos i la quantitat de deflexió necessària per a cadascun, i així decidir el posicionament final i la longitud dels braços de la porta i dels servos manuals.
Els braços estan fets simplement de fusta de balsa, els vaig fer més gruixuts per suportar alguns llagrimeig.
A continuació es mostra com ho vaig fer. Només una nota sobre el servo manual. Necessitareu que el servomotor estigui directament sota la vora de la coberta (com es mostra a continuació), per evitar que tingueu molta feina a l'hora de fer una mà que pugui colpejar correctament el commutador i que pugueu tornar a la caixa.


Pas 6: Connexió del commutador, servos i arduino

Feu totes les connexions visualitzades en el pas esquemàtic i proveu de posar tot el que hi ha dins de la caixa similar al que es mostra a dalt:

Pas 7: opcional: el motor de corrent continu i la bateria

Per sobre, he posat la caixa del canvi del motor de corrent continu (extreta d’un cotxe de RC barat), que també mostra la col·locació de pastes i canvis.
Assegureu-vos de col·locar l’engranatge tan centrat com sigui possible per equilibrar la caixa, potser haureu de posar un poc de pes dins de la caixa per equilibrar-ne més després del muntatge final, ja que la bateria que utilitza és una mica pesada (100 gr) i ha provocat que es mogui en canviar o moure la caixa.
Tingueu en compte que el motor de corrent continu velocitat es controla mitjançant pin 11, Direcció per pin 13, i frens al pin 8, es considera el canal B de l’escut de l’arduino.
A través de l’assemblea vaig intentar ocultar tots els commutadors de cables i altres components per tal d’obtenir un simple quadre autèntic. Això s'aplica a les rodes, de manera que vaig fer una vora al voltant que allotja les rodes i la bateria, i també dóna accés al botó de restabliment vermell.

Pas 8: El codi

Per escriure un codi per a l'arduino, necessiteu l’arduino IDE (descarregueu-lo aquí)
Estic utilitzant la versió 1.0.5, només heu d'assegurar-vos de seleccionar el port COM correcte (finestres) i el tipus de placa des de dins de l'IDE i, a continuació, utilitzeu el codi següent i feu clic a pujar.
NOTA: Els valors que he utilitzat al codi per establir la deflexió màxima dels servos es fan exactament per a aquesta caixa tenint en compte el posicionament, els eixos i els angles dels servos. Ho vaig aconseguir a través del judici. Així que necessiteu idear els vostres propis valors segons la vostra caixa i col.locació servo.
Com a referència, a continuació s’indiquen els valors mínim / màxim que vaig utilitzar per a cada servomotor, ja que els veurà en el codi:
La porta:
80 amagatalls, 155 totalment oberts
La mà:
0 amagatall, 129 en prémer l'interruptor

Aquí teniu el codi (és millor descarregar el fitxer adjunt a aquest pas en comptes de copiar / enganxar des de sota):
#incloure
Servo doorServo;
Servo mà;
int switch_pin = 2; // configurar l'interruptor del pin 2
// variables del motor
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // moure el selector
int Testmove = 0; // mode de prova: establir per moure el nombre per provar només un moviment seleccionat
// (configurat a zero per executar-se normalment: rotonda sobre moviments d’ampliacions)
void setup ()
{
Serial.begin (9600);
PINMode (switch_pin, INPUT);
doorServo.attach (9); // posa servo de la porta al pin 9 pwm
handServo.attach (10); // estableix el servo de la mà al pin 10 pwm
doorServo.write (80); // posa la porta a la posició oculta
handServo.write (0); // posa la mà a la posició oculta

// Configuració del canal B, (ja que el canal A està reservat per servos de portes i mà i no es pot utilitzar simultàniament)
PINMode (motorDirection, OUTPUT); // Inicia el canal B del motor del motor
PINMode (motorBrake, OUTPUT); // Inicia el pin B del canal de fre

}

bucle buit ()
{
si (Testmove! = 0) {
selectedMove = Testmove;
}

// si el commutador està encès, moveu la porta i la mà per apagar-la …
if (digitalRead (switch_pin) == HIGH)
{

if (selectedMove> 10) {selectedMove = 0; } // quan es reprodueixen tots els moviments, repetiu els moviments des del començament
// a continuació es mostren tots els "moviments" que he dissenyat fins ara, cadascun és una funció que es fa a continuació al codi, executeu els noms, s’aconsegueix un estrany? sí, ja que alguns estan escrits en àrab
if (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 (); }

si (Testmove == 0) {
selectedMove ++; // passa al següent moviment si no està en mode de prova
}
}
}

// Biblioteca de moviments
// moviment bàsic
void switchoff ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}

// moveu-vos 3: obriu i espereu, a continuació, moveu-vos la mà i espereu-hi, després canvieu i amagueu
void switchoffbitaraddod ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (800);
// Moving hand
per (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
retard (15);
}
retard (1000);
per (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);


}

}

// mogui 4: obriu la porta i tanqueu-la moltes vegades, espereu-la, torneu a tornar ràpidament un senyalador i es tanca.

void crazydoor ()
{

// Porta mòbil
per (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
retard (15);
}
// Porta mòbil
per (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
retard (15);
}
retard (700);
// Porta mòbil
per (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (700);
// porta amagada
per (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
retard (15);
}

// ---- de commutador de ---- //
// Porta mòbil
per (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
retard (15);
}

}

// moure 5: obrir la porta, llavors moure la mà molt lentament cap endavant i cap enrere per amagar-se molt lentament i després tancar la porta ràpidament
void crazyslow ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
retard (30);
}

// Moving hand
per (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
retard (30);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
retard (30);
}

// porta amagada
per (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
retard (30);
}
retard (100);
per (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
retard (15);
}

}
// moure 6:
void m7anika7anika () {
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
retard (15);
}
retard (800);


// porta amagada
per (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

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

// Moving hand
per (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}


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



}
void m3alla2 () {
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
retard (2000);

per (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

per (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
per (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (500);
// amagatall
per (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}

void matrix ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
retard (15);
}

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

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

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}

}
void sneak ()
{
// Porta mòbil
per (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
retard (30);
}
retard (2000);

// Moving hand
per (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
retard (30);
}

retard (500);

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

per (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
retard (15);
}
retard (500);
// amagatall
per (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
retard (15);
}
retard (100);
per (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
retard (15);
}
retard (100);
per (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
retard (15);
}
retard (100);

per (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}


void zee7 ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (2000);
// reenvia a la meitat la velocitat a l'esquerra
digitalWrite (motorDirection, LOW); // Estableix la direcció dreta del canal B
digitalWrite (motorBrake, LOW); // Desactiva el fre per al canal B
analogWrite (motorThrottle, 100); // Gira el motor al canal B a tota velocitat
retard (300);
digitalWrite (motorBrake, HIGH); / / Eengage the Brake for Channel B
retard (2000);

// cap enrere @ a meitat velocitat cap a la dreta
digitalWrite (motorDirection, HIGH); // Estableix la direcció esquerra del canal B
digitalWrite (motorBrake, LOW); // Desactiva el fre per al canal B
analogWrite (motorThrottle, 100); // Gira el motor al canal B a la meitat velocitat
retard (300);
digitalWrite (motorBrake, HIGH); / / Eengage the Brake for Channel B
retard (1000);

// Moving hand
per (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}


Pas 9: Actualització opcional: Detecció de moviments

Tinc un sensor de proximitat avui (GP2Y0A21), de manera que ara el puc utilitzar per moure la màquina si l'usuari s'apropa al commutador :)
Per a aquest pas addicional, estic assumint que ja heu construït les rodes per permetre el moviment (vegeu el pas opcional 8). Tot el que queda és afegir el sensor i fer algunes modificacions al codi de detecció de moviments.
El sensor té 3 cables, un cable de senyal groc connectat pin 3 a l'arduino, mentre que el vermell i negre estan connectats a v5 i sòl respectivament a la pissarra.
He posat el sensor amagat sota la porta com es mostra a la imatge, de manera que pot "veure" el moviment de l'usuari només quan la porta s'obre. exactament el que necessito!
També vaig haver de canviar una mica el codi (aquí) per implementar una rutina de detecció de moviments (vegeu el codi, en funció zee7 () ), de manera que quan es detecta un moviment, la caixa es mourà, primer a la dreta, a continuació, a l’esquerra, llavors la mà gira l’interruptor i s'amaga. El codi és molt comentat, espero que no ho hagis exagerat!
Podeu trobar el codi actualitzat a continuació, també tingueu en compte que he fet que la màquina prengui els moviments aleatòriament, es pot canviar de nou a seqüencial si només heu de configurar booleà aleatòria = false;
Gràcies TOTS pels vostres bons suggeriments.
El codi (És millor descarregar el fitxer adjunt a aquest pas en comptes de copiar / enganxar des de sota):
#incloure
Servo doorServo;
Servo mà;
Timer A, TimerB sense signar; // temporitzador per a la rutina de detecció de moviments
int switch_pin = 2; // configurar l'interruptor del pin 2
// variables del motor
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// Variables de distància
int motionPin = 3; // pin del sensor de moviment a l’analògic 0
int lastDist = 0; // per recordar l'última distància
int currentDist = 0;
int trepitja = 200; // Llindar per al moviment (establiu-lo de tal manera que obtingueu la sensibilitat desitjada de la detecció del moviment)

int pos = 0;
int selectedMove = 0; // moure el selector
int Testmove = 0; // mode de prova: establir per moure el nombre per provar només un moviment seleccionat
// (configurat a zero per executar-se normalment: rotonda sobre tots els moviments)
booleà aleatòria = true; // si és cert, el quadre farà els motors aleatòriament, si es defineix com a fals, llavors els moviments es faran de manera successiva de l'1 al 10

void setup ()
{
Serial.begin (9600);
PINMode (switch_pin, INPUT);
doorServo.attach (9); // posa servo de la porta al pin 9 pwm
handServo.attach (10); // estableix el servo de la mà al pin 10 pwm
doorServo.write (80); // posa la porta a la posició oculta
handServo.write (0); // posa la mà a la posició oculta
// Configuració del canal B, ja que el canal A està reservat per servos de portes i mà i no es pot utilitzar simultàniament
PINMode (motorDirection, OUTPUT); // Inicia el canal B del motor del motor
PINMode (motorBrake, OUTPUT); // Inicia el pin B del canal de fre

}

bucle buit ()
{
// si el commutador està encès, moveu la porta i la mà per apagar-la …
if (digitalRead (switch_pin) == HIGH)
{

if (Testmove == 0)
{

if (randomize == false)
{
si (seleccionatMove> 10)
{
selectedMove = 0; // Quan es reprodueixen tots els moviments, repetiu els moviments des del començament
}
}
més
{
selectedMove = random (11);
}
}
més
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
if (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 (); }

if (Testmove == 0 && randomize == false) {
selectedMove ++; // canvia al següent moviment si no està en mode de prova
}
}
}
// Biblioteca de moviments
// moviment bàsic
void switchoff ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}

// moveu-vos 3: obriu i espereu, a continuació, moveu-vos la mà i espereu-hi, després canvieu i amagueu
void switchoffbitaraddod ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (800);
// Moving hand
per (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
retard (15);
}
retard (1000);
per (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);


}

}

// mogui 4: obriu la porta i tanqueu-la moltes vegades, espereu-la, torneu a tornar ràpidament un senyalador i es tanca.

void crazydoor ()
{

// Porta mòbil
per (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
retard (15);
}
// Porta mòbil
per (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
retard (15);
}
retard (700);
// Porta mòbil
per (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (700);
// porta amagada
per (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
retard (15);
}

// ---- de commutador de ---- //
// Porta mòbil
per (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
retard (15);
}

}

// moure 5: obrir la porta, llavors moure la mà molt lentament cap endavant i cap enrere per amagar-se molt lentament, i després tancar ràpidament la porta
void crazyslow ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
retard (30);
}

// Moving hand
per (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
retard (30);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
retard (30);
}

// porta amagada
per (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
retard (30);
}
retard (100);
per (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
retard (15);
}

}
// moure 6:
void m7anika7anika () {
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
retard (15);
}
retard (800);


// porta amagada
per (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

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

// Moving hand
per (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}


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



}
void m3alla2 () {
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
retard (2000);

per (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

per (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
per (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (500);
// amagatall
per (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}

void matrix ()
{
// Porta mòbil
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}

// Moving hand
per (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
retard (15);
}

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

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

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}

}
void sneak ()
{
// Porta mòbil
per (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
retard (30);
}
retard (2000);

// Moving hand
per (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
retard (30);
}

retard (500);

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

per (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
retard (15);
}
retard (500);
// amagatall
per (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
retard (15);
}
retard (100);
per (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
retard (15);
}
retard (100);
per (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
retard (15);
}
retard (100);

per (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
retard (15);
}

per (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}
// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}

// aquest moviment obrirà la porta i esperarà el moviment, si es detecta a prop del commutador,
// La caixa es mou primer a la dreta i, a continuació, cap a l'esquerra, i finalment la mà es mou i apaga l'interruptor
void zee7 ()
{

//obre la porta
per (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
retard (15);
}
retard (1200); // espera per estabilitzar les lectures del sensor després d’obrir la porta

// configureu el temporitzador i llegiu el sensor
// espera el moviment que excedeixi el llindar o si expira el temporitzador (5 segons),
lastDist = analogRead (motionPin);
TimerA = millis ();

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

// La distància actual es desvia de l’última distància per sobre del llindar?
// si sí, moveu el quadre cap a la dreta
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// reenvia la meitat de la velocitat a l'esquerra (seleccioneu la velocitat i el retard
// (i.e retard (300) segons la vostra caixa i tensió de la bateria de manera que el moviment de tir sigui desitjable)
digitalWrite (motorDirection, LOW); // Estableix la direcció dreta del canal A
digitalWrite (motorBrake, LOW); // Desactiva el fre per al canal B
analogWrite (motorThrottle, 100); // Gira el motor al canal B a tota velocitat
retard (300);
digitalWrite (motorBrake, HIGH); / / Eengage the Brake for Channel B
trencar;
}
lastDist = currentDist;
}

// configureu el temporitzador i llegiu el sensor
// espera el moviment que excedeixi el llindar o si expira el temporitzador (5 segons),
retard (1200); // espera per estabilitzar les lectures del sensor després d’obrir la porta
lastDist = analogRead (motionPin);
TimerB = millis ();
while (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
/ / La caixa ja s'ha mogut cap a la dreta i la distància actual desviada de l’última distància per sobre del llindar?
// En cas afirmatiu, moveu-vos a l'esquerra
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// cap enrere @ a meitat velocitat cap a la dreta (trieu la velocitat i el retard
// (i.e retard (300) segons la vostra caixa i tensió de la bateria de manera que el moviment de tir sigui desitjable)
digitalWrite (motorDirection, HIGH); // Estableix la direcció esquerra del canal B
digitalWrite (motorBrake, LOW); // Desactiva el fre per al canal B
analogWrite (motorThrottle, 100); // Gira el motor al canal B a la meitat velocitat
retard (300);
digitalWrite (motorBrake, HIGH); / / Eengage the Brake for Channel B
trencar;
}

lastDist = currentDist;

}
retard (100);
// Moving hand
per (pos = 0; pos <130; pos = 4)
{
handServo.write (pos);
retard (15);
}

// amagatall
per (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (pos);
retard (15);
}

// porta amagada
per (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
retard (15);
}
}

3 persones que van fer aquest projecte!

  • AndyC159 ho va fer!

  • SamL84 ho va fer!

  • melton1313 ho va fer!

Vau fer aquest projecte? Comparteix-ho amb nosaltres!

Recomanacions

  • Màquina de classificació de cargols

  • PCB BOT (línia següent, obstacle que evita i robot controlat per Bluetooth en un PCB únic)

  • Classe d'Internet de les coses

  • Colors del concurs Rainbow

  • Concurs Fandom

  • Challenge del partit

194 Debats

0

Estàvem

Fa 4 anys a Introducció

Gràcies per això. Vaig fer el meu primer projecte Arduino basat en aquest instructable: un drac inútil!

4 respostes 0

AjannEstàvem

Respondre fa 3 anys

La vostra màquina de drac és increïble. !!! Artístic

0

TJAOkevinEstàvem

Respondre fa 3 anys

Impressionant !!!!!

0

riachiEstàvem

Respon fa 4 anys a Introducció

Ets increïble :) !!!

Gran personalitat per a un drac! M'agradaria poder tornar a fer el vídeo mentre el drac s'enfrontava directament a la càmera (de dalt a baix). Crec que serà divertit, així que veieu la llengua amagant-se!

Gràcies per compartir el vostre vídeo i m'alegro que el meu valor sigui útil

0

Estàvemriachi

Respon fa 4 anys a Introducció

Vaig intentar la vista superior en una etapa anterior, però no va funcionar (vaig veure massa part de l’interior desordenat), així que l’heu acomiadat quan vaig prendre aquest vídeo. Crec que tens raó, però: en la fase final, hauria estat genial! Malauradament, ja he donat el drac allà …

0

br1pro

fa 4 anys

Molt divertit! treball dur per arreglar els servos i dissenyar la mà. Gràcies per aquest instructable.

1 resposta 0

riachibr1pro

Respon fa 4 anys a Introducció

Gran treballador! realment bonic :) qualsevol vídeo?

0

Clincoln

fa 5 anys

Mireu el vídeo en primer lloc i riu

1 resposta 0

TobiasVClincoln

Respon fa 4 anys a Introducció

Sé que ho vaig fer! : D

0

rileyw

fa 5 anys

Super cool el vídeo va fer semblar que tenia una ment pròpia

0

Elitekilla117

Fa 5 anys a Introducció

La meva màquina inútil amb codi arduino i riachis! Es va convertir en un tardis del Dr. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 respostes 0

riachiElitekilla117

Respon fa 5 anys a Introducció

M'encanta !!!! :)) home molt ben fet, feliç de veure la vostra bomba de bombolles viva! Jo també la dramatització i la música: p no puc aturar-me a suggerir tres petites modificacions si ho puc :)?
- Seria genial posar la màquina en posició de peu, sé que això farà perdre l'ajut de la gravetat per tancar la porta, però una solució senzilla és posar 2 bandes de goma a l'interior de la porta d'una banda i al costat interior de la caixa per a l'altre extrem, això farà que la porta es tanqui quan el servo de la porta es tanqui … comproveu els meus passos de construcció, veureu la banda de cautxú al pas 6 …
- També sobre la pintura de les mans en negre, serà més astut i llis
! A més, la punta de la mà es pot pintar de sang vermellós o decorar-se amb una cara boja o alguna cosa així.
- Traieu l'últim moviment ja que no passa res (suposadament és el que mou la caixa) i escriviu el vostre propi moviment …
No obstant això, oblideu els suggeriments, em va encantar la vostra màquina! I gràcies per tantes gràcies home, si us plau, podeu reduir-les i mantenir el vídeo enfocat a la màquina :)
Espero que el seu gf li agradés!

0

Elitekilla117riachi

Respon fa 5 anys a Introducció

Hahah Gràcies per les felicitacions :) De fet, volia fer-ne molt més, però a causa de la crisi del temps que no podia encaixar en molts dels detalls que volia. M'agradaria afegir algun color als braços, però no tinc temps per a aquests. I volia dibuixar una cara al braç amb un sharpie però ja estava embolicat i llest per donar-li per Nadal. Hehehe. Crec que li encantarà. També volia que es posés de peu, però tenia por de que les bandes de cautxú posessin massa pes en els servos. La porta ja és bastant pesada. L’últim moviment que vaig mantenir, ja que us mantenia en suspens esperant que sortís. Hahaha, però agraeixo l'ajuda del meu amic! Definitivament val la pena!

0

chuckletushy

fa 5 anys

He de fer això … és increïble

0

Wrs715

Fa 5 anys a Introducció

Aquest és el primer projecte que he vist utilitzant un Arduino on vaig pensar: "Sí, això val la pena. Ara he de tenir-ne un". Una feina fantàstica.

0

siliconghost

Fa 5 anys a Introducció

Wow, impressionant assumir un projecte comú! M'encanta el seu gir per fer-lo més interessant!

0

bob3030

fa 5 anys

Un dispositiu inútil d’un home és un altre totalment impressionant, fora d’aquest món, pensem, divertit, cobejat per molts dispositius inútils. Gràcies per les actualitzacions del projecte. Gràcies per publicar.

0

wobbler

Fa 5 anys a Introducció

Pensament 1: l’ús d’un Arduino per a això és només un exagerat problema
Pensament 2: Després de veure el vídeo-Utilitzar un Arduino per això és només un geni pur!
M'inclino a la teva creativitat!

0

tocat

Fa 5 anys a Introducció

Això és molt seriós! Em recorda una personalitat Wall-E. Gràcies per un projecte tan genial!

0

gazillabytes

Fa 5 anys a Introducció

Realment inútil! Agradable. Estic inspirat i necessito construir-ne un per al meu escriptori. Gràcies.