Buggfix Plus
Aktuellt datum och tid: 04.49 2019-09-22

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 48 inlägg ]  Gå till sida Föregående  1, 2, 3, 4
Författare Meddelande
 Inläggsrubrik: Re: Växthusautomation
InläggPostat: 18.17 2019-08-20 
Användarvisningsbild

Blev medlem: 20.30 2010-10-06
Inlägg: 178
Ort: Finland
Tackar igen för feedbacken!

Just nu är det rätt mycket på jobbet och det stör hobbyverksamheten. Det kan nog hända att jag inte hinner skriva den utlovade fortsättningen förrän i början av september.
(Bra att man har ett system som sköter växthuset... :wink: )

Därför tänkte jag i stället bjuda på excel-filen med vilken man kan skapa textsträngar för att sedan ladda upp dem i Arduinons interna EEPROM.
Fungerar både i Excel och i LibreCalc.
(Läs fliken med förklaringar hur tabellen fungerar.)
Bilaga:
HexTex-kalkylator-Nano-20190807.xlsx


Jag bifogar också kompanjonen till tabellen, d.v.s. uppladdningsprogrammet. Listningen innehåller inga förklaringar, men programmet är så simpelt att det nog knappast ens behöver det.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
/* Uploads text strings to the internal EEPROM, Copyright H 2018, 2019 */

#include "stdlib.h"
#include "EEPROM.h"

byte vect01[16] = {0x00,0x80,0x00,0x84,0x00,0x88,0x00,0x8C,0x00,0x90,0x00,0x95,0x00,0x99,0x00,0x9D}; // 0000
byte vect02[16] = {0x00,0xA1,0x00,0xA6,0x00,0xB4,0x00,0xBC,0x00,0xC3,0x00,0xCE,0x00,0xD4,0x00,0xDA}; // 0010
byte vect03[16] = {0x00,0xDF,0x00,0xE7,0x00,0xEC,0x00,0xF5,0x00,0xFC,0x01,0x04,0x01,0x0A,0x01,0x14}; // 0020
byte vect04[16] = {0x01,0x1A,0x01,0x1F,0x01,0x25,0x01,0x2A,0x01,0x30,0x01,0x34,0x01,0x3A,0x01,0x43}; // 0030
byte vect05[16] = {0x01,0x4B,0x01,0x55,0x01,0x5F,0x01,0x69,0x01,0x6D,0x01,0x71,0x01,0x78,0x01,0x82}; // 0040
byte vect06[16] = {0x01,0x88,0x01,0x8E,0x01,0x94,0x01,0x9B,0x01,0xA0,0x01,0xA4,0x01,0xAB,0x01,0xB4}; // 0050
byte vect07[16] = {0x01,0xBA,0x01,0xBD,0x01,0xC1,0x01,0xC6,0x01,0xCB,0x01,0xD0,0x01,0xD4,0x01,0xD9}; // 0060
byte vect08[16] = {0x01,0xDD,0x01,0xE7,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // 0070

byte text01[16] = {0x53,0x5C,0x4E,0x00,0x4D,0x5D,0x4E,0x00,0x54,0x49,0x53,0x00,0x4F,0x4E,0x53,0x00}; // 0080
byte text02[16] = {0x54,0x4F,0x52,0x53,0x00,0x46,0x52,0x45,0x00,0x4C,0x5C,0x52,0x00,0x44,0x41,0x47}; // 0090
byte text03[16] = {0x00,0x4C,0x4F,0x47,0x47,0x00,0x49,0x4E,0x53,0x54,0x5B,0x4C,0x4C,0x4E,0x49,0x4E}; // 00A0
byte text04[16] = {0x47,0x41,0x52,0x00,0x41,0x56,0x53,0x4C,0x55,0x54,0x41,0x00,0x50,0x49,0x4E,0x4B}; // 00B0
byte text05[16] = {0x4F,0x44,0x00,0x5C,0x50,0x50,0x4E,0x41,0x20,0x54,0x45,0x4D,0x50,0x00,0x46,0x55}; // 00C0
byte text06[16] = {0x4B,0x54,0x2E,0x00,0x54,0x52,0x59,0x43,0x4B,0x00,0x4C,0x4A,0x55,0x53,0x00,0x49}; // 00D0
byte text07[16] = {0x52,0x20,0x4C,0x4A,0x55,0x53,0x00,0x41,0x4C,0x4C,0x41,0x00,0x54,0x49,0x4C,0x4C}; // 00E0
byte text08[16] = {0x42,0x41,0x4B,0x41,0x00,0x4B,0x4C,0x4F,0x43,0x4B,0x41,0x00,0x56,0x5B,0x58,0x54}; // 00F0
byte text09[16] = {0x48,0x55,0x53,0x00,0x44,0x41,0x54,0x55,0x4D,0x00,0x5C,0x50,0x50,0x4E,0x41,0x20}; // 0100
byte text10[16] = {0x54,0x49,0x44,0x00,0x4C,0x55,0x43,0x4B,0x41,0x00,0x4D,0x4F,0x44,0x45,0x00,0x53}; // 0110
byte text11[16] = {0x54,0x5B,0x4E,0x47,0x20,0x54,0x45,0x4D,0x50,0x00,0x53,0x54,0x5B,0x4E,0x47,0x20}; // 0120
byte text12[16] = {0x54,0x49,0x44,0x00,0x41,0x4B,0x54,0x49,0x56,0x00,0x44,0x49,0x47,0x49,0x2F,0x41}; // 0130
byte text13[16] = {0x4E,0x41,0x00,0x42,0x41,0x53,0x20,0x47,0x47,0x52,0x00,0x42,0x41,0x53,0x20,0x41}; // 0140
byte text14[16] = {0x4E,0x54,0x41,0x4C,0x00,0x45,0x58,0x54,0x20,0x25,0x20,0x78,0x31,0x30,0x00,0x45}; // 0150
byte text15[16] = {0x58,0x54,0x20,0x41,0x4E,0x54,0x41,0x4C,0x00,0x4D,0x41,0x58,0x00,0x4D,0x49,0x4E}; // 0160
byte text16[16] = {0x00,0x53,0x54,0x41,0x54,0x55,0x53,0x00,0x48,0x55,0x56,0x55,0x44,0x4D,0x45,0x4E}; // 0170
byte text17[16] = {0x59,0x00,0x53,0x50,0x41,0x52,0x41,0x00,0x56,0x5B,0x4E,0x54,0x41,0x00,0x52,0x45}; // 0180
byte text18[16] = {0x4E,0x53,0x41,0x00,0x53,0x59,0x53,0x54,0x45,0x4D,0x00,0x4E,0x49,0x56,0x5D,0x00}; // 0190
byte text19[16] = {0x53,0x59,0x53,0x00,0x41,0x56,0x42,0x52,0x59,0x54,0x00,0x42,0x45,0x4B,0x52,0x5B}; // 01A0
byte text20[16] = {0x46,0x54,0x41,0x00,0x53,0x54,0x41,0x52,0x54,0x00,0x4F,0x4B,0x00,0x45,0x52,0x52}; // 01B0
byte text21[16] = {0x00,0x53,0x5B,0x4E,0x44,0x20,0x44,0x41,0x54,0x41,0x00,0x46,0x55,0x4C,0x4C,0x00}; // 01C0
byte text22[16] = {0x54,0x4F,0x4D,0x00,0x56,0x5B,0x4C,0x4A,0x20,0x5A,0x4F,0x4E,0x00,0x56,0x41,0x54}; // 01D0
byte text23[16] = {0x54,0x4E,0x41,0x20,0x4E,0x55,0x00,0x56,0x5B,0x58,0x4C,0x41,0x20,0x4E,0x55,0x00}; // 01E0
byte text24[16] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x12,0x34}; // 01F0

word vectpnt;
word textpnt;
byte once = 0;

void setup()
{
  Serial.begin(9600);
}

void writeVectors()
{
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt,  vect01[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 16,  vect02[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 32,  vect03[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 48,  vect04[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 64,  vect05[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 80,  vect06[vecpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x0010; vecpnt++)
  {
    EEPROM.write(vecpnt + 96,  vect07[vecpnt]);
    delay(5);
    Serial.println(" . ");
  }
  for (byte vecpnt = 0; vecpnt < 0x000E; vecpnt++)
  {
    EEPROM.write(vecpnt + 112,  vect08[vecpnt]);
    delay(5);
    Serial.println(" . ");
  }
}

void writeStrings()
{
  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 128,  text01[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }
  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 144,  text02[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 160,  text03[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 176,  text04[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 192,  text05[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 208,  text06[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 224,  text07[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 240,  text08[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256,  text09[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 16,  text10[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 32,  text11[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 48,  text12[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 64,  text13[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 80,  text14[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 96,  text15[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 112,  text16[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 128,  text17[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 144,  text18[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 160,  text19[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 176,  text20[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 192,  text21[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 208,  text22[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 224,  text23[txtpnt]);
    delay(5);
    Serial.print(" . ");
  }

  for (byte txtpnt = 0; txtpnt < 0x0010; txtpnt++)
  {
    EEPROM.write(txtpnt + 256 + 240,  text24[txtpnt]);
    delay(5);
    Serial.println(" . ");
  }
}


void loop() {
  if (once == 0)
  {
    Serial.print("EEPROM writing starts in 3 seconds ");
    delay(1000);
    Serial.print(" . ");
    delay(1000);
    Serial.print(" . ");
    delay(1000);
    Serial.println(" . EEPROM writing starts now");
    delay(100);
    Serial.print("Writing vectors ");
    delay(100);
    writeVectors();
    Serial.print("Writing strings ");
    delay(100);
    writeStrings();
    Serial.println("Writing done!");
    once = 1;
  }
  while (once != 0) {
  Serial.println("Loading text strings to internal EEPROM is done. You can load the main program now.");
  delay(10000);
  }
}

Man kunde förstås göra programlistan kortare om man kombinerade looparna, men eftersom det är ett program som bara laddas ner och körs en gång, så tyckte jag inte det var viktigt.


Fotnot: Fast jag använder excel ganska mycket blir jag allt emellanåt ändå förvånad över HUR användbart det i själva verket är!
Jag brukar ofta använda excel för att skapa G-kod till CNC-fräsen också. Speciellt då när man behöver göra någon geometrisk figur är det enklast att låta excel räkna koordinaterna och skapa koden, och så bara Copy och Paste till en textfil, och så kör man.
MYCKET användbart!


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
 Inläggsrubrik: Re: Växthusautomation
InläggPostat: 07.02 2019-08-28 

Blev medlem: 13.42 2011-08-15
Inlägg: 162
Som så många andra redan sagt: Spännande projekt, och väl beskrivet! :)

Jag byggde ett väldigt enkelt bevattningssystem för användning inomhus, vilket gjorde att jag var paranoid när det gällde att systemet låser sig med pump på och skvätter ut allt vatten utan kontroll med fuktskador som följd. Därför satte jag ett andra relä på inkommande spänning till pumpen, styrt av en liten andra-processor. Om inte huvudsystemet sparkar på denna en gång i sekunden så får inte pumpen ström, hur mycket det än försöker.
Däri kan man också enkelt lägga lite gångtidslogik, så att systemet inte kör för länge och vattnar för mycket.
Något liknande skulle ju kunna lösa dina problem med att reläerna klickar till vid uppstart, samt undvika att eventuella tankemissar i programmeringen tömmer ut hela stora tanken...


Upp
 Profil  
 
 Inläggsrubrik: Re: Växthusautomation
InläggPostat: 19.43 2019-09-10 
Användarvisningsbild

Blev medlem: 20.30 2010-10-06
Inlägg: 178
Ort: Finland
Det blev en liten paus i skrivandet p.g.a. jobbet. Under de senaste tre veckorna har jag inte hunnit åka ut till ön mer än två gånger av och an utan övernattning.
Bevattningssystemet har kommit mer än väl till pass.
Så här kommer det nog dessvärre att fortsätta hela september ut, men sedan lättar det.

Senaste söndag åkte jag ut för att fylla på vatten och kunde samtidigt skörda det som var färdig.
Chilin hör ju hemma i betydligt varmare trakter och många i det bälte runt jorden som bara har två årstider, d.v.s. sommar och ”o-sommar”. Dessa arter blommar nästan ständigt och är därför också tacksamma för växthusodling, för de producerar också frukt hela tiden. Ett år satte jag fröna i jorden i slutet på december. Följande vår blev de första chilina färdiga redan i april och sedan fortsatte det ända tills oktober då jag stängde ön för vintern. Buskarna hann dock bli ganska stora hemma på fönsterbrädet i stan, så de var besvärliga att flytta ut till växthuset.

Det problemet finns det två lösningar till: den ena är förstås att inte börja så tidigt, den andra lösningen vore att lära sig beskära buskarna rätt. Det senare alternativet är förstås bättre, men det får jag jobba på när jag har mera tid...

Här är söndagens skörd.
Bilaga:
Chilis-20190908.jpg

Ca. 50 st av arterna Aji Cristal (styrka 5-6 av 10), Cayenne (5-6), Fire Flame (7-8) och India Red (8).
Jag har redan tidigare plockat ungefär lika mycket och upskattar att det finns minst 4 ggr lika mycket på gång - antalsmässigt.

Två arter har än så länge bara börjat rodna: Pequante (5) och Ramiro (0 – barnchili) och de producerar mycket stora och tunga frukter. (Ramiro är stora som avlånga paprikor).
Viktmässigt har jag alltså skördat bara några futtiga procent.

För att sedan övergå till automatiken och det som ännu skall göras eller bör förbättras, d.v.s. en

Återstår att göra-lista:
1. Vädringsluckans mekanik samt styrning i programmet.
2. Nya fuktsensorer (som inte korroderar) + programändringar.
3. Byta ut slangar (till mörka för att förhindra algtillväxt).
4. Förbättra fästena för spridarrören så de fixeras i rätt läge.
5. Konstruera solskydd för elektroniken.
6. Arrangera något slags automatisk vattenpåfyllning, t.ex. regnvatten från stugans takrännor.
7. Datainsamling [programmet i Raspberry PI]
8. Dataöverföring över internet (från RasPI databas till …?)
9. Möjliggöra kontroll och styrning av bevattningsystemet från RasPI och över internet.
10. Fundera över vad jag skall göra med allt insamlat data...

Puh! Den listan blev lång när jag riktigt började fundera...

De punkterna skall jag ta upp i kommande inlägg.


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 48 inlägg ]  Gå till sida Föregående  1, 2, 3, 4

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 7 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010