Arduino til en tørretumbler

Hejsa

Jeg fik den ide at sætte en arduino til tørretumbleren, mest for selv at kunne bestemme hvordan den skal køre men også for at kunne følge med fra den anden ende af "hytten" eller hvor man nu gerne vil følge med

indtil nu har jeg en 2560 mega med wifi kørende med en simpel side hvor man kan ændre wifi config og tænde/slukke en digital udgang samt se værdi af en analog indgang...

det jeg så godt vil have flettet ind er forskellige programmer som jeg i første omgang starter fra den side som arduinoen laver, senere skal så knapperene på maskinen kobles til men det regner jeg med er en let opgave

jeg kan egentlig godt finde kodestumper her og der som gør det jeg vil, mit problem er at jeg bare slet ikke kan hitte ud af at stykke stumperne sammen til det jeg godt vil.

koden jeg har nu er tager herfra:

http://notebook.kulchenko.com/embedded/storing-wifi-configuration-in-eeprom-on-arduino

der er kun tilføjet back links til de 3 sider

det jeg nogenlunde vil hen til er det her: Dishwasher - Pastebin.com

det er nem og overskuligt men kun et program der består af mindre sektioner, noget ligende ville være rart så man nem kan ændre...jeg ville gerne at man fra siden kan vælge flere programmer

til at styre varmelegmet faldt jeg over den her side: http://www.over-engineered.com/projects/sous-vide-pid-controller/#more-69

det er lidt mere end en simpel on/off men giver også mere præcis styring og lidt mindre tab (måske ikke så meget men alligevel...)

har også tænkt lidt over input/output:

inputs:

1:rum temp - da min er en kodens type skal man også kunne styre forskel mellem rum temp og temp inde i maskinen. dettet bestemmer hvor hurtig den kan få vandet ud af tøjet og ned i vandbeholderen
1: triac temp - bare så triac'en ikke bliver for varm (det er den som styre varmelegmet)
1: tromle temp
2: fugt sensor - de fleste programmer jeg har i hovedet vil styre efter fugtughed, de andre køre på tid... fandt denne sensor som giver 10mv pr % fugt. 1V ved 100%: http://www.digikey.com/product-detail/en/CHS-GSS/445-2575-ND/931221?cur=USD
3: vand tank fuld - tænker lidt på om det skal være simpel fuld eller om jeg sætter en strain gauge på så jeg kan måle hvor fuld. tanken er ikke gennemsigtig, ville have været rart.
4: strøm sensor - en af de typer der kan klikkes rundt om fasen. Så man kan følge lidt med i forbruget
5+6: airflow sensor - så man på en eller anden måde kan sige når filteret er fuld... evt hvor fuld
7: zero-cross - så den kan styre varmen... http://www.over-engineered.com/projects/sous-vide-pid-controller/#more-69

outputs:

1: drej tromle
2: tromle retning
3: varme
4+5: måske styring af de 2 luftstrømme der er... i en kondens er der luftstrøm fra tromlen til kodendensenheden og tilbage og en anden strøm der gøre indeni kondensenheden for at køle den af

men er der nogen som kan hjælpe med at flette kode sammen? hardware siden er ikke noget problem.... målet er at den færdige styring nemt skal kunne bygges af andre, evt i form af et "kit" for dem som ikke er så gode til at bygge selv.

slet ikke nogen der kunne give en hånd med programmeringen? stumperne kan jeg jo sagtens finde men har lidt problemer med at hitte ud af hvordan man fletter det sammen

jeg har prøvet at tilføje 2 dallas følere, eneste problem er at finde ud af at vise deres værdier og lave et simpelt program ud af det

Jeg vil gerne have en /cycle1 side og vise de 2 temp's og måske en af de analoge indgange... og lade det blive der indtil den analoge indgange når en hvis værdi

jeg tænkte selv på en while statement so jeg kunne steppe mig frem

  1. tænd for varmen og hold temp med simpel on/off.... måske ændre det til var. varme senere....
  2. når varmen er nået op så hold den og sigt efter fugtighed
  3. når fugtugheden er nået ned så sluk for varmen og drej tromlen af og til for at køle ned.
  4. når temp inde i tromle og rum temp er ens (eller ikke afvigere mere end x grader) så stop og gå tilbage til forsiden

det skulle også gerne være sådan at når en bruger starter et proram og andre går ind så skal de smides direkte til /cycle1

my sketch indtil nu: #include <DHCPLite.h>#include <RedFly.h>#include <EEPROM.h>#include <OneWi - Pastebin.com

har ændret min define del til:

#define LEDPIN 13 // LED simulating heating element
#define LEDPIN 14 // LED simulating motor turning drum
#define LEDPIN 15 // LED simulating indicating drum turning reverse (used to distribute clothes)

#define ONE_WIRE_BUS 16 // Data wire from dallas chips
#define humidpin 17 // humidity sensor
#define waterpin 18 // watertank full
#define currentpin 19 // analog voltage input from current clamp
#define airflowpin 20 // analog voltage from airflow sensor

og om pin er input eller output:

pinMode(13, OUTPUT); // heating element
pinMode(14, OUTPUT); // drum motor
pinMode(15, OUTPUT); // drum reverse

pinMode(16, INPUT); // DS18B20 one wire bus
pinMode(17, INPUT); // humidity sensor
pinMode(18, INPUT); // watertank full
pinMode(19, INPUT); // current clamp
pinMode(20, INPUT); // airflow

varme må gerne være styret med PWM da jeg havde tænkt mig at bruge et solid state relæ.. men simpel on/off er også ok... hvis pwm så måske bare lavere frekvens jo tættere på den valgte temp?

pokkers :slight_smile:

selv noget simpelt som at springe fra en loop til en anden kan jeg ikke få til at virke... altså hvis jeg efter ip skriver /cycle1 har jeg ændret koden så den gerne skulle hoppe ud af loop og ned til en jeg også kalder cycle1,

meningen er så at jeg her vil lave en side som refresher automatisk og viser hvor langt den er nået i programmet

på linie 194 prøver jeg at springe ned til cycle1 (linie 283)...

men der sker aldrig noget... udover det virker koden ok

nogen der kan hjælpe mig?

har lavet en menu og et punkt hvor indstillinger for de forskellige programmer kan tastes ind... indstillinger mangler dog at kunne gemme i eprom lige som wifi indstillinger. skulle være til at forstå ellers spørg:

nogen der kan hjælpe med en meget simpel metode til at gemme et felt fra en tabel?

at hente er jo ret nemt... så vidt jeg har forstået laver man en eprom read og gemmer dette i en variabel som man så sætter som værdi i cellen, men hvordan gør man så hvis man vil gemme?

EDIT: min tabel med indstillinger starter ved linie 410

Nåh Boelle du ser ud til at holde dig selv underholdt med dialog :slight_smile:

Jeg ser du også har samme spørgsmål kørende glimrende på engelsk her - må jeg foreslå at du holder tråden eet sted? (At det er på to forskellige sprog fritager den for "no crossposting" reglen, men ... )

OT: Jeg synes også det er synd der ikke er mere "go" i den skandiviske del (og at der er en Skandinavisk forum skyldes at den ene af de oprindelige Arduino folkene bor i Malmö) men dette TopicArea er best til dem der har sprog problemer eller for ting der naturligt er geografisk begrænset (f.eks. lokale indkøbssteder)

Tja,

det er lige så meget synd at man spørger om hjælp og der ikke er nogen svar... spec når man sidder med små ting som man bare ikke selv fatter. Det at gemme indholdet af en celle i eeprom må da høre under det?

/bo

har lige brugt et par timer.... har en celle i en tabel som jeg har kaldt c1temp

når siden (html) bliver vist bruger jeg blot eprom read til at fylde værdi ind

men hvis jeg så ændre værdien skal den jo gerne kunne gemmes med eprom write... og det er lige hvordan man gemmer der driller

strcpy(c1temp, c1t);
EEPROM.write (100, c1t);

virker hvert fald ikke....

men ja jeg kan sagtens gemme ved at erstatte c1t med den værdi jeg godt vil gemme

Jeg har ikke brugt EEPROM endnu. Så nu slår jeg lidt op i manualen ...

... ahh, lige hvad jeg mistænkte. EEPROM.write klarer en BYTE, ikke en streng. Så du skal bruge noget i stil med

for ( int i=0; c1t[i] ; i++) EEPROM.write ;

Det vil gemme alle tegn i sin din streng, indtil den møder nul byten. (Den kommer desværre ikke med...) Næste forsøg:

int i=0; while (c1t[i++]) EEPROM.write(c1t[i]) ;

Ja, der skal files lidt, men sådan cirka.

takker

men det er ikke selve write delen der volder problemer.... det er at gemme indholdet af en celle i en tabel som jeg har navngivet c1temp

og tro mig har googlet mig temmelig "dum i låget" men kan ikke finde nogen "for dummies" eksempler

har sat "dyret" live på: 87.51.52.114

selvfølgelig....

i min sketch bliver wifi opsætning gemt og hentet, så pt prøver jeg at kopiere det af til at hente og gemme også, bare fra pos 100 frem for 0

men svigermor har inviteret ud og spise så bliver først senere

tror jeg har lidt fod på det nu, men er i også lidt i tvivl...

måden der hentes på er taget direkte herfra: Arduino Playground - EEPROMLoadAndSaveSettings

det er spec 3 linier jeg kigger på:

if (EEPROM.read(CONFIG_START + 0) == CONFIG_VERSION[0] &&
      EEPROM.read(CONFIG_START + 1) == CONFIG_VERSION[1] &&
      EEPROM.read(CONFIG_START + 2) == CONFIG_VERSION[2])

jeg gætter på der er 3 linier fordi der er 3 settings der skal gemmes, men har jeg ret så hvis der kun er en setting så korter man bare af til en linie og er der flere sætter man bare en kopi af sidste linie på men ændre 2 til 3?

anyways ser den første del sådan her ud nu:

#define CONFIG_VERSION "ar1"
#define CONFIG_START 0
#define VALUES_START 100

// NetworkConnectTo
struct WiFiStorageStruct {
  char version[4];
  char ssid[24];
  char pwd[16];
  byte addr[4];
  unsigned int id;
} WiFiConfig = {
  CONFIG_VERSION,
  "sandkaeret1",
  "6161616161",
  {192, 168, 1, 150},
  0
};


struct ValuesStruct {
  char c1temp[2];
  
} ValuesConfig = {
  CONFIG_VERSION,
  "20",
  0
};



void loadConfig() {
  if (EEPROM.read(CONFIG_START + 0) == CONFIG_VERSION[0] &&
    EEPROM.read(CONFIG_START + 1) == CONFIG_VERSION[1] &&
      EEPROM.read(CONFIG_START + 2) == CONFIG_VERSION[2])
    for (unsigned int t=0; t<sizeof(WiFiConfig); t++)
      *((char*)&WiFiConfig + t) = EEPROM.read(CONFIG_START + t);
 }

void saveConfig() {
  for (unsigned int t=0; t<sizeof(WiFiConfig); t++)
    EEPROM.write(CONFIG_START + t, *((char*)&WiFiConfig + t));
}

void savesettings() {
for (unsigned int t=0; t<sizeof(ValuesConfig); t++)
    EEPROM.write(VALUES_START + t, *((char*)&ValuesConfig + t));
}

void loadsettings() {
  if (EEPROM.read(VALUES_START + 0) == CONFIG_VERSION[0] &&
    EEPROM.read(VALUES_START + 1) == CONFIG_VERSION[1] &&
      EEPROM.read(VALUES_START + 2) == CONFIG_VERSION[2])
    for (unsigned int t=0; t<sizeof(ValuesConfig); t++)
      *((char*)&ValuesConfig + t) = EEPROM.read(VALUES_START + t);
 }

boelle:

if (EEPROM.read(CONFIG_START + 0) == CONFIG_VERSION[0] &&

EEPROM.read(CONFIG_START + 1) == CONFIG_VERSION[1] &&
      EEPROM.read(CONFIG_START + 2) == CONFIG_VERSION[2])

Det sammenligner 3 bytes om de alle er ens. Om det er en 3 bogstavs streng eller 3 små tal, eller et 24bits tal er koden uvidende om. det er en fortolkning af de 3 bytes som "brugeren" gør.