Beaucoup d'entre vous ont remarqué que, souvent, dans les supermarchés et un plus grand espace de bureau disponible en différentes couleurs décorées avec de beaux aquariums en verre. Nous allons essayer de répéter la même chose, mais dans nos maisons.
Étape 1: Matériaux
Sol
Fleur (nous avons choisi de fougère)
Récipient en verre avec un sommet ouvert
Étape 2: Nettoyage
Laver bouteilles de verre avec de l'eau et du savon.
Laisser sécher avant de verser le sol.
Étape 3: Test
Soigneusement mis une fleur dans un bol, à droite dans le pot pour voir à quoi il ressemblera plante.
Étape 4: Modifier
Nous prenons la fleur et coupez les branches supplémentaires, au besoin, comme dans notre cas.
Étape 5: Sol
Transférer soigneusement la plante dans un récipient, mais sans le pot.
Remplissez la terre.
Étape 6: arrosage
Arrosé fleurs pour adoucir le sol. Ne abusez pas de ce fait.
Étape 7: Prêt
Décorez la salle quelques fleurs.
Total de 200 roubles pour acheter une bonne base pour un travail simple. Le projet a été réalisé avec des collègues étrangers Adruino Arts. Pour sa mise en œuvre doit connaître les principes de base de la robotique, de l'électronique et de comprendre un peu de programmation.
Dans le clip vidéo auteur de raconte et montre que nous devrions obtenir un résultat.
En plus de la lampes nous avons besoin d'un ensemble de Grove - Kit de Toy. Commandez en ligne vous pouvez acheter par prix 79,9 $.
L'idée principale - définition de l'état statique ou dynamique de l'objet par détection de mouvement. Si la réponse est positive, puis exécutez l'un des actionneurs et la lecture de message pré-enregistré. Dans le cas contraire, activé deuxième servo, et un enregistrement sonore différente.
Détermination de passer par une certaine forme de l'entrée. Ainsi, nous obtenons le résultat en code binaire 0 ou 1.
Recorder peut lire le son enregistré seulement 4 via un signal externe. Pour enregistrer (chaque 15 sec.), Il est nécessaire de passer sur le bouton «jouer» à «dossier». Après l'enregistrement nouveau bouton devrait passer. Cela peut être fait dans le code (jeu de fonction ()). Dans servo câble est de 3 "plus", "moins" et les données numériques. Le premier deux fournissent de la nourriture pour servo (max 7) et 3e se connecte à une sortie numérique, qui reçoit des informations sur l'état de l'interrupteur et par code.
Première analysé lampe. Nous ne avons pas besoin des composants électriques, mais devons travailler fondement même. Vous devez également quelques accessoires et éléments de soutien.
Faire un trou dans le tube pour connecter notre conception.
Le prototype de robot est prêt!
Étape 1: Glow
Utilisation de la lampe LED IKEA OLEBY (Food solaire).
L'interrupteur ne fonctionne que dans un appareil numérique, et donc il dépend sur le réseau actuel. Si nous passons podsoedynym Pay Seeeduino, vous pouvez définir le BAS de sortie numérique, puis il y aura cours. Lors de la mise HAUTE, il réapparaît.
Même au sein de la lampe et on branche une résistance pour protéger la LED.
Réglez l'élément lumière dans la base métallique.
Étape 2: Principe
Nous avons la lampe attachée servo contrôle du détecteur, triple axe accéléromètre, enregistreur et jouons quatre sons différents.
Le principe de base de la lampe est la suivante:
Il se avère que le bruit (son)
Lampe incluse
Fonctionne fiche №3
Lampe main fournit mouvement (gauche-droite-gauche)
Servo reste à 90 °
Transaction terminée
Si il ya du bruit, alors:
Lampe incluse
Servo avec lampe déplacer vers la gauche
Fonctionne fiche №2
La lampe en position 90 °
Transaction terminée
Si le bras de métal atteint une certaine position (haute), puis en jouant fiche №4.
Étape 3: Amélioration
Dans le travail de conception peut apporter quelques améliorations comme l'intégration d'un commutateur frais Seeeduino, pour contrôler l'exécution de code en utilisant un cycle régulier SI. Si le commutateur est activé - démarrer le mode automatique, si ce ne est - en mode manuel.
Auto-mode comprend code standard lorsque la lampe réagit au son.
Mode manuel permet la gestion à distance par l'intermédiaire d'un axe accéléromètre triple, en changeant la position des axes X et Y.
Vous pouvez faire un tour sur les lumières 360 °, en y ajoutant un servo séparé. Puis-je configurer pour se connecter via Wi-Fi / Ethernet.
Étape 4: Code
Code Auteur (MrLdnr) se trouve ci-dessous.
[Spoiler]
#include
const int buttonPin = 4; // Interrupteur de position
int ButtonState = 0; // Variable pour la lecture des boutons de position
// Configuration Servo
myservo2 servo;
myservo servo; // Crée pour le contrôle de servo
int pos = 0; // Variable servant à mémoriser la position d'asservissement
int pos2 = 0; // Variable servant à mémoriser la position d'asservissement
int val1;
int val2;
// CONFIGURATION LED
const int ledPin2 = 5; // lumière principale
const int ledPin = 12; // Tube lumière
int countlamp2 = 0;
// Configuration du bruit
const int valeur de seuil = 300; // La réponse au son
// akseleometra Set
int ystate;
int xstate;
#include
#define MMA766ddr 0x4c
#define MMA7660_X 0x00
#define MMA7660_Y 0x01
#define MMA7660_Z 0x02
#define MMA7660_TILT 0x03
#define MMA7660_SRST 0x04
#define MMA7660_SPCNT 0x05
#define MMA7660_INTSU 0x06
#define MMA7660_MODE 0x07
#define MMA7660_SR 0x08
#define MMA7660_PDET 0x09
#define MMA7660_PD 0x0A
Accélération de classe
{
publique:
omble x;
carboniser y;
z omble;
};
void setup ()
{
mma7660_init (); // Rejoignez bus i2c (adresse sélective du device master)
Serial.begin (9600);
// Capteur De Mouvement
pinMode (6 entrées); // utilisé deux pieds pour le signal externe
// La lumière et la base de la lampe de lumière
pinMode (ledPin, SORTIE);
pinMode (ledPin2 SORTIE);
// SERVOS
// AUDIO
DDRD | = 0x0C; // D2 et D3 en mode écriture;
PORTD & = 0xF3; // D2 et D3 réglés sur un faible;
// Capteur de bruit sur analogique 0
// INTERRUPTEUR
pinMode (buttonPin, INPUT);
}
rec_2_begin void ()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
}
rec_2_stop void ()
{
PORTD & = 0xF3;
}
play_2 void ()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
retard (audiodelay);
PORTD & = 0xF3;
}
////////////////////////////////////////////////// ////////////////////
////////////////////////////////////////////////// /////
// Fonction de contrôler la segment_3
rec_3_begin void ()
{
PORTD = (PORTD | 0b00001000) & 0b11111011;
}
rec_3_stop void ()
{
PORTD & = 0xF3;
}
play_3 void ()
{
PORTD = (PORTD | 0b00001000) & 0b11111011;
retard (audiodelay);
PORTD & = 0xF3;
}
////////////////////////////////////////////////// ///
////////////////////////////////////////////////
// Fonction de contrôler la segment_4;
rec_4_begin void ()
{
PORTD = PORTD | 0b00001100;
}
rec_4_stop void ()
{
PORTD & = 0xF3;
}
play_4 void ()
{
PORTD = PORTD | 0b00001100;
retard (audiodelay);
PORTD & = 0xF3;
}
//////////////////////
check_move void ()
{
int = sensorValue digitalRead (6);
if (sensorValue == 1)
{
// DigitalWrite (ledPin, HIGH);
//Serial.println(sensorValue, DEC); // la sortie de signal de position à l'écran.
// Servo1 ();
}
autre
{
// DigitalWrite (ledPin, LOW);
//Serial.println(sensorValue, DEC); // la sortie de signal de position à l'écran.
// Servo2 ();
}
}
servo1_right void ()
{
myservo.attach (9);
pour (pos = 90; pos = 90; possession = 1) // va de 0 à 180 degrés
{
myservo.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms jusqu'à ce que le servo prend la position
} * /
}
servo1_left void ()
{
myservo.attach (9);
pour (pos = 90; pos & gt; 1; pos - = 1) // va de 0 à 180 degrés
{// Incréments de 1 degré
myservo.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms, tandis que le servo ne prend pas position
} / *
play_2 ();
retard (1000);
pour (pos = 1; pos90) {
pour (pos = posact; pos & gt; 90; pos - = 1) // renvoie 90 degrés
{// Incréments de 1 degré
myservo.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms, tandis que le servo ne prend pas position
}
}
else {
pour (pos = posact; pos 60; pos - = 1) // va de 0 à 180 degrés
{// Incréments de 1 degré
myservo2.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms, tandis que le servo ne prend pas position
} / *
play_2 ();
retard (1000);
pour (pos = 1; pos90) {
pour (pos = posact; pos & gt; 90; pos - = 1) // renvoie la position de 90 degrés
{// Incréments de 1 degré
myservo2.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms, tandis que le servo ne prend pas position
}
}
else {
pour (pos = posact; pos
<=90 ;="" pos="" +="1)" goes="" from="" 0="" degrees="" to="" 180="">=90> {// Incréments de 1 degré
myservo2.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms, tandis que le servo ne prend pas position
}
}
}
servo1_no void ()
{
myservo.attach (9);
pour (pos = 90; pos = 90; possession = 1) // va 180-0 degrés
{
myservo.write (pos); // Indique la position d'asservissement à travers une «pos« variable
retard (10); // Attend 15 ms, tandis que le servo ne prend pas position
}
}
servo2 void ()
{
myservo2.attach (10);
pour (pos2 = 110; pos2
< 140;="" pos2="" +="1)" ??="" 0="" ??="" 180=""> {//
myservo2.write (pos2); // Indique la position d'asservissement à travers une «pos« variable
retard (15); // Attend 15 ms, tandis que le servo ne prend pas position
}
}