Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  22 4510
The Flying Welder
Ignifer's Avatar
Hei.
Da er jeg igang med ett nytt klokkeprosjekt.
Jeg skal lage en noe spesiell mekanisk klokke, og trenger litt hjelp med prgramering av Arduinoen som skal styre dette.
Jeg vet att dette egentlig ikke er så vanskelig, men ønsker rett og slett ikke å bruke tid på å lære meg å prgramere. Om noen gidder å hjelpe meg hadde jeg blitt evig takknemmelig.

Det jeg trenger en en kode som styrer 7 utganger på arduinoen.
Om disse utgangene skal styre elektromagneter eller lys vet jeg ikke enda, men dette skal uansett foregå via rele med styrestrøm fra Arduinoen.
6 av tugangene skal slå seg på med en time i mellomrom, for så å slå seg av kl 12. Den 7. utgangen skal slå seg på klokka 6, og av igjenn klokka 12.

Vil tro dette er ganske enkelt for noen som har peiling på programering?
Rop ut om du gidder hjelpe meg. Gjerne på PM.

mvh
klokkemakeren
Husk at du burde ha en rtc modul eller ethernet/wifi for å lage en klokke.
The Flying Welder
Ignifer's Avatar
Trådstarter
Hvorfor burde jeg det?
Den interne klokka i Arduinoen er vel nøyaktig nok?
Arduino'en vet ikke hva tiden er. Det må du fortelle den, dvs. stille klokka.
Men Arduino er flink til å måle en tiddsperiode.
Teknisk sett er det ikke en klokke i Arduino'en, den har en pulsgiver (klokkepulser) som du kan bruke til å måle passert tid. (Denne er kvarts-styrt og derfor rimelig nøyaktig). En klokke må du selv programmere, og sette inn den rette tiden. Denne tiden vil også nullstilles hver gang Arduinoen er uten strøm.
Sist endret av ivar_oslo; 12. februar 2017 kl. 15:26. Grunn: Staveleif
Sitat av Ignifer Vis innlegg
Hvorfor burde jeg det?
Den interne klokka i Arduinoen er vel nøyaktig nok?
Vis hele sitatet...
Om du ikke har noe som passer på tiden vil du du få problemer ved strømbrudd eller om du må restarte arduinoen.

En realtime clock modul har eget batteri som gjør at klokken tikker og går uavhengig av arduinoen, om du bruker en ESP-01 wifi modul eller ethernetshield kan du bruke en tidsserver for synkronisering.

Hvis ikke må arduinoen konstant telle millisekunder og evt skrive disse verdiene til EEPROM med svært jevne mellomrom noe som ikke er veldig anbefalt iom at EEPROM til arduino har en antatt grense på rundt 100 000 overskrivinger, men klokken vil jo uansett begynne å henge etter om du har ett par strømavbrudd så du vil ikke kunne stole på den.
Sist endret av Cybergasm; 12. februar 2017 kl. 15:36.
The Flying Welder
Ignifer's Avatar
Trådstarter
Strømbrudd er så sjelden att det bryr jeg meg ikke omm. Dette blir uansett ikke en klokke jeg bruker for å se hva tiden er.
Arduinoen trenger ikke å vite hva klokka er, den trenger kun å kunne telle tid, for å slå av og på utganger ved riktig medgått tid...
Sitat av Ignifer Vis innlegg
Strømbrudd er så sjelden att det bryr jeg meg ikke omm. Dette blir uansett ikke en klokke jeg bruker for å se hva tiden er.
Arduinoen trenger ikke å vite hva klokka er, den trenger kun å kunne telle tid, for å slå av og på utganger ved riktig medgått tid...
Vis hele sitatet...
I så fall er det bare å bruke det medfølgende "Blink" eksemplet i Arduino IDE-en.

Legg til hvilken PINs du har koblet de forskjellige reléene til, endre delay(1000) til delay(3600000) som er én time.

Så er det bare å sette sammen en loop hvor du aktiverer ett og ett relé i den rekkefølgen du ønsker.

Kode

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://www.arduino.cc

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 */


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}
The Flying Welder
Ignifer's Avatar
Trådstarter
Ja, dette er nok veldig enkelt, men jeg har VELDIG lyst til att noen skal lage en komplett kode her, for dette har jeg verken tid eller lyst til å sette meg inn i.
Ok om du ikke har lyst, men kanskje andre er interesert?
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Ignifer Vis innlegg
Ja, dette er nok veldig enkelt, men jeg har VELDIG lyst til att noen skal lage en komplett kode her, for dette har jeg verken tid eller lyst til å sette meg inn i.
Vis hele sitatet...
Vel er eg for å hjelpe andre, men samtidig handler makerspaces mykje om å dele. Eg trur du får betre respons om du deler ideen din, og seier at du mangler nødvendig kode. Då har du gitt din del til miljøet, og miljøet gir gjerne tilbake.

Slik innlegget ditt framstår no vil du ha nokon til å gjere noko for deg gratis...
The Flying Welder
Ignifer's Avatar
Trådstarter
Joda, jeg har ingen problemer med å dele idéen, men sånn jeg ser det er dette en så sær klokke att ingen vil synes deter spesielt interesant.
Når jeg kommer meg til datamaskin skal jeg skrive ned hvordan klokka er tengt å fungere.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Det skal rimelig mye til at noen gidder å skrive et helt program for deg, det er ikke helt urimelig å spørre om kompensasjon hvis "problemet" ditt er at du ganske enkelt ikke gidder. Hvis du begynner med prosjektet og kommer såpass langt at du kan stille mer spesifikke spørsmål, er det god sjans for å få hjelp.
The Flying Welder
Ignifer's Avatar
Trådstarter
Klokka er ikke 100% ferdig designet enda, foreløbig er den på planleggingstadiet.Men konsepter, og virkemåten har jeg klar. Selve utforminga kommer litt etterhvert.

Klokka fungerer på følgende måte:

Jeg har ett gammel stort manometer som jeg monterer inn ett vanlig quarts urverk i, med kun minuttviser. Denne viser da kun minuttene, og vil henge ved siden av neste del.
Det jeg designer nå er neste del, som vil vise timene. Dette er en 12timers klokke, ikke 24.
Tanken er å ha 6 "timeanvisere" samt en anviser som forteller om vi er før eller etter klokka 6. (skilleanviseren)
Timeanviserene kan være 6 tapper som kontroleres av en solenoid, som gør att den popper frem. Andre muligheter er en eks. lysdiode.
Når klokka er eks. 2 er to timeanvisere synlige. Klokka 6 er 6 anvisere synlige.
Klokka 7 vil en timeanviser, samt skillenviseren som forteller att vi er etter klokka 6.
så, for å se hva klokka er, må man se på anviserene, og på manometret. Dette vil med andre ord bli en todelt litt sjult klokke.
Er det mulig å sjønne hva jeg mener?
Dette vil ikke bli verdens mest lettleste, men ser for meg att den kan bli litt morsom.



Jeg kan såklart gjøre ferdig all hardware, og prøve meg på programering, for så å spørre om jelp når det stopper opp.
Mi erfaring er da att det stopper opp så fort jeg får startet programmet. Om denne klokka skal bli realisert er jeg avhengig av hjelp, og da mener jeg freak er den beste plassen å spørre om hjelp.
Grunnen til att jeg spør før jeg har begynt å bygge, er att da kan prgramering og bygging gå parralelt, så jeg og vedkommende som (forhåpentligvis) vil hjelpe meg, kan
Det du ønsker er faktisk veldig enkelt. Jeg har noe tilsvarende ved siden av PC som viser hvor mange minutter PC har stått på i bineær-kode med lysdioder.

Det som framdeles er et lite problem, er at du må stille tiden. En enkel måte er hvis du kan resette Arduinoen på et bestemt klokkeslett, f.eks. kl. 12:00, er det noe som går an? Hvis ikke må du fortelle den hva tiden er, fleks. via PC eller et separat kontrollpanel.

Jeg har bare hatt Arcuinoen min (Uno) i ca 2 måneder, så jeg er veldig nybegynner på å programmere C. Men jeg kan jo tenke litt på saken.

Tenk litt på det Vidarlo og Robhol sa, og håp at noen vil ofre litt tid på å hjelpe deg.
The Flying Welder
Ignifer's Avatar
Trådstarter
Det vil kanskje være mulig å gjøre det sånn att når programet/loopen starter er klokka 1, og jeg passer på å sette i strømmen klokka 1?
Ved eventuel strømstans venter jeg med å sette i klokka til neste gang tidene stemmer med den reele tiden?

Jeg sjønner att ikke alle gidder å sitte å skrive koder helt gratis til random folk. Men kanskje det er noen der ute som vil bruke dette til å bli bedre på å prgramere? Så hjelper vi hverandre.. Jeg forventer ikke ett perfekt resultat første gang.
Om det er noen som trenger noe fra meg er jeg såklart villig til byttejobb her. Men nå jobber jeg i en litt mer fysisk verden, men det går såklart an å sende ting.
Kjøp en slik en, så slipper du å tenke på når strømmen settes inn.
Koster ca 2 $

RTC Module
Sist endret av Chaviz; 12. februar 2017 kl. 22:47.
Sitat av Ignifer Vis innlegg
Det vil kanskje være mulig å gjøre det sånn att når programet/loopen starter er klokka 1, og jeg passer på å sette i strømmen klokka 1?
Ved eventuel strømstans venter jeg med å sette i klokka til neste gang tidene stemmer med den reele tiden?

Jeg sjønner att ikke alle gidder å sitte å skrive koder helt gratis til random folk. Men kanskje det er noen der ute som vil bruke dette til å bli bedre på å prgramere? Så hjelper vi hverandre.. Jeg forventer ikke ett perfekt resultat første gang.
Om det er noen som trenger noe fra meg er jeg såklart villig til byttejobb her. Men nå jobber jeg i en litt mer fysisk verden, men det går såklart an å sende ting.
Vis hele sitatet...
Som jeg skrev over så er den eneste koden du behøver den som er i "blink" eksempelet om du kun skal telle time for time og ikke synkronisere klokken via nettet eller en RTC modul.

Om du skal ha en bryter/knapp for å kunne stille klokken må du bruke noe som millis() istedenfor delay() siden du ikke kan utføre andre funksjoner mens ett delay() holder på, da vil du kunne stille klokken time for time ved å trykke på en knapp.

Jeg tror dette skal fungere, men jeg vet det finnes langt mer elegante måter å gjøre det på.

Kode

int rele1 = 1; // Angi hvilken digital pin reléet er koblet til
int rele2 = 2;
int rele3 = 3;
int rele4 = 4;
int rele5 = 5;
int rele6 = 6;
int rele7 = 7;

void setup() {
  
  pinMode(rele1, OUTPUT); // Spesifiser at de aktuelle pinnene er OUTPUT for å sende HIGH/LOW (PÅ/AV) signal til relé.
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(rele4, OUTPUT);
  pinMode(rele5, OUTPUT);
  pinMode(rele6, OUTPUT);
  pinMode(rele7, OUTPUT); // skilleanviseren
}
 
// Her er loopen som teller millisekunder og styrer reléene.
// Først skrur du på ett relé, venter i en time og skru på ett nytt, venter i en time og skrur på ett nytt osv.
// Klokka 6 skrus alle utenom rele 1 av og skilleanviseren går på.

void loop() { 
  digitalWrite(rele1, HIGH);   // Skrur på relé 1   Klokken 1
  delay(3600000);              // Venter 1 time
  digitalWrite(rele2, HIGH);    // Skrur på relé 2  Klokken 2
  delay(3600000);              // Venter 1 time
  digitalWrite(rele3, HIGH);    // Skrur på relé 3  Klokken 3
  delay(3600000);              // Venter 1 time
  digitalWrite(rele4, HIGH);   // Skrur på relé 4   Klokken 4
  delay(3600000);              // Venter 1 time
  digitalWrite(rele5, HIGH);    // Skrur på relé 5  Klokken 5
  delay(3600000);              // Venter 1 time
  digitalWrite(rele6, HIGH);    // Skrur på relé 6  Klokken 6
  delay(3600000);              // Venter 1 time
  digitalWrite(rele2, LOW);    // Skrur av relé 2
  digitalWrite(rele3, LOW);    // Skrur av relé 3
  digitalWrite(rele4, LOW);    // Skrur av relé 4
  digitalWrite(rele5, LOW);    // Skrur av relé 5
  digitalWrite(rele6, LOW);    // Skrur av relé 6   
  digitalWrite(rele7, HIGH);    // Skrur på relé 7  Klokken 7
  delay(3600000);              // Venter 1 time
  digitalWrite(rele2, HIGH);    // Skrur på relé 2  Klokken 8
  delay(3600000);              // Venter 1 time
  digitalWrite(rele3, HIGH);    // Skrur på relé 3  Klokken 9
  delay(3600000);              // Venter 1 time
  digitalWrite(rele4, HIGH);   // Skrur på relé 4   Klokken 10
  delay(3600000);              // Venter 1 time
  digitalWrite(rele5, HIGH);    // Skrur på relé 5  Klokken 11
  delay(3600000);              // Venter 1 time
  digitalWrite(rele6, HIGH);    // Skrur på relé 6  Klokken 12
  delay(3600000);              // Venter 1 time
  digitalWrite(rele2, LOW);    // Skrur av relé 2
  digitalWrite(rele3, LOW);    // Skrur av relé 3
  digitalWrite(rele4, LOW);    // Skrur av relé 4
  digitalWrite(rele5, LOW);    // Skrur av relé 5
  digitalWrite(rele6, LOW);    // Skrur av relé 6
  digitalWrite(rele7, LOW);    // Skrur på relé 7 
  
  // Nå starter loopen fra begynnelsen igjen.
}

PS: Husk å bruk en ekstern strømkilde til relé-ene siden 8 kanaler vil bruke opp mot 600ma om alle er aktivert samtidig.
Sitat av Chaviz Vis innlegg
Kjøp en slik en, så slipper du å tenke på når strømmen settes inn.
Koster ca 2 $

RTC Module
Vis hele sitatet...
Tusen takk.
Da har jeg bestilt en slik. :-)
Trigonoceps occipita
vidarlo's Avatar
Donor
Du vil ikkje ha to klokker i samme klokke for å sei det sånn. Det vil ikkje gå rett. Eg ville satsa på å ha ein klokkemaster, og latt den styre all tida. Elles vil du etter forbausande kort tid få usynkroniserte klokker, for microcontrollere har ikkje ekstremt stabil tid.
Overskuddsmateriell
Jeg ville nok valgt en NodeMCU eller en ESP8266-201 (Denne levers uten USB plugg så her må du ha mer utstyr for å programmere) til denne jobben. Ulempen er at den har bare 4 pins ut, men det kan lett fikses ved hjelp av ett shift register. Fordelen du får med den er WiFi og ett NTP bibliotek som lar deg koble deg til en server på internett å lett spørre om hva klokka er.

https://github.com/esp8266/Arduino/b.../NTPClient.ino


Hvorfor bare lage ei klokke som ser kul ut når man kan lage ei som ser kul ut og har kule funksjoner?
The Flying Welder
Ignifer's Avatar
Trådstarter
Sitat av vidarlo Vis innlegg
Du vil ikkje ha to klokker i samme klokke for å sei det sånn. Det vil ikkje gå rett. Eg ville satsa på å ha ein klokkemaster, og latt den styre all tida. Elles vil du etter forbausande kort tid få usynkroniserte klokker, for microcontrollere har ikkje ekstremt stabil tid.
Vis hele sitatet...
Ja, du har nok kanskje rett i dette. Litt dumt om dem plutselig er veldig usynkrone.
Grunnen til att jeg tenkte å gjøre det på denne måten er att dette vil være veldug mye enklere for meg.
The Flying Welder
Ignifer's Avatar
Trådstarter
Sitat av Bullhill Vis innlegg
Jeg ville nok valgt en NodeMCU eller en ESP8266-201 (Denne levers uten USB plugg så her må du ha mer utstyr for å programmere) til denne jobben. Ulempen er at den har bare 4 pins ut, men det kan lett fikses ved hjelp av ett shift register. Fordelen du får med den er WiFi og ett NTP bibliotek som lar deg koble deg til en server på internett å lett spørre om hva klokka er.

https://github.com/esp8266/Arduino/b.../NTPClient.ino


Hvorfor bare lage ei klokke som ser kul ut når man kan lage ei som ser kul ut og har kule funksjoner?
Vis hele sitatet...

Virker veldig lurt dette, men jeg har null peiling på hvordan jeg skal få til dette.
Kanskje jeg bør ta en runde i tankeboksen og finne på en alternativ måte å få til dette på...
Mindre tenking - mer prøving og feiling! Det er nå min mening.
Det er det du lærer av.
Overskuddsmateriell
Helt enig! Bare å ta springfart og hopp utti det med begge beina først. Når du lander på ræva og ikke kommer videre så spørr du bare her. Om du kjører deg fast så er ikke dette prosjektet verre enn at den samlede kompetansen på dette forumet løser det

Edit: Tenkte du metall kasse rundt elektronikken? Da bør du ta ESP8266-201 siden den har ekstern antenne du kan dra utenfor.
Sist endret av Bullhill; 15. februar 2017 kl. 15:06.