Bygga ett reläkort med temperaturingång, USB hjälp

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Det bästa är ju att jag nu arbetar med något jag skulle undvika i början av tråden :lol:
Skulle ju köra mot dator då jag fick för mig att UI skulle vara ett rent helvete att få till :lol:

Verkar vara den enklare biten i allfall hitils ;)
I allafall så långt som att skriva till displayen.
Som jag ser det än så länge handlar det om 2 rader kod utöver att ladda in bibliotek och förklara för arduino vad det är för display.
Föresten satt och funderade på en annan grej med.

I och med att man skriver C till arduino.
borde det inte vara precis lika enkelt att skriva C till pic?
Och därmed kunna (flytta) koden från arduino till t.ex en PIC?

Anledningen till frågan är ju att en den PIC:en jag har har lite fler utgångar att leka med :wink:
Samt så binder jag inte upp min arduino i framtiden.

Hade ju varit trevligt att ha arduino som prototyping plattform och sedan när det är dags att bygga det slutgiltiga systemet bara ladda över i stort samma kod på en pic.
sätta denna i ett kretskort koppla dit komponenter och köra ;)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av sodjan »

> borde det inte vara precis lika enkelt att skriva C till pic?

Ja, "i princip".

> Och därmed kunna (flytta) koden från arduino till t.ex en PIC?

Nej, sannolikt inte alls. Ett program till Arduino och ett C program till
en PIC kommer att se väldigt annorlunda ut. Den C/C++ variant som
man skriver till Ardunio lite speciell och bygger på att man har hela
Arduino-infrastrukturen "på plats".

AVR/Arduino och PIC har dessutom en del skillnader i hårdvaran som
man måste ta hänsyn till.

Vill du flytta din applikation till "lösa kretsar" för att inte låsa upp
din Arduino till ett färdigt projekt (vilket är helt rimligt att man inte
vill), så är det snarare lösa AVR processorer som du ska titta på.
Dessa klan du programmera med Arduinos prylar så att Arduino
applikationer går att köra på dom. Glöm PIC i detta sammanhang...
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Icecap »

Båda ja och nej.

Det finns hårdvarumässiga skillnader att tänka på, alltså saker som att t.ex. en timer ska ha olika värden under inställningen, dessa värden är olika mellan AVR och PIC. Denna skillnad finns inom alla inställningar av hårdvaran.

Men när den bit är klar kan man faktisk lyfta resten av C-koden över utan problem så länge man inte har skrivit koden med little/big endian-problem.

Så det är rimligt enkelt - och ganska svårt samtidig.

Själv har jag gjort ett projekt där hårdvaran finns i två versioner: en med en Fujitsu-processor och en med en Renesas-processor. Efter att ha pillat en del med hårdvaraskillnaden kan jag kompilera källkoden utan ändring, dock måste varje processor ha var sin anpassningsfil för hårdvaran.

Och om Arduino har en egen variant av C blir det mer knepigt...
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Okej, AVR?

Vad behöver man för att programera en sådan?
Har ju bara en Pickit2 och en Arduino Uno.

Räcker det i stort med bara microprocessorn eller behöver man löda ihop en arduinokopia?

Gillar ju upplägget på PIC dvs man bara programerar en microprocessor och flyttar ut så att säga ;)
Hade ju varit smidigt när projektet börjar närma sig skarpt läge så att säga ;)
I det absoluta nuläget handlar det fortfarande om att få fram lite vettig kod och se så man i allfall kan få något som fungerar på labbplatta sen blir det dags för flytt (och ragga upp någon som kan hjälpa mig fixa ett kretskort)
Sen snackar vi skarpt läge på allvar ;)

Föresten kollar fortfarande runt lite på SSR:er,
Har hittat något nytt nu som är lite dyrare än övriga dock fattar jag inte vad som skiljer dom åt.
det enda som står är w/Tracking. vad innebär det??

Är det = att man kan använda reläet som dimmer??

Mvh Emil
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Föresten fick en ide till nu...
Föröker ju på alla vis spara in på antalet utgångar.

När jag sätter dit mina knappar, borde det inte gå att lägga även dom på en enda signalkabel?

Dvs kanske 4knappar alla utgår från samma signalkabel men har olika motstånd mot jord?
Detta borde ju även ge mig lite extra funktionalitet då man kan trycka ner 2 knappar samtidigt och generera ett nytt motstånd...
Eller det funkar inte att göra så?
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Nu blir det kanske lite mycket kommentarer på rad men stötte på ett problem, jag misstänker att det är kodrelaterat därav bifogar jag koden.

Kod: Markera allt

#include <OneWire.h>
#include <LiquidCrystal.h>

OneWire  ds(9);  // on pin 9
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(void) {
  Serial.begin(9600);
  lcd.begin(20, 4); // set up the LCD's number of columns and rows: 
  
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
  
  delay(1000);    
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
 
  lcd.setCursor (0, 0);
  lcd.print("Emils specail");
  lcd.setCursor(0, 1);
  lcd.print(celsius);
  lcd.setCursor(6,1);
  lcd.print("Celsius");
  lcd.setCursor(0, 2);
  lcd.print("Switch voltage");
  lcd.setCursor(0, 3); 
  lcd.print(voltage);
  
}
Från början så var det kopplat på följande vis på A0.

Från A0 till en kopplingspunkt där 2 olika stora motstånd var kopplade (4,7Kohm och 10Kohm)
Efter varje motstånd så kopplade jag en tryckströmbrytare (av den fjädrande typen dvs man måste hålla den intryckt för att få kontakt)
Och sedan dessa till + (5V)

Sen använde jag mig av koden ovan i hopp om att få 2 olika voltstyrkor jag kunde anväda mig av som signal.
Saken är den att jag kan koppla ur A0 helt och får endå en spänning som varierar mellan 5V-0V....
Har provat att byta till A1 utan resultat.

Därav misstänker jag att jag strulat till det lite med koden.
(som ni säkert märker så är grunden till koden lite exempelkod jag byggt vidare på)
Själv misstänker jag att det är något strul med att jag har 2st Float komandon i början med det är bara en ren gissning.

Kan tilläggas att övrig kod fungerar, i allfall så långt att jag kan få ut tempraturen på displayen.
och övrig text ;)
komunikationen över serieporten verkar även den att fungera bra (visar inte mycket då jag städat lite där)

EDIT: Hade ett litet brutalt hjärnsläpp här löste det med hjälp av pulldown motstånd...
(håller dock fortfarande på att leta passande motstånd för att få en bra delning på mina knappar)
Men koden kanske är intressant för andra ;)
Verkar som man kan få det att fungera nästan som jag sa med ;)
Har däremot ändrat mig lite, mäter nu resistans istället (bättre upplösning)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av sodjan »

> Gillar ju upplägget på PIC dvs man bara programerar en microprocessor och flyttar ut så att säga

Det är (så klart) inget unikt för just en PIC. Om man hade byggt en Arduino med
en PIC och haft en "lös" AVR (som man programmerade med motsvarande en PICkit)
så hade det ju varit exakt samma situation fast tvärtom, så att säga.

Det är ju just detta som är valet man gör mellan en pryl i stil
med en Arduino eller att köra med lösa AVR/PIC processorer.

> Föresten kollar fortfarande runt lite på SSR:er,

Har du sett :
http://www.tradera.com/finding.mvc/item ... ias=sodjan ?

> ...det enda som står är w/Tracking. vad innebär det??
Fullständigt omöjliget att svara på. Ge gärna referens till de texter
eller liknande som är oklara.

> Dvs kanske 4knappar alla utgår från samma signalkabel men har olika motstånd mot jord?

Jo det fungerar. Man får läsa knappen analogt och jämföra med olika nivåer.
Och då får koppla så att det blir olika spänningsdelare, så klart.
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

http://viewitem.eim.ebay.se/wTracking-N ... 12962/item

Framgår ju absolut nada ang vad w-tracking betyder.
Rätta mig om jag har fel men en SSR är väl bara PÅ/AV dvs ingen dimmer funktion?
Dimmer osv får man väl bara genom att köra PWM på utaget så att reläet slår på/av i hiskelig takt?

Detta reläet är lite större än vad jag behöver (minst 10amp, tror dock jag väljer en 25amp så jag inte ligger och maxar SSR:en)
Har lugnat mig lite i bygget då jag har massor av arbete innan det är klart så långt att styrsystemet skall plockas dit.
Så ännu är det inte köpläge ;)
Däremot så kollar man ju runt lite när man ligger och slösurfar ;)

Knapparna sitter, programkoden är skriven. har även fått dit lite fler tempratursensorer ;)
UI börjar så sakteliga närma sig slutet snart måste vi hugga tag i logikdelen (SWMBO är programeringsgurun i huset ;) )
Så hon har hjälpt mig massvis när jag kört fast på den delen tacksamt nog :D

Vartefter det är dags att färdigställa UI, och börja beställa hem prylar inför slutet på projektet ;)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av sodjan »

> Framgår ju absolut nada ang vad w-tracking betyder.

I *det* fallet betyder det sannolikt bara att det är spårning på försändelsen. "With tracking".

> Rätta mig om jag har fel men en SSR är väl bara PÅ/AV dvs ingen dimmer funktion?

Ja och nej.
En SSR med "zero crossing detection" (nollgenomgångsstyrning) kan inte användas som "dimmer".
Det är det vanligaste för lite större SSR'er. Mindre finns ofta i båda versionerna.

> Dimmer osv får man väl bara genom att köra PWM på utaget så att reläet slår på/av i hiskelig takt?

Nej. Man fasstyr tillslaget. Googla lite på dimmer, triac o.s.v.

Jag vet inget om det där kina-SSR'en. Inget fabrikat jag känner igen.
Crydom är ett känt kvallitetsmärke.
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Okej då är jag med ;)

Jag tror inte jag kommer ha ett behov av att dimma ner elpatronerna inte efter att jag gjorde om systemet.
(dvs värmer lakvatten och låter istället vörten cirkulera i en slinga i lakvattnet)
Gentemot att värma vörten direkt som var första varianten jag tänkte köra, (där hade jag dock problemet att vörten är så sockerrik att den gärna bränner vid elpatroner när man har normal yteffekt)

Frågan var mest en fundering som jag fick när jag sökte runt ;)

Föresten ett problem har dökit upp.
Jag tankade för en stund sedan ner ett bibliotek till mitt arduino, (PID_v1.h)
Men det vill sig inte när jag skall inkludera detta i koden.
Inte ens när jag kör exempelkoden som följde med så vill det sig.

Normalt när man skriver.
#include <PID_v1.h>
Så blir ju texten innanför pilarna gul.
Dvs det borde ju se ut så här
#include <PID_v1.h>

Har lagt in hela mappen som heter lika i mappen libaries och startat om (precis som jag gjort med andra bibliotek hitils som har funkat)
Har även provat att ta den långa vägen dvs välja include libaries i arduinos menyer.

Det skumma är att texten har rätt färg under tiden du skriver dvs tills man slänger in ett understreck.
Vad kan vara fel och hur kommer jag runt det?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av sodjan »

Är det "_" även i namnen på andra libbar ?
Har du provat att bara döpa om prylarna ?
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Har nu prövat lite med det biblioteket,
SWMBO fick det att fungera i allfall att ladda in biblioteket.
Dock så av någon outgrundlig anledning så funkar ej det biblioteket tillsammans med vad vi hitils skrivet (allt blir bara helskumt)
Tempen låser sig på antingen värdet den hade vid inkoppling eller så visar den 80C (way off)
Sen att det visade sig att SWMBO skrev ihop en kodsnutt som fungerar som ersättare på några minuter gjorde att vi för tillfället har valt att skrota den delen (Blir ingen äkta PID reglering men då setupen är lite udda så är det tveksamt om det hade fungerat i vilket fall)

Som det är nu så skall följande hända.
Rast 1, värm till 45C och gå sedan vidare.
Vad som händer i verkligheten är att lakvattnet värms till 45C för att sedan stanna där,
Medans vörten cirkulerar genom slingan i lakvattet och tempraturen mäts både på ingående och utgående på denna slinga.
När ingående tempratur är = 45C så går den vidare till rast 2.

Vi har redan börjat fundera på om man inte kan förbättra detta genom att låta arduino räkna på systemet och därmed kanske öka tempraturen någon extra grad till att börja med i lakvattnet och sedan låta denna kylas av den kalla vörten så att jämnvikt uppnås snabbare, detta är nog bäst att prova ut i det färdiga systemet då man även får räkna på ev värmeförlust osv

Det verkar som att ett bibliotek här begränsar oss mer än vad det gör nytta.
I allafall är det den linan vi kör på för tillfället.
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Sådärja, nu är mina digatala utgångar slut :(

Tacksamt sitter nästan allt på plats (några LEDs får ersätta SSR:erna så länge)
Men då jag egentligen skulle vilja ha lite statusleds också så är frågan om man kan lägga en led på samma kabel som signal till SSR.
Dvs-----220ohm ------led------SSR in-----x---SSR out-----gnd.
Alternativt lägga leden paralelt.
Funkar detta eller bör jag koppla in något annat innan SRR:en?

Nästa korkade fråga.
Jag har fortfarande några analoga ingångar jag kan nyttja.
Vad som skulle vara bra var att så långt som det är möjligt med en magnetkopplad pump att få in en säkerhetsfunktion.

Bäst är att på något vis bevisa att ett flöde existerar i ledningen (detta blir nog ruskigt svårt och dyrt)

Näst bäst är att se så att pumpen alltid matas med 230V (som sagt magnetkopplad pump så strömförbrukningen lär hålla sig hyfsat konstant oavsett om det är stopp eller ej) även detta vet jag ej hur man skulle kunna göra.

Sen då det som ligger närmast till hands rent tekniskt.
Att mäta upp så att SSR:en alltid får en signalspänning, dvs mäta imellan SSR och gnd hur skulle man koppla detta?
kan man kanske tilloch med lägga det i programeringen så att arduino själv känner av om signalen den skickar verkligen kommer till jord?

Dom få digitala jag har över är enbart utag 0 och 1 (har inte vågat bruka dessa då det står 0->RX och 1<-TX) vet ej vad som menas med det så har bara undvikit dom ;)
Vet någon vad det innebär så skadar det ej med upplysningar ;)

Tackar för alla svar än så länge 8)
Mvh Emil
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av sodjan »

> Sådärja, nu är mina digatala utgångar slut...
> Jag har fortfarande några analoga ingångar jag kan nyttja.

Ja, detta är en av "avigsidorna" med lösningar typ Arduino.
På en "naken" processor (d.v.s utan det extra lager som Arduino
trär över det hela) så är varje individuell pinne programmerbar
som analog eller digital funktion.

OK, nu så verkar det som att det är lätt att kringgå detta, man använder
helt enkelt "A0" o.s.v på samma sätt om det vore en digital (Dx) pinne :
http://arduino.cc/en/Tutorial/AnalogInputPins
(Har du letat? Första träffen på "arduino analog pins used as digital".)

> Att mäta upp så att SSR:en alltid får en signalspänning, dvs mäta imellan SSR och
> gnd hur skulle man koppla detta? Kan man kanske tilloch med lägga det i programeringen
> så att arduino själv känner av om signalen den skickar verkligen kommer till jord?

Förstår inte. Om du lägger "hög" till SSR'en, varför skulle den inte "få det"??
Vad skulle kunna hindra det? Felkoppling? Men det gör man ju bara en gång.

> har inte vågat bruka dessa då det står 0->RX och 1<-TX) vet ej vad som menas med det så har bara undvikit dom...

"arduino rx tx pins used as digital" ger en del rellevanta träffar :
http://www.societyofrobots.com/robotfor ... ic=12396.0
http://www.arduino.cc/cgi-bin/yabb2/YaB ... 1264539410
http://arduino.cc/it/Reference/Board

> ..vet ej vad som menas med det så har bara undvikit dom...

Det där låter lite märkligt...
RX/TX nämns på de mest grundläggande sidorna om Arduino.
Jag förstår inte hur du har kunnat missa att det är pinnar för seriekommunikation.
Hemmek
Inlägg: 83
Blev medlem: 22 januari 2012, 03:52:14
Ort: Älmhultstrakten

Re: Bygga ett reläkort med temperaturingång, USB hjälp

Inlägg av Hemmek »

Tackar väldigt för dom fina svaren :D

Ja det med ett mäta upp till SSR, varför som sagt...

Jo då det är av yttersta vikt att pumpen går så är det en del av självdiagnostiken jag försöker få till.
Det kommer att löpa en kabel från kretsen till arduino och då det är en av dom mer kritiska grejerna så försöker jag bygga in så mycket säkerhet det bara går.
Menar det finns dåliga kopplingar, sen efter några års drift så kanske man får oxid osv kanske tilloch med ett kabelbrott.
(kan vara så att man är bortskämd med bildiagnostiken med)

Ja sidorna ang arduino........ :vissla:
Måste erkänna att jag inte läst något vidare utan bara kört några av övningarna i starten på deras hemsida innan jag blev för ivrig och började labba på egen hand :vissla:

Det lilla jag läst är vad som står direkt på kortet ;) (btw fick ingen manual med min)

Men kommer att söka själv efter svar i första hand i fortsättningen. (är så lätt att man frågar först när sidan är uppe i bakgrunden)
Sen som sagt ju fler svar folk skriver här ju gladare blir man :D

Men som sagt tackar för dom fina svaren ;)
Mvh Emil
Skriv svar