Volledige leek Arduino

Berichten: 1
Geregistreerd: 14 Apr 2023, 12:52

Volledige leek Arduino

Berichtdoor Ludo » 14 Apr 2023, 13:11

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.

Advertisement

Berichten: 4080
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Volledige leek Arduino

Berichtdoor shooter » 16 Apr 2023, 17:58

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
paul deelen
shooter@home.nl

Berichten: 4080
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Volledige leek Arduino

Berichtdoor shooter » 16 Apr 2023, 18:03

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

Terug naar Evenementen

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten