J'ai mon Arduino Yun configuré avec un serveur Web. La page Web comporte une série de boutons, qui contrôlent le buzzer en jouant divers sons, et un bouton pour contrôler un stepper motor. J'utilise le code lié qui utilise la bibliothèque AccelStepper.Problèmes d'alimentation du moteur pas à pas à partir du serveur Web (bouton) via Arduino Yun
Le bouton fonctionne bien pour le buzzer, je clique dessus et il joue le son. Pour le moteur cependant, je clique sur le bouton, et la LED s'allume sur la carte du pilote pendant une seconde après que le bouton est cliqué mais c'est tout.
Je soupçonne que le moteur, contrairement au buzzer, a besoin de la commande pour être vrai tout le temps pendant qu'il se déplace dans sa position, sinon il s'arrête. Le bouton de la page Web doit donc ressembler davantage à un bouton - cliquez pour continuer, cliquez à nouveau pour continuer et rester à l'écart. Mais je ne sais pas comment faire ça. Ou alors, peut-être que quelqu'un a de l'expérience avec ce moteur pas à pas et sait comment l'utiliser sans accelstepper. (Tout ce que j'essaie de faire, c'est d'amener le moteur à tourner dans une position donnée.)
J'espère que ce n'est pas trop confus. Je suis si proche, pourtant ce moteur me cause une énorme douleur. Merci beaucoup!
Le code croquis:
//Bridge Setup
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
YunServer server;
String readString;
//Motor Setup
#include <AccelStepper.h>
#define HALFSTEP 8
// Motor pin definitions
#define motorPin1 3 // IN1 on the ULN2003 driver 1
#define motorPin2 4 // IN2 on the ULN2003 driver 1
#define motorPin3 5 // IN3 on the ULN2003 driver 1
#define motorPin4 6 // IN4 on the ULN2003 driver 1
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
//////////////
//const int thereader = 8;
int Buzzer1 = 9;
//int readerstate = 0;
void setup() {
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(100.0);
stepper1.setSpeed(200);
stepper1.moveTo(20000);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
Bridge.begin();
//digitalWrite(13, HIGH);
// Listen for incoming connection only from localhost
// (no one from the external network could connect)
server.listenOnLocalhost();
server.begin();
////////////
//pinMode(Buzzer1, OUTPUT);
// initialize the pushbutton pin as an input:
//pinMode(thereader, INPUT);
}//--(end setup)---
void loop() {
YunClient client = server.accept();
// There is a new client?
if (client) {
// read the command
String command = client.readString();
command.trim(); //kill whitespace
Serial.println(command);
if (command == "rolloutcarpet") {
stepper1.run();
//delay(2000);
//stepper1.moveTo(-stepper1.currentPosition());
}
if (command == "playfanfare") {
tone(Buzzer1,400,200);
delay(500);
tone(Buzzer1,400,200);
delay(500);
tone(Buzzer1,450,225);
delay(300);
tone(Buzzer1,450,225);
delay(500);
tone(Buzzer1,400,200);
delay(500);
tone(Buzzer1,450,200);
delay(300);
tone(Buzzer1,600,300);
delay(3000);
}
else if (command == "stopfanfare") {
delay(10000);
}
client.stop();
}
delay(50);
}
Code HTML:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="zepto.min.js"></script>
<script type="text/javascript">
function rolloutcarpet()
{
$('#content').load('/arduino/rolloutcarpet');
}
function playfanfare()
{
$('#content').load('/arduino/playfanfare');
}
function stopfanfare()
{
$('#content').load('/arduino/stopfanfare');
}
</script>
</head>
<body onload="setInterval(refresh, 500);">
<span id="content"></span>
<button onclick="rolloutcarpet()">Roll Out the Carpet</button>
<button onclick="ledoff()">LED BLUE OFF</button>
<br><br><br>
<button onclick="playfanfare()">PLAY FANFARE</button>
<button onclick="stopfanfare()">STOP FANFARE</button>
<img src="yun.png" align="right">
</body>
</html>
* «Je soupçonne que le moteur , contrairement au buzzer, a besoin de la commande pour être vrai tout le temps pendant qu'il se déplace à sa position, sinon il s'arrête. "* Ne serait-ce pas une bonne idée de tester cette théorie hors ligne avec un simple Arduino Sketch? – GolezTrol
@GolezTrol Eh bien, j'ai essayé le moteur avec un bouton poussoir physique, et il a dû être pressé tout le temps pour que le moteur tourne. Mais je ne sais pas comment reproduire cela en utilisant un bouton numérique et les commandes indiquées ci-dessus. toute aide serait grandement appréciée. – peyroux
Ok. Donc, il semble que la théorie est juste. Maintenant, peut-être, il est également plus facile d'utiliser le bouton physique pour programmer votre objectif. Il suffit de lire la valeur du bouton et si elle est en baisse, définissez un drapeau et faites tourner le stepper alors qu'il est en place. Tout ce que vous devez savoir, c'est combien de temps pour garder le drapeau. Une fois que cela fonctionne, passer d'un bouton physique à un bouton web devrait être trivial.Le drapeau peut aussi être un compteur (pour vous souvenir du nombre de pas que vous avez faits). – GolezTrol