4 servo drive CellBot qui peut être contrôlé à distance. (8 / 8 étapes)

Étape 8: L’Arduino Code adapté à mon usage.

Cellbots base de code réécrite.

#include < Servo.h >
#include < EEPROM.h >

Servo myservoFR ;
Servo myservoFL ;
Servo myservoRR ;
Servo myservoRL ;
Servo myservoHead ;

#define BUFFERSIZE 20
#define InferFPin 0 //Front goupille analogique de capteur déduit
broche analogique du capteur déduit //Back #define InferBPin 1
#define SonarPin 2 //sonar broche analogique
broche analogique de #define LeftEarPin 3 //left oreille
broche analogique de #define RightEarPin 4 //right oreille /
#define VoltPin 5 //analog broche 5 utilisée pour la détection de VoltageCheck.
#define LEDBlue 5
#define LEDGreen 6
#define LEDRed 7
#define servoPinHead 8 / / Servo contrôle l’angle du téléphone
#define FLpin 9
#define FRpin 10
#define RLpin 11
#define RRpin 12
#define ledPin 13 / / LED s’allume lors de l’exécution des servos
#define régulateur 20

#define OneDeg 5,65 //setting délai rotationnel pour égal à un degré (tapis volant 2)
#define OneDeg 9.04 //setting délai rotationnel pour égal à un degré (feuillus 2 roues)
Contrôle de la tension de la batterie est avéré pour être la chose la plus difficile, j’ai tenté.  Après avoir tant batterie connectée et USB connecté...
donne des lectures différentes alors juste la batterie connectée.  En fait les lectures analogiques ont été renversés en quelque sorte.
#define shutdownVoltageCheck 978 / / ce numéro est unique pour chaque diviseur de tension et de la batterie combo.  Il s’agit de 20 % de la mine.
#define analogvoltconstant 144.6969

int iAnVal ; entrée de capteur sonar
int deg ;
int InferF = 0 ;
int InferB = 0 ;
int soundRT [72] ;
int soundLF [72] ;
distance de l’int [72] ;
int tempvolt ;
unsigned long BatteryIndex = 0 ;
unsigned long BatteryIndexThreshold = 150000 ; une dizaine de minutes.
unsigned long RegulatorIndex ;
unsigned long RegulatorTimerThreshold = 150000 ; intervalle, activer ou désactiver le régulateur de tension. une dizaine de minutes.
int VoltSampleSize = 1000 ;
Char = ' s dir' ; zéro la direction le bot a appris à conduire - vers l’avant, en arrière, à droite, à gauche, stop, définit pour arrêter.
int puissance =-1 ;
Boolean ConservePower = true ; Ceci détermine si le bot utilise power saving mode.
Warm-up int = 1000 ; délai pour démarrer l’installation en millisecondes.

Aucune configuration requise pour ces paramètres
servosActive booléen = false ; suppose que les servos ne se déplacent pas quand on commence
unsigned long stopRegulatorIndex=millis() ; utilisé pour le calcul de la RegulatorIndex course des servos
char incomingByte ; Contient des valeurs sérielles entrants
msg de char [8] ; Pour faire passer des messages retour Séris
char inBytes [BUFFERSIZE] ; Tampon pour la série dans les messages
int serialIndex = 0 ;
int serialAvail = 0 ;

** GAMME trouver ***-réglages sont pour les télémètres à ultrasons. OK pour lave comme-est si vous ne les avez pas sur votre robot
longue dist, microsecondes, cm pouces ; Utilisé par le télémètre pour le calcul des distances
const int rangePinForward = 2 ; Broche numérique pour le télémètre face vers l’avant (pour la distance de l’objet en face de bot)
const int rangeToObjectMargin = 25 ; (bot s’arrete lorsque ne distance plus proche que ce - la valeur 0 si aucun capteur)
const int rangePinForwardGround = 0 ; Broche numérique pour la baisse télémètre face à l’avant (pour bord de détection de la table)
const int rangeToGroundMargin = 0 ; Gamme en cm de la table (bot s’arrête lorsque la distance est supérieure à cette valeur 0 si aucun capteur)
const int rangeSampleCount = 3 ; Nombre de mesures à prendre et pour une valeur plus stable

//=============================================================================
void setup() {}

Serial.println ("start setup!") ;
Delay(Warmup) ;

mode de sortie d’entrée réglée ***
pinMode (LEDBlue, sortie) ;
pinMode (LEDGreen, sortie) ;
pinMode (LEDRed, sortie) ;
pinMode (servoPinHead, sortie) ;
pinMode(FLpin,OUTPUT) ;
pinMode(FRpin,OUTPUT) ;
pinMode(RLpin,OUTPUT) ;
pinMode(RRpin,OUTPUT) ;
pinMode (ledPin, sortie) ;
pinMode (régulateur, sortie) ;

digitalWrite(servoPinHead,0) ;

Serial.Begin(9600) ;
Serial3.Begin(115200) ;

lastNeckValue = readSetting (EEPROM_lastNeckValue, lastNeckValue) ;
Si (lastNeckValue! = DEFAULT_lastNeckValue) {}
myservoHead.attach(servoPinHead) ;
myservoHead.write(lastNeckValue) ;
// }

//***************************** Clear Sensor Map ************************
pour (deg = 0; deg < 72; deg = deg + 1) {}
soundRT [degrés] = 0 ;
soundLF [degrés] = 0 ;
distance [degrés] = 0 ;
}

défaut de servos éteint ***
myservoFR.detach() ;
myservoFL.detach() ;
myservoRR.detach() ;
myservoRL.detach() ;

LEDOff() ;

pinMode (régulateur, sortie) ; Affectez à broche 20 mode de sortie afin que le régulateur de VoltageCheck peut être activé ou désactivée.
digitalWrite (régulateur, faible) ; démarrer le régulateur de VoltageCheck en position d’arrêt.

Serial.println ("end configuration!") ;

}
//====================================================================================

Répond à plus de série et gère une pause et de rinçage les données à traiter avec Android comms série
void serialReply (char * sensorname, char * tmpmsg) {}
Serial3.Print(sensorname) ;
Serial3.Print(":") ;
Serial3.println(tmpmsg) ; Envoyer le message retour à la ligne sérielle
Attendez que le débogueur série se taire
Delay(200) ; Il s’agit d’un nombre magique
Serial3.Flush() ; efface toutes les données entrantes
}

Vérifier si assez RegulatorIndex se soit écoulée pour arrêter le bot et s’il est sûr d’aller de l’avant
Boolean checkIfStopBot() {}
int tempfrontsonar = Averagefive(SonarPin) ;
Serial.Print ("front sonar:") ;
Serial.println(tempfrontsonar) ;
int tempfrontinfer = Averagefive(InferFPin) ;
Serial.Print ("avant de conclure:") ;
Serial.println(tempfrontinfer) ;
int tempbackinfer = Averagefive(InferBPin) ;
Serial.Print ("dos déduire:") ;
Serial.println(tempbackinfer) ;
Serial.println() ;

Si ((dir == « f ») & & ((tempfrontsonar < rangeToObjectMargin) || (tempfrontinfer < 200))) {
Stop() ;
servosActive = false ;
retourne la valeur true ;
} ElseIf (dir == « b ») {}
Si (! () (tempbackinfer < 650) & & (tempbackinfer > 450))) {}
Stop() ;
servosActive = false ;
retourne la valeur true ;
}
}
retourne la valeur false ;
}

Envoyer commande au dispositif de Bluetooth pour débuter pairing
void pairBluetooth() {}
Serial3.Print("\r\n+INQ=1\r\n") ; Il s’agit de Seeedstudio maître/esclave (variation selon les besoins pour votre modèle)
}

Lit entrée série si disponible et analyse des commande lorsque le commandement intégral a été envoyé.
void readSerialInput() {}
serialAvail = Serial3.available() ;
Lire ce qui est disponible
pour (int i = 0; i < serialAvail; i ++) {}
Stocker dans la mémoire tampon.
inBytes [i + serialIndex] = Serial3.read() ;
Vérifier la fin de la commande.

Si (inBytes [i + serialIndex] == « \n » || inBytes [i + serialIndex] == «; » || inBytes [i + serialIndex] == ' >') {//Use ; lorsque vous utilisez le Serial Monitor
inBytes [i + serialIndex] = « \0 » ; fin du char de la chaîne
parseCommand(inBytes) ;
serialIndex = 0 ;
}
else {}
attend plus de la commande à venir plus tard.
serialIndex += serialAvail ;
}
}
}

Nettoie et traite la commande
void parseCommand(char* com) {}
Si (com [0] == « \0 ») {return;} //bit de vérification des erreurs
début int = 0 ;
commencer de commande
tandis que (com [Démarrer]! = ' <') {}
Start ++ ;
Si (com [Démarrer] == « \0 ») {}
ce n’est pas là. Doit être ancienne version
Démarrer = -1 ;
rupture ;
}
}
Start ++ ;
Passer au début
int i = 0 ;
tandis que (com [i + début - 1]! = « \0 ») {}
com [i] = com [start + i] ;
i ++ ;
}
performCommand(com) ;
}

void LEDWhite() {}
digitalWrite (7, faible) ;
digitalWrite (6, faible) ;
digitalWrite (5, faible) ;
}

void LEDOff() {}
digitalWrite (7, HIGH) ;
digitalWrite (6, HIGH) ;
digitalWrite (5, HIGH) ;
}

void Detach() {}
Serial.println ("détacher servos!") ;
myservoFR.detach() ;
myservoFL.detach() ;
myservoRR.detach() ;
myservoRL.detach() ;
Delay(150) ;
}

void Attach() {}
Serial.println ("Attach servos!") ;
myservoFR.attach(FRpin) ;
myservoFL.attach(FLpin) ;
myservoRR.attach(RRpin) ;
myservoRL.attach(RLpin) ;
digitalWrite (régulateur, HIGH) ;
}

void Forew() {}
Serial.println ("*** avant!") ;
dir = « f » ;
Si (pas checkIfStopBot()) {}
Attach() ;
myservoFR.write(180) ;
myservoFL.write(0) ;
myservoRR.write(180) ;
myservoRL.write(0) ;
RegulatorIndex = 0 ;
servosActive = true ;
}
}

void Backw () {}
int Tempdist = Averagefive(InferFPin) ;
Serial.Print ("distance en arrière:") ;
Serial.println(Tempdist) ;
Serial.println() ;
dir = « b » ;
Si (pas checkIfStopBot()) {}
Serial.println ("*** en arrière!") ;
Attach() ;
myservoFR.write(0) ;
myservoFL.write(180) ;
myservoRR.write(0) ;
myservoRL.write(180) ;
RegulatorIndex = 0 ;
servosActive = true ;
}
}

void Stop () {}
Serial.println ("*** Stop!") ;
myservoFR.detach() ;
myservoFL.detach() ;
myservoRR.detach() ;
myservoRL.detach() ;
dir = du ' ;
RegulatorIndex = 0 ;
serialReply ("i", « st ») ; Dire au téléphone que le robot arrêté ###
servosActive = false ;
}

vide laissé () {}
Serial.println ("*** tourner gauche!") ;
Attach() ;
myservoFR.write(180) ;
myservoFL.write(180) ;
myservoRR.write(180) ;
myservoRL.write(180) ;
dir = « l » ;
RegulatorIndex = 0 ;
servosActive = true ;
}

void droite () {}
Serial.println ("*** tourner droite!") ;
Attach() ;
myservoFR.write(0) ;
myservoFL.write(0) ;
myservoRR.write(0) ;
myservoRL.write(0) ;
dir = « r » ;
RegulatorIndex = 0 ;
servosActive = true ;
}

void CircleRt () {}
Serial.println ("*** cercle droit!") ;
Attach() ;
myservoFR.write(95) ;
myservoFL.write(0) ;
myservoRR.write(95) ;
myservoRL.write(0) ;
RegulatorIndex = 0 ;
}

void CircleLf () {}
Serial.println ("*** cercle gauche!") ;
Attach() ;
myservoFR.write(180) ;
myservoFL.write(85) ;
myservoRR.write(180) ;
myservoRL.write(85) ;
RegulatorIndex = 0 ;
}

void mydelay (int degress) {}
Serial.println (« mydelay start") ;
retard (int(OneDeg * degress)) ;
Serial.println ("end mydelay ») ;
}

int Averagefive (int listenpin) {}
moyenne d’int = 12 ;
int écouter [moyenne] ;
int index1 ;
int highindex = 0 ;
haut int = 0 ;
int lowindex = 0 ;
int faible = 1000 ;
total int = 0 ;

pour (index1 = 0; index1 < moyenne ; index1 = index1 + 1) {}
Ecoute [index1] = analogRead(listenpin) ;
Serial.println(Listen[index1]) ;
}

pour (index1 = 0; index1 < moyenne ; index1 = index1 + 1) {}
Si (Ecoute [index1] > haute) {}
élevé = Ecoute [index1] ;
highindex = index1 ;
}
}

pour (index1 = 0; index1 < moyenne ; index1 = index1 + 1) {}
Si (Ecoute [index1] < faible) {}
faible = Ecoute [index1] ;
lowindex = index1 ;
}
}

pour (index1 = 0; index1 < moyenne ; index1 = index1 + 1) {}
Si ((index1! = highindex) & & (index1! = lowindex)) {}
Total = total + Ecoute [index1] ;
}
}

Total = int (total / (moyenne-2)) ;
Serial.Print ("moyenne:") ;
Serial.println(total) ;
retour au total ;
}

Sub {Listen()
Serial.println ("=== Ecoute ===!") ;
pour (deg = 0; deg < 71; deg = deg + 1) {}
soundRT [degrés] = Averagefive(RightEarPin) ; écouter à l’oreille droite et assigner la valeur à tableau
soundLF [degrés] = Averagefive(LeftEarPin) ; écouter à l’oreille gauche et assigner la valeur à tableau
distance [degrés] = Averagefive(SonarPin) ; lire une valeur à partir du capteur
Serial.println(distance[deg]) ; afficher la valeur écrite dans le tableau de la distance pour ce sens
Right() ;
mydelay(5) ;
Stop() ;
}
Stop() ;
}

void Course() {}
int BestDistDeg = 0 ;
int BestDist = 0 ;
pour (deg = 0; deg < 71; deg = deg + 1) {}
soundRT [degrés] = analogRead(RightEarPin) ; écouter à l’oreille droite et assigner la valeur à tableau
soundLF [degrés] = analogRead(LeftEarPin) ; écouter à l’oreille gauche et assigner la valeur à tableau
Si (distance [deg + 1] > {distance[BestDistDeg])}
BestDistDeg = deg + 1 ;
}
Serial.Print("BestDist=") ;
Serial.println(distance[BestDistDeg]) ;
Serial.println(BestDistDeg) ; afficher la valeur écrite dans le tableau de la distance pour ce sens
}
Left() ;
mydelay((71-BestDistDeg) * 5) ; Tournez droite jusqu'à ce que le cours correspondant à plus longue distance est atteinte.
Stop() ;
Forew() ;
}

void ForewardBackward() {}
Serial.println ("*** Foreward Backward test Start!") ;
Forew() ;
Delay(2000) ;
Stop() ;
Delay(2000) ;
Backw() ;
Delay(2000) ;
Stop() ;
Delay(2000) ;
Serial.println ("*** Foreward Backward test fin!") ;
}

Sub base() {}
myservoFR.detach() ;
myservoFL.detach() ;
myservoRR.detach() ;
myservoRL.detach() ;
Delay(2500) ;
myservoFR.attach(FRpin) ;
myservoFL.attach(FLpin) ;
myservoRR.attach(RRpin) ;
myservoRL.attach(RLpin) ;
Serial.println ('envoi 110') ;
myservoFR.write(180) ;
myservoFL.write(0) ;
myservoRR.write(180) ;
myservoRL.write(0) ;
Delay(2500) ;
myservoFR.detach() ;
myservoFL.detach() ;
myservoRR.detach() ;
myservoRL.detach() ;
Delay(2500) ;
myservoFR.attach(FRpin) ;
myservoFL.attach(FLpin) ;
myservoRR.attach(RRpin) ;
myservoRL.attach(RLpin) ;
Serial.println('sending70') ;
myservoFR.write(0) ;
myservoFL.write(180) ;
myservoRR.write(0) ;
myservoRL.write(180) ;
Delay(2500) ;
}

void degreetest() {}
Serial.println ("start degreetest") ;
Stop() ;
Delay(5000) ;
Right() ;
mydelay(360) ;
Serial.println ("end degreetest") ;
}

void Signalblink() {}
LEDWhite() ;
Delay(500) ;
LEDOff() ;
Delay(500) ;
}

void forwardinfertest() {}
Delay(500) ;
Serial.Print ("senor SATTILITE avant:") ;
Serial.println(analogRead(InferFPin)) ;
seuil de danger < 200
}

void backwardinfertest() {}
Delay(500) ;
Serial.Print ("senor SATTILITE vers l’arrière:") ;
Serial.println(analogRead(InferBPin)) ;
seuil de danger < 300
}

void sonartest() {}
Delay(500) ;
Serial.Print ("senor Sonar:") ;
Serial.println(analogRead(SonarPin)) ;
seuil de danger < 30
}

int VoltageCheck() {}

index1 int = 0 ;
double voltsum = 0 ;
int analogvolt = 0 ;

pour (index1 = 0; index1 < VoltSampleSize ; index1 = index1 + 1) {}
voltsum = voltsum + analogRead(VoltPin) ;
}
analogvolt = int (voltsum / VoltSampleSize) ;
Serial.Print ("VoltageCheck:") ;
Serial.Print ("analag volt:") ;
Serial.println(analogvolt) ;
Serial.Print ("volt réel:") ;
Serial.println ((analogvolt / analogvoltconstant)) ;
Serial.println() ;
Return analogvolt ;
}

Sub BatteryCheckLED()
{
Si (VoltageCheck() > shutdownVoltageCheck) {}
digitalWrite (LEDRed, basse) ;
digitalWrite (LEDGreen, élevé) ;
} else {}
digitalWrite (LEDRed, élevé) ;
digitalWrite (LEDGreen, basse) ;
}
BatteryIndex = 0 ;
}

Sub RegulatorControlToggle()
{
puissance = puissance * -1 ;
Si (puissance == 1) {}
digitalWrite (régulateur, HIGH) ;
}
Si (puissance == -1) {}
digitalWrite (régulateur, faible) ;
}
RegulatorIndex = 0 ;
}

Sub Miser()
{
RegulatorIndex = RegulatorIndex + 1 ;
Si (RegulatorIndex == RegulatorTimerThreshold) RegulatorControlToggle() ;
}

//********************************************* end mine *******************************************

void performCommand(char* com) {}
volt de flotteur = 0 ;

Si (strcmp (com, « f ») == 0) {/ / avance
Forew() ;
} else if (strcmp (com, « r ») == 0) {/ / droite
Right() ;
} else if (strcmp (com, « l ») == 0) {/ / gauche
Left() ;
} else if (strcmp (com, « b ») == 0) {/ / vers l’arrière
Backw() ;
} else if (strcmp (com, « s ») == 0) {/ / Stop
Stop() ;
} else if (strcmp (com, « fr ») == 0 || strcmp (com, « fz ») == 0 || strcmp (com, « x ») == 0) {/ / impression face à capteur de distance
Dist = Averagefive(SonarPin) ;
EGTI (dist, msg, 10) ; Transformer un char de l’int dist
serialReply (« x », msg) ; Envoyer la distance sur la ligne série
} else if (strcmp (com, « z ») == 0) {/ / lecture et impression au sol face à capteur de distance
Dist = Averagefive(SonarPin) ; Dist = getDistanceSensor(rangePinForwardGround) ;
EGTI (dist, msg, 10) ; Transformer un char de l’int dist
serialReply (« z », msg) ; Envoyer la distance sur la ligne série
Serial.println(DIST) ;
} else if (strcmp (com, « v ») == 0) {/ / lire et imprimer VoltageCheck
v = VoltageCheck() ;
EGTI (volt, msg, 10) ; Transformer un char de l’int volt
Serial.println(Volt) ;
serialReply (« v », msg) ; Envoyer la distance sur la ligne série
} else if (strcmp (com, « h ») == 0) {/ / Help mode - activer/désactiver le débogage
Signalblink() ;
} ElseIf (com [0] == ' n ') {/ / déplacer la tête vers le haut
sscanf (com, « n %d », & lastNeckValue) ; Analyser l’entrée en plusieurs valeurs
myservoHead.attach(servoPinHead) ;
myservoHead.write(lastNeckValue) ;
EEPROM.write (EEPROM_lastNeckValue, lastNeckValue) ;
Si {(débogage)
Serial.Print ("cou déplacé vers") ;
Serial.println(lastNeckValue) ;
//}
} ElseIf (com [0] == « p ») {/ / initie Bluetooth appairage jusqu'à un autre périphérique peut se connecter
pairBluetooth() ;
} else {}
serialReply ("e", com); / / Echo commande inconnue retour
Si {(débogage)
Serial.Print ("commande inconnue:") ;
Serial.println(com) ;
// }

0-9, w, n, o, i, c, h, d pour démo,
}
}

=== Principaux boucle en cours d’exécution à tous les RegulatorIndexs ===
void loop()
{
readSerialInput() ;
checkIfStopBot() ;

BatteryIndex = BatteryIndex + 1 ;
Si (BatteryIndex == BatteryIndexThreshold) BatteryCheckLED() ;

Si (ConservePower) Miser() ;
}

Articles Liés

Faire un simple top jeu de strach qui peut être contrôlé manuellement

Faire un simple top jeu de strach qui peut être contrôlé manuellement

Hé là ! Il s'agit d'une toupie, créée à partir de la v 1.5 moteur à courant continuqui peut être contrôlé manuellement avec un aimant...espérons qu'il vous plairaÉtape 1: matériauxpour le jouet, vous aurez besoin :~ 1 moteur à courant continu~ tourne
Un contrôleur d’arrosage qui peut être mis en réseau Accueil

Un contrôleur d’arrosage qui peut être mis en réseau Accueil

Quelques semaines auparavant, j'ai publié un module de contrôleur peu grand qui fourni 6 relais de pouvoir être piloté depuis un ordinateur via un réseau.  Après que j'ai publié, je suis arrivé à penser que la même conception de base, avec quelques c
Comment faire un iphone/android/web contrôlable rallonge électrique qui peut être utilisé pour contrôler votre mijoteuse, porte de garage, cafetière, cuiseur à riz, blender smoothie... poisson barboteur de réservoir ou tout autre dispositif électronique d

Comment faire un iphone/android/web contrôlable rallonge électrique qui peut être utilisé pour contrôler votre mijoteuse, porte de garage, cafetière, cuiseur à riz, blender smoothie... poisson barboteur de réservoir ou tout autre dispositif électronique d

Cette instructable va vous apprendre comment créer un cordon ordinateur/iPhone/Android-contrôlables qui peut contrôler quoi que ce soit électrique de n'importe où avec un accès internet. La build vous coûtera 60$ et il est assez facile à faire. Il vo
Ce qui peut être fait d’une lampe à incandescence

Ce qui peut être fait d’une lampe à incandescence

Je suis très heureux de vous accueillir à ma chaîne et dans cette vidéo je vais vous montrer une idée intéressante sur ce qui peut être fait d'une ampoule grillée.
Ce qui peut être fait de couvercles de bouteille ?

Ce qui peut être fait de couvercles de bouteille ?

https://www.youtube.com/watch?v=a-Icu7fOCao&feature=youtu.beÉtape 1: C'est un projet très simple et ne nécessite qu'un cure-dent plus léger, casquettes, de bouteille en plastique, ciseaux ! Je montre comment modifier un bouchon de bouteille en plasti
Ce qui peut être fait de bouteille en plastique couvercles

Ce qui peut être fait de bouteille en plastique couvercles

https://www.youtube.com/watch?v=n3XvtZWPvUA&feature=youtu.beÉtape 1: je montre comment modifier un bouchon de bouteille en plastique dans une buse. Le bouchon de la bouteille en plastique est chauffé sur un briquet jusqu'à ce qu'il devient malléable
Un outil simple qui peut être fait à partir de déchets, mini couteau électrique de pcb

Un outil simple qui peut être fait à partir de déchets, mini couteau électrique de pcb

Parfois nous avons rattrapé à travailler quelque chose cause il est un outil dont vous avez besoin, mais vous ne l'avez pas. Peut-être que vous pourriez le faire des choses qui sont autour de vousÉtape 1 : ce dont vous avez besoin est :-x inutilisés
.25 ultra Wallet minimaliste slim, agrafe d’argent, métal décapsuleur, carte de crédit qui peut être attaché à votre cas android

.25 ultra Wallet minimaliste slim, agrafe d’argent, métal décapsuleur, carte de crédit qui peut être attaché à votre cas android

Salut les gars tout en essayant de modéliser un cas android similaire à mon cas iphone je suis sorti avec un portefeuille peu cool qui peut vous retenir jusqu'à ce que je reçois le cas android fait... Espèce ultra mince et minimaliste est imperméable
Entrer dans n’importe quel site qui peut-être être bloqués - Just ont accès au poste de travail

Entrer dans n’importe quel site qui peut-être être bloqués - Just ont accès au poste de travail

dans ce instructable j'utilise une page Web au hasard - yes.google.com pour accéder aux instructables.com lorsqu'il est bloqué. Ceci est possible en raison de remappage du domaine.Cette idée est également dans l'instructable ici.Étape 1: Ce que vous
HOMOPOLAIRE moteur qui peut être fait à la maison

HOMOPOLAIRE moteur qui peut être fait à la maison

il s'agit d'une instructable qui montrera à vous de faire un moteur de choses vous avez couché autour de la maisonÉtape 1: matériaux D-batterie, aimant plat, tige quelconque (j'ai utilisé une vis), fil, Casing(optional), de cuivre plat mince morceau
Ce qui peut être prouvée de bulles d’air | Bubble Wrap expérience

Ce qui peut être prouvée de bulles d’air | Bubble Wrap expérience

https://youtu.be/A2so-u0WkqsÉtape 1: De bubble wrap peut fait beaucoup d'idéesDans ce tutoriel d'instructables je vous montre comment faire des bonbons Jell-o en forme de bulles.Tu as besoin de:-bulles d'air ;-300 ml d'eau bouillante ;-70 g de gélati
Ce qui peut être fait de banane ?

Ce qui peut être fait de banane ?

https://youtu.be/FWNsXNEN3SsÉtape 1: Faire un Gummy Jello banane vous devez ! Ce que vous aurez besoin : - 3 bananes,-gélatine de kiwi (70g) + eau bouillante (300ml)-gélatine d'orange (70g) + eau bouillante (300ml)-gélatine de framboises (70g) + eau
Faire un ventilateur contrôlé à distance !

Faire un ventilateur contrôlé à distance !

Dans ce tutoriel, vous apprendrez comment faire un attachement de fan très simple qui peut être contrôlé par une télécommande.Étape 1: matériauxPour ce projet, vous aurez besoin du matériel suivant :1 9g Servo Micro + cor + vis pour cor - 2,00 $1 TSO
Arduino basé compteur d’énergie solaire PV avec connectivité Xively (peut être surveillée sur android ou iPhone)

Arduino basé compteur d’énergie solaire PV avec connectivité Xively (peut être surveillée sur android ou iPhone)

Ça fait environ deux jours que j'ai fait la génération Arduino PV compteur, mais c'était une erreur de ne pas de prendre des photos étape par étape avant de continuer pour les tests finaux. Et c'était une idée terrible pour afficher la boîte de brute