Cigarrövervakare

Berätta om dina pågående projekt.
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Cigarrövervakare

Inlägg av Noddan »

Då var det dags för ytterligare ett projekt från min sida. Alla mina tidigare projekt är förvisso inte färdiga, men vad hindrar att man har flera igång samtidigt? :)
Mitt andra större projekt, en dubbel gitarreffekt ligger och väntar på att skolan ska dra igång igen så att man bor i samma stad som alla ens elektronikgrejer, så jag satte igång och planerade detta under tiden.

Projektidén är en övervakare utav en cigarrlåda, som ni alla vet så ska cigarrer hållas i ungefär rätt temperatur och luftfuktighet. För att man inte ska glömma bort att fylla på vatten i humediatorn (eller vad 17 det nu heter) så ska två vackra displayer vardera bestående av tre 7-segments LED-displayer visa temperatur och luftfuktighet. Om någon av de sjunker för lågt så ska en liten irriterande buzzer börja pipa så att man genast kan springa upp ifrån gymmet :roll: för att förhindra att de manliga cigarrerna går till spillo. Notera att projektet inte är till mig utan till en vän, själv är jag inte i närheten tillräckligt manlig för att kunna ha en cigarrlåda, än mindre en cigarrlådeövervakare.

Det kanske inte är ett jätteavancerat bygge, men jag är relativt ny inom elektronikens värld och detta känns som ett lagom svårt projekt för stunden. Hjärnan i systemet blir en Mega8 eftersom jag har en hög liggandes, man kommer säkert undan med något mindre avancerat men det kan vara bra med lite headroom :)

För att mäta luftfuktighet och temperatur behövs såklart även två sensorer, de ger ut en spänningsnivå linjär mot temperaturen/luftfuktigheten. De heter HIH 3610 och LM 35.

Jag har börjat pilla lite på kopplingsschemat, det blir två displaykort som ansluts till huvudkortet via vanlig 10-polig flatkabel. På displaykorten sitter, förutom 7-segmentsdisplayerna, en 4511 (BCD->7SEG med latch) per display och några förkopplingsmotstånd. Kopplingsschemat till huvudkortet ser just nu ut såhär:
Större bild.
Bild

Jag har säkert gjort några missar, ser ni några får ni gärna hojta till!

Det var allt för denna gång, men uppdatering kommer snart efter jag kommer till Göteborg igen :)
Senast redigerad av Noddan 18 oktober 2005, 22:10:35, redigerad totalt 7 gånger.
Användarvisningsbild
lgrfbs
Inlägg: 7028
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Inlägg av lgrfbs »

Klicka på bild.
Bild

Kod: Markera allt

[url=http://img352.imageshack.us/my.php?image=sch17le.png]Klicka på bild.
[img]http://img352.imageshack.us/img352/7981/sch17le.th.png[/img]
[/url]
Edit: Fint att du fixade till det 8)
Senast redigerad av lgrfbs 23 augusti 2005, 21:00:16, redigerad totalt 1 gång.
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Inlägg av Noddan »

Tack så mycket för hjälpen =)
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Jaså du är inte manlig nog att ha en cigarrlåda?
Vet inte om jag är det, men jag har en iaf.
Kul projekt, skulle kunna vara nyttigt.
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Inlägg av Noddan »

Nä det är jag nog inte, uppskattar inte smaken tillräckligt mycket iallafall.
Har du några bilder på din, cigarrlådor brukar vara riktiga träkonstverk :)
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Nej det har jag inte tyvärr.
Den är inte ett riktigt träkonstverk, men billig var den :).
Ska lacka om den igen. Det blev inte särskilt bra. Ska testa valnötslack.
Nu är det någon mattsvart semibets.
Användarvisningsbild
Groover
Inlägg: 483
Blev medlem: 31 december 2004, 16:50:18
Ort: Ängelholm
Kontakt:

Inlägg av Groover »

På en sån där snygg låda i trä så borde man använda de där displayerna som är av rörtyp med glödtråd som bildar siffran. Kommer inte på vad de heter just nu men några här har byggt klockor med dom.
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg av ensten »

nixie
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

Jag skulle nog föredra att ha en separat enhet med Display och ev knappar. Å sedan en sladd från lådan där givarna sitter.
Eller skall du bygga en helt ny låda?
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

ensten skrev:nixie
Groover skrev:På en sån där snygg låda i trä så borde man använda de där displayerna som är av rörtyp med glödtråd som bildar siffran. Kommer inte på vad de heter just nu men några här har byggt klockor med dom.
Glödtråd = Numitron
Bild

Stansade siffror = Nixie
Bild
Användarvisningsbild
Groover
Inlägg: 483
Blev medlem: 31 december 2004, 16:50:18
Ort: Ängelholm
Kontakt:

Inlägg av Groover »

Ahh, där hade vi det. Nixie var det jag tänkte på :)
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Uppdatering!

Inlägg av Noddan »

Det tog längre tid än jag trodde innan jag hade tid att börja labba med saker och ting, men nu har jag tagit en kväll och lekt lite grand. Eftersom jag nästan inte använt mikroprocessor till något tidigare så var det lite meckande innan jag lyckades få saker och ting att fungera som jag ville. Är rätt ovan C också, så det var en hel del problem som uppdagade sig.

Jag har i alla fall sensorerna, 7segmentsdisplayerna och drivkretsarna hemma nu så jag har i princip allt som behövs till bygget. Skolan äter dock upp jättemycket tid för stunden (dubbla mattekurser och fysik) så det blir inte så mycket elektroniklabtid som jag skulle vilja. Drivkretsarna blev som sagt 4511, och 7-segmentsdisplayerna är röda respektive gröna med en höjd på ungefär 20mm, det ska ju synas från lite håll. Jag saknar dock fortfarande BCD->binäromvandlaren. Skall fixas så snart som möjligt.
Det mesta som behövs
Bild


Givetvis kunde jag inte hålla mig från att försöka använda AD-omvandlaren och slänga ut resultatet på en LCD, och det verkar faktiskt fungera riktigt bra. Jag har en timer som snurrar på, och så fort den får overflow så ger den ett interrupt som startar A/D-omvandling. När jag bara lade ut värdet direkt så blev det ingen vidare fin stabil temperatur, den hoppade upp och ner med så mycket som 0.5C vilket kändes väldigt oroväckande, inte kan det väl vara såhär dåligt? Efter en stunds funderande testade jag att "integrera diskret" över 16 punkter, dvs att ha en array av 16 mätvärden där jag uppdaterar ett i taget och tar medelvärdet av dessa 16. Efter detta blev temperaturen mycket mer stabil, jag har dock ökat antalet integreringspunkter till 32 då det blir 100% stabilt med detta. Vid 16 punkter så diffade den på 0.1C lite då och då.
Bild på displayen
Bild


Allting är uppkopplat på en STK500 och en kopplingsplatta. För att få en bra spänningsreferens till mega8:an (AREF) så har jag helt enkelt använt mig av en trimpot som jag ställt in så att spänningen på benet är 1024mV (enligt min billiga multimeter som behöver bytas snart). Det borde nämligen räcka med att sätta in en punkt på rätt ställe i värdet från A/D-omvandligen för att få det i grader C då temperatursensorns utvärde ökar med 10mV/C. Jag har kopplat in en vanlig billig 16x2-LCD med HD44780-kontroller för att visa värdet, och det ser som sagt ut att fungera som det ska.
Bild på labbdäcket
Bild


Givetvis har det dock uppstått ett problem som jag inte tänkt på. Luftuktighetsmätaren kommer att behöva en AREF på 5V medans temperatursensorn vill ha en på 1V. Jag ser två möjliga lösningar på problemet, antingen så förstärker man spänningen ifrån temperatursensorn med en faktor 5 via en opamp, men det känns som att man bara lägger till en felkälla. Det andra alternativet är att använda en mux av något slag för att växla mellan de två inför avläsning. Andra idéer eller förslag tas gärna emot.

Jag funderar också på vad man bör använda för spänningsreferens senare, är zenerdioder att lita på?
Användarvisningsbild
Illuwatar
Inlägg: 2256
Blev medlem: 10 november 2003, 14:44:27
Skype: illuwatar70
Ort: Haninge
Kontakt:

Inlägg av Illuwatar »

Kul projekt - även till synes enkla saker skall göras avancerat, annars är det ingen sport... ;)

Hoppas du kommer visa lite ATmega8-kod. Speciellt rutinerna för att läsa AD-värdena, integreringen och omvandlingen till decimaltal för visning på display är av intresse - har nämligen ett vilande bygge till GeekJoan som skall visa spänningar på ett likande sätt. Jag skulle spara en herrans massa tid om du ville dela med dig lite.

Edit: Till detta skall koden användas:

http://www.elektronikforumet.com/forum/ ... php?t=5275
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Inlägg av Noddan »

Jag håller helt med :) Din hörlursmixermojjäng bevisar onekligen din ståndpunkt i frågan :wink:

Visst kan jag visa upp lite kod, men det är som sagt nästan det första jag gör så det finns säkert mycket bättre sätt att göra det jag vill göra. Jag antar att det inte går att bifoga filer på något smidigt sätt, så jag sätter det relevanta inom code-taggar. Om du vill veta något mer är det bara att hojta till! (ligger en del oanvända och onödiga variabler kvar, har lekt lite med olika sätt att formatera strängar).

Först har vi timern som läser av värdet ett antal gånger per sekund (VeryTemp är bara till för att jag skulle se att jag räknade ut medelvärdet rätt, visar de diffande värdena brevid det "integrerade"):

Kod: Markera allt

//Mina söta variabler
flash int NumSaveValues=63;    //Antal värden som medelvärdet räknas efter.
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//Variabler som vi behöver
  int i;
  static int ArrayPointer;
  static int Measurements[63];     //SKALL BYTAS VID INTEGRERINGSLÄNGDSBYTE!!
  static int PreviousMeasurement;     
  char tempchar[4];
  int OutputValue;
  char finalchar[7];    
  char VeryTemp[4];

//Här börjar koden  
  ArrayPointer++;      
  if(ArrayPointer > (NumSaveValues-1)){
    ArrayPointer=0;
  }
  Measurements[ArrayPointer] = read_adc(0);

//Här räknar vi ut det nya värdet som skall visas
  i=0;             
  OutputValue=0;
  while(i < NumSaveValues){
    OutputValue=OutputValue+Measurements[i];
    i++;
  }      
  OutputValue=OutputValue/(NumSaveValues);
  
//Här skriver vi ut en massa grejer  
  if (OutputValue != PreviousMeasurement){
    PreviousMeasurement=OutputValue;  
    itoa(OutputValue,tempchar);  
  
    lcd_clear();
    lcd_putsf(".Temp.    .Fukt.");
    lcd_gotoxy(0,1);        
  
    finalchar[0]=tempchar[0];   
    finalchar[1]=tempchar[1];
    finalchar[2]='.';
    finalchar[3]=tempchar[2];
    finalchar[4]=0xDF;
    finalchar[5]='C';
    lcd_puts(finalchar);     
    
    lcd_gotoxy(10,1);
//    lcd_putsf("XY.Z %");

  }
  lcd_gotoxy(10,1);
    itoa(Measurements[ArrayPointer],VeryTemp),
    lcd_puts(VeryTemp);
}
Sedan har vi koden för själva AD-omvandlingen, den har jag inte rört själv utan fått direkt ifrån programmet:

Kod: Markera allt

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Och den relevanta delen av initieringen ser ut såhär:

Kod: Markera allt

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 31,250 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;
                            


// LCD module initialization
lcd_init(16);               
lcd_clear();
lcd_putsf("!Skall ej synas!");

// Global enable interrupts
#asm("sei")

Har för övrigt funderat lite mer angående delning av spänningar osv, och det slutade med att jag samplade in en spänningsreferenskrets ifrån Texas som ger ut 2.048V med väldigt bra precision. Spänningsdela det via två motstånd så får man 1024mV stabilt och bra. Kommer även att spänningsdela ner fuktighetssensorn 4:1 så att dess utsignal också ligger mellan 0 och 1V.

Har även gjort en länk till RS232 till ett senare DS18S20-bygge och skrivit ett litet delphiprogram som tar emot datan =) Kanske inte är så avancerat för er killar, men för mig var det väldigt nice när det hela till sist fungerade. Tog ett himla tag innan jag insåg att jag körde på fel klockkälla, efter att ha slagit om den så funkade det perfekt.
Screenshot!
Bild
Användarvisningsbild
Illuwatar
Inlägg: 2256
Blev medlem: 10 november 2003, 14:44:27
Skype: illuwatar70
Ort: Haninge
Kontakt:

Inlägg av Illuwatar »

Tackar så mycket för koden. Ser ut som jag får putsa av mina gamla C-kunskaper samt skaffa en kompilator för AVR. Har kört assembler hittils, men formatomvandlingar och textformatteringar är uppenbarligen lättare att få till med högnivåspråk. Rutinerna för LCD-accessen, ingick de i kompilatorn eller har du gjort dem själv?
Skriv svar