Volledige leek Arduino
3 berichten
• Pagina 1 van 1
Volledige leek Arduino
Ik heb een crazy hour minut clock 3d geprint.Deze wordt bestuurd door 2 stappenmotors en een arduino M5 stamp C3U.
Moet eerst een driver geïnstalleerd worden op mijn pc en welke? Moet daarna de stamp met een usb kabel verbonden om de besturing van de klok uit te voeren na de installatie van het programma.
Moet eerst een driver geïnstalleerd worden op mijn pc en welke? Moet daarna de stamp met een usb kabel verbonden om de besturing van de klok uit te voeren na de installatie van het programma.
Advertisement
Re: Volledige leek Arduino
je gaat naar arduino.cc en haalt daar de arduino editor (IDE) op die is gratis.
dan zoek je het programma op voor je clock en dan via een usb cable naar je clock sturen (dat duurt de eerste keer best wel een minuutje, kijk of je in de IDE het goede board hebt aangezet en de juiste poort) en dan zou het kunnen werken, het zal best een paar uur duren voordat het je lukt zoals libraries e hulpprogrammas die je allemaal moet zoeken en installeren maar in de IDE zit een goede foutenzoeker en arduino.cc heeft ook een forum(nederlands deel).
en ik heb je dubbele mail weggehaald want je moet door de beheerder goedgekeurd worden wegens de spam die we ontvangen
dan zoek je het programma op voor je clock en dan via een usb cable naar je clock sturen (dat duurt de eerste keer best wel een minuutje, kijk of je in de IDE het goede board hebt aangezet en de juiste poort) en dan zou het kunnen werken, het zal best een paar uur duren voordat het je lukt zoals libraries e hulpprogrammas die je allemaal moet zoeken en installeren maar in de IDE zit een goede foutenzoeker en arduino.cc heeft ook een forum(nederlands deel).
en ik heb je dubbele mail weggehaald want je moet door de beheerder goedgekeurd worden wegens de spam die we ontvangen
paul deelen
shooter@home.nl
shooter@home.nl
Re: Volledige leek Arduino
probeer het met deze code
- Code: Alles selecteren
#include <Adafruit_NeoPixel.h>
#include "WiFi.h"
#define DEMO_MODE false
// NTP settings
#define TIMEZONE 9 // timezone (GMT = 0, Japan = 9)
#define NTP_SERVER "pool.ntp.org"
#define WIFI_SMARTCONFIG true
#if !WIFI_SMARTCONFIG
// if you do not use smartConfifg, please specify SSID and password here
#define WIFI_SSID "YOURSSID" // your WiFi's SSID
#define WIFI_PASS "YOURPASS" // your WiFi's password
#endif
#define LED_PIN 2
Adafruit_NeoPixel pixels(1, LED_PIN, NEO_GRB + NEO_KHZ800);
#define STEPS_PER_ROTATION 4096 // steps for a full turn of minute rotor
#define MOTOR_NUM 2
#define MOTOR_PIN 4
#define HOUR 0
#define MIN 1
#define HOUR_CYCLE 12
#define MIN_CYCLE 70
// minimum wait for a single step of stepper
#define DELAY 1000
// ports used to control the stepper motor
// if your motor rotate to the opposite direction,
// reverse the order of the port.
int port[MOTOR_NUM][MOTOR_PIN] = {
{7, 6, 5, 4}, // hour
{10, 8, 1, 0}, // minute
};
// adjust initial position slightly
int initPos[MOTOR_NUM] = {0, 0};
long stepToGo[MOTOR_NUM] = {0, 0};
int posNum[MOTOR_NUM] = {12, 7};
int currentPos[MOTOR_NUM] = {0, 0};
int currentStep[MOTOR_NUM] = {0};
int orderTable[MOTOR_NUM][MIN_CYCLE];
int gearRatio[MOTOR_NUM][2] = {
{140, 13}, // hour
{1, 1} // min
};
int origin[MOTOR_NUM] = {0, 24};
int backrash[MOTOR_NUM] = {0, 26};
void initOrder(void) {
for(int i = 0; i < MIN_CYCLE; i++) {
int u = (i * 2) % 7;
int b = (i * 3) % 10;
orderTable[MIN][i] = u * 10 + b;
}
for(int i = 0; i < MIN_CYCLE; i++) {
orderTable[HOUR][i] = (i * 7) % 12;
}
}
// sequence of stepper motor control
int seq[8][MOTOR_PIN] = {
{ LOW, HIGH, HIGH, LOW},
{ LOW, LOW, HIGH, LOW},
{ LOW, LOW, HIGH, HIGH},
{ LOW, LOW, LOW, HIGH},
{ HIGH, LOW, LOW, HIGH},
{ HIGH, LOW, LOW, LOW},
{ HIGH, HIGH, LOW, LOW},
{ LOW, HIGH, LOW, LOW}
};
void rotateSet(int num, long step) {
stepToGo[num] += step;
}
void rotateGo(void) {
static long phase[MOTOR_NUM] = {0};
long dt = 5000;
int done = 0;
int delta;
while(!done) {
done = 1;
for(int m = 0; m < MOTOR_NUM; m++) {
long step = stepToGo[m];
if(step == 0) {
for(int i = 0; i < MOTOR_PIN; i++) {
digitalWrite(port[m][i], LOW);
}
continue;
}
else if(step > 0) {
stepToGo[m]--;
delta = 1;
}
else {
stepToGo[m]++;
delta = 7;
}
done = 0;
phase[m] = (phase[m] + delta) % 8;
for(int i = 0; i < MOTOR_PIN; i++) {
digitalWrite(port[m][i], seq[phase[m]][i]);
}
}
delayMicroseconds(dt);
if(dt > DELAY) {
dt *= 199; // accelerate
dt /= 200;
}
}
// power cut
for(int m = 0; m < MOTOR_NUM; m++) {
for(int i = 0; i < MOTOR_PIN; i++) {
digitalWrite(port[m][i], LOW);
}
}
}
long calcPos(int m, int newPos) {
long pos;
pos = (newPos * STEPS_PER_ROTATION) / posNum[m];
pos *= gearRatio[m][0];
pos /= gearRatio[m][1];
return pos;
}
void setNum(int m, int n) {
int i, newPos;
long pos, advance;
for(i = 0; i < MIN_CYCLE; i++) {
if(orderTable[m][i] == n) {
newPos = i;
break;
}
}
if(m == MIN) {
if(newPos + MIN_CYCLE / 2 < currentPos[m]) {
newPos += MIN_CYCLE;
}
}
pos = calcPos(m, newPos);
advance = pos - currentStep[m];
if(newPos == 0) {
advance -= STEPS_PER_ROTATION; // reset pos
}
else if(advance < 0) {
advance += backrash[m];
}
rotateSet(m, advance);
if(m == MIN) {
newPos %= MIN_CYCLE;
pos = calcPos(m, newPos);
}
if(newPos == 0) {
pos = -origin[m];
}
else if(advance < 0) {
pos += backrash[m];
}
currentStep[m] = pos;
currentPos[m] = newPos;
}
void setup() {
Serial.begin(115200);
Serial.println("start");
for(int m = 0; m < MOTOR_NUM; m++) {
for(int i = 0; i < MOTOR_PIN; i++) {
pinMode(port[m][i], OUTPUT);
}
}
pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // green
pixels.show();
initOrder();
for(int m = 0; m < MOTOR_NUM; m++) {
rotateSet(m, -STEPS_PER_ROTATION * 11); // show 0
}
rotateGo();
for(int m = 0; m < MOTOR_NUM; m++) {
currentStep[m] = -origin[m];
}
rotateGo();
pixels.setPixelColor(0, pixels.Color(0, 0, 255)); // blue
pixels.show();
#if! DEMO_MODE
wifiSetup();
getNTP();
#endif
pixels.setPixelColor(0, pixels.Color(0, 0, 0)); // turn off
pixels.show();
}
void loop() {
static int prevMin = -1;
static int prevDay = -1;
int hour, min;
struct tm tmtime;
#if DEMO_MODE
static int cnt = 100;
hour = cnt / 60;
min = cnt % 60;
cnt++;
#else
getLocalTime(&tmtime);
if(prevDay > 0 && tmtime.tm_mday != prevDay) {
// ESP.restart(); // reset itself at 0:00 to get accurate time
getNTP();
}
prevDay = tmtime.tm_mday;
if(prevMin == tmtime.tm_min) {
return;
}
prevMin = tmtime.tm_min;
hour = tmtime.tm_hour % 12;
min = tmtime.tm_min;
#endif
setNum(HOUR, hour);
setNum(MIN, min);
rotateGo();
delay(300);
}
//////////////////////////////
// WiFi and NTP section
//////////////////////////////
void getNTP(void) {
for(int i = 0; WiFi.status() != WL_CONNECTED; i++) {
if(i > 30) {
ESP.restart();
}
Serial.println("Waiting for WiFi connection..");
delay(1000);
}
configTime(TIMEZONE * 3600L, 0, NTP_SERVER);
printLocalTime();
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %Y-%m-%d %H:%M:%S");
}
void wifiSetup() {
WiFi.mode(WIFI_STA);
#if WIFI_SMARTCONFIG
WiFi.begin();
#else
WiFi.begin(WIFI_SSID, WIFI_PASS);
#endif
for (int i = 0; ; i++) {
Serial.println("Connecting to WiFi...");
delay(1000);
if (WiFi.status() == WL_CONNECTED) {
break;
}
#if WIFI_SMARTCONFIG
if(i > 30)
break;
#endif
}
#if WIFI_SMARTCONFIG
if (WiFi.status() != WL_CONNECTED) {
WiFi.mode(WIFI_AP_STA);
WiFi.beginSmartConfig();
//Wait for SmartConfig packet from mobile
Serial.println("Waiting for SmartConfig.");
while (!WiFi.smartConfigDone()) {
Serial.print(".");
pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // red
pixels.show();
delay(1000);
}
Serial.println("");
Serial.println("SmartConfig received.");
//Wait for WiFi to connect to AP
Serial.println("Waiting for WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(",");
}
}
Serial.println("WiFi Connected.");
#endif
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
paul deelen
shooter@home.nl
shooter@home.nl
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast