التحكم فى روبوط عن طريق الهاتف
الهدف
الهدف من هذا المشروع هوا إنجاز روبوط و التحكم فيه عن طرق الهاتف الذكى
Corps du robot
Le robot se compose de quatre parties, découpées dans du carton. Ce torse, la tête et les deux mains. Toutes les pièces sont coupées avec un couteau. Les détails peuvent être collés ensemble à l'aide d'un pistolet à colle en plastique pour chauffer. Pour installer les servos sur le corps, il est nécessaire de percer des trous rectangulaires. Pour installer le servo dans les trous en utilisant la même colle plastique. Sur la tête et les mains du robot, où l'arbre du servo se connecte au bras du servo qui sont collés au corps de l'intérieur au moyen de la même colle plastique. Nous ne donnerons pas les dimensions et les dessins exacts, vous ne devriez pas être difficile de répéter la conception.Schéma électrique
Pour un fonctionnement stable du robot, les servo variateurs doivent être alimentés par une autre alimentation 5V. Le régulateur de tension Arduino ne peut pas fournir l'ampérage requis pour les trois servos. Les séries avec les LED doivent activer la résistance 680 ohms
Interface de contrôle
Ouvrez les interfaces de l'éditeur du site RemoteXY.com et créez une interface de gestion, illustrée dans l'image ci-dessous. Les interfaces sont incluses le curseur droit et gauche vers la main droite et gauche et pour faire pivoter le curseur de la tête. Réglez deux boutons pour contrôler les yeux. Et réglez l'interrupteur. Nous l'utiliserons pour démarrer le clignotement automatique des yeux.Renommez les curseurs, appelez-les respectivement slider_left, slider_right et slider_head. Et renommez les boutons. Appelez-les respectivement button_left et button_right.
Programme de contrôle
/////////////////////////////////////////////
// RemoteXY include library //
/////////////////////////////////////////////
/* RemoteXY select connection mode and include library */
#define REMOTEXY_MODE__SERIAL
#include <RemoteXY.h>
/* RemoteXY connection settings */
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600
/* RemoteXY configurate */
unsigned char RemoteXY_CONF[] =
{ 6,0,79,0,1,5,4,0,5,7
,11,56,2,4,0,84,7,11,56,2
,4,128,20,13,60,11,2,129,0,26
,3,49,6,0,208,161,97,114,100,98
,111,97,114,100,32,82,111,98,111,116
,0,1,0,25,29,16,16,1,76,0
,1,0,60,29,16,16,1,82,0,2
,0,38,51,24,10,2,79,78,0,79
,70,70,0 };
/* this structure defines all the variables of your control interface */
struct {
/* input variable */
unsigned char slider_left; /* =0..100 slider position */
unsigned char slider_right; /* =0..100 slider position */
unsigned char slider_head; /* =0..100 slider position */
unsigned char button_left; /* =1 if button pressed, else =0 */
unsigned char button_right; /* =1 if button pressed, else =0 */
unsigned char switch_1; /* =1 if switch ON and =0 if OFF */
/* other variable */
unsigned char connect_flag; /* =1 if wire connected, else =0 */
} RemoteXY;
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#include <Servo.h>
#define PIN_LED_LEFT 6
#define PIN_LED_RIGHT 7
#define PIN_LEFT_SERVO 8
#define PIN_RIGHT_SERVO 9
#define PIN_HEAD_SERVO 10
Servo left_servo;
Servo right_servo;
Servo head_servo;
unsigned char led_state = 0;
unsigned long led_time=0;
unsigned long prev_time=0;
void setup()
{
RemoteXY_Init ();
// TODO you setup code
pinMode (PIN_LED_LEFT, OUTPUT);
pinMode (PIN_LED_RIGHT, OUTPUT);
left_servo.attach(PIN_LEFT_SERVO);
right_servo.attach(PIN_RIGHT_SERVO);
head_servo.attach(PIN_HEAD_SERVO);
RemoteXY.slider_left=50;
RemoteXY.slider_right=50;
RemoteXY.slider_head=50;
}
void loop()
{
RemoteXY_Handler ();
// TODO you loop code
// use the RemoteXY structure for data transfer
unsigned long time = millis();
unsigned long d_time = time - prev_time;
prev_time = time;
if (RemoteXY.switch_1==0) {
digitalWrite(PIN_LED_LEFT, (RemoteXY.button_left==0)?LOW:HIGH);
digitalWrite(PIN_LED_RIGHT, (RemoteXY.button_right==0)?LOW:HIGH);
}
else {
led_time+=d_time;
if (led_time>500) {
if (led_state==0) led_state=1;
else led_state=0;
led_time-=500;
}
digitalWrite(PIN_LED_LEFT, (led_state==0)?LOW:HIGH);
digitalWrite(PIN_LED_RIGHT, (led_state==1)?LOW:HIGH);
}
left_servo.writeMicroseconds(RemoteXY.slider_left*20+500);
right_servo.writeMicroseconds(2500-RemoteXY.slider_right*20);
head_servo.writeMicroseconds(RemoteXY.slider_head*20+500);
}
تعليقات
إرسال تعليق