Varför vill jag inte ha en rödgrön värld?

04/02/2019

Jag var på slutet av 1970-talet mycket positivt inställd till naturskydd och allmänt gröna idéer. Jag har också varit mycket positivt inställd till globalismen men jag uppfattar att det politiska tåget med åren har spårat ur.

Med åren har jag tagit allt mera avstånd från det rödgröna tänkandet som på slutändan verkar se mänskligheten som sin fiende. Hur många gånger har vi inte hört globala kändisar (prins Philip) utbrista”…Om jag reinkarneras skulle jag vilja återkomma som ett dödligt virus för att på detta sätt kunna göra något för att lösa överbefolkningen.” Notera att han talar om levande män, kvinnor och barn som han gärna skulle se duka under i någon lämplig dödlig sjukdom.

Ovanstående är beklagligtvis inte ett vansinnigt uttalande som har tagits ur sitt sammanhang utan en gemensam mörk ström som verkar gå genom elitens tänkande sedan början av 1900-talet. Samma tänkesätt tog sig tidigare uttryck i eugenik d.v.s. rashygien som på slutändan dödade miljoner människor. Jag tycker mig se samma tänkande d.v.s. vanligt folk och speciellt fattiga uppfattas inte ha något värde och man ser elimination av värdelösa grupper som något önskvärt. En elit bestående av en grupp vänstervridna miljardärer använder den tidigare vänstern och den gröna rörelsen som sina nyttiga idioter. Är t.ex. den svenska socialdemokratins tillbakagång en följd av att man inte längre ägnar de svaga i samhället någon tanke till följd av att de styrande politikerna ofta idag saknar egen erfarenhet av hederligt arbete?

Maurice Strong (Kanadensisk miljardär i olja) var motorn bakom grundandet av IPCC (FN:s  organisation för att studera klimatförändring) där IPCC:s mandat/uppgift definierades så att endast mänsklig påverkan på klimatet skulle studeras. Maurice strong konstaterade:

“Isn’t the only hope for the planet that the
industrialized civilizations collapse?
Isn’t it our responsibility to bring that about?”
– Maurice Strong,
founder of the UN Environment Programme

Översatt ungeför: ”Är inte planetens enda hopp att den industrialiserade civilisationen kollapsar? Är det inte vår plikt att få detta till stånd?

En stilla fråga: Hur många miljarder döda skulle detta åstadkomma? Sett ur detta perspektiv bör man väl uppfatta 1930-talets brunskjortor som visionslösa amatörer.

Vi har redan många gånger kunnat se resultatet av fanatisk ofta extremt socialistisk ideologi. De röda khmererna i Kambodja är antagligen ett exempel som de flesta lite äldre personer kommer väl ihåg.

Röda Khmererna i Kambodja.

Mera bakgrund kring de röda Khmererna.

De röda Khmerernas grundtanke var att göra om samhället till en kommunistisk utopi. Modellen togs från ett antal små självförsörjande folkgrupper. Ett av målen var också att eliminera den fördärvliga religionen (Buddism). Resultatet var över två miljoner döda.

De Röda Khmerernas framfart kan mycket väl jämföras med Stalins Sovjetunionen och Maos stora språng framåt … antalet döda från dessa experiment är betydligt större än Khmerernas men satt i relation till totalbefolkningen torde nog Khmerernas vansinnesstyre vara i en klass för sig.

Samma tänkande hittar vi på många håll:

”Utrotandet av Homo Sapiens (människan) skulle betyda överlevnad för miljoner, om inte miljarder, på jorden levande arter. Att fasa ut den mänskliga rasen  löser alla problem på jorden – sociala- och miljöproblem.”

Ingrid Newkirk grundare av PETA (Ethical treatment of Animals). Här har vi igen en person som utan att blinka framför en tanke på att eliminera över sju miljarder människor …

Vi kan se hur den gröna socialismen har flyttat fokus från att välja en specifik oskyddad grupp människor som fiende (Judar på 1930-talet) till en abstrakt fiende i form av hela mänskligheten.

Romklubben är en neomalthusiansk sammanslutning av personer från samhällets toppskikt. Malthus var en brittisk präst som lade märke till att befolkningen ökade exponentiellt medan matproduktionen ökade linjärt. Om man extrapolerar situationen in i framtiden och antar att inga förändringar sker så måste det inträffa en hungerkatastrof förr eller senare. Grundantagandet var, som vi idag kan se med facit på hand, fel. Vi ser idag att befolkningen i västvärlden skulle minska utan invandring. Vi kan inte extrapolera en tidsmässigt lokal trend tiotals eller hundratals år in i framtiden.

Romklubben grundades av italienaren Aurelio Peccei (miljonär med nära kontakter till Fiat). Romklubben (medlemmar bl.a. drottning Beatrix från Holland, Michail Gorbachev m.fl.) uppfattar att mänskligheten behöver en gemensam ”motivation”, en gemensam ”fiende” för att kunna enas om en världsregering som skulle kontrolleras av världens miljardärelit.

Jag uppfattar att det finns två grundläggande problem i elitens tänkande. Målet, en världsregering, är sannolikt OK med tanke på att det faktiskt finns problem som kräver globala lösningar. En förutsättning för en fungerande världsregering är dock att man gör förarbetet korrekt:

  • Vilka är de mekanismer som förhindrar att den världsregering man arbetar för blir en världsdiktatur?
  • Vilka är de institutioner som skall förhindra maktkoncentration på ett fåtal händer? Hur tillsätts personer i dessa institutioner?
  • Hur skall den styrande ”världsregeringen” väljas på ett rättvist och för jordens befolkning godtagbart sätt?
  • Hur skall den styrande eliten förhindras att köpa en majoritet av världsregeringens medlemmar … något man tydligen väldigt effektivt gör idag på alla nivåer.
  • Vilka är de frågor som måste lösas globalt?
  • Vilka är de frågor som måste lösas lokalt och hur skall man säkerställa att lokalsamhället inte körs över av globalt beslutsfattande.

Innan ovanstående frågor har diskuterats och accepterats av jordens befolkning är det för tidigt att skapa en världsregering.

Romklubben har kontakter till bl.a. Bilderberggruppen till vilken en stor grupp svenska och finska politiker kallats. Mötena är slutna och politiker som förväntas uppnå en synlig position i ett land kallas till möte där personen bl.a. får information om hur eliten vill att samhället skall utvecklas. Skall jag som vanlig medborgare uppfatta detta som normal politik eller är det fråga om landsförräderi?

Lars Bern har utvecklat diskussionen om (sannolikt) köpta politiker i en video som är väl värd att titta på:

 

 

Enkel temperaturlogger

08/01/2019

Jag gjorde för en tid sedan en första preliminär mätning av UHI (Urban Heat Island) d.v.s. värmenedsmutsning av tätorter. Det är självklart att meteorologiska mätstationer som ligger nära eller i tät bebyggelse bör mäta högre temperaturer än stationer som ligger ostörda på landsbygden. De lärda tvistar idag om hur stor inverkan från UHI har på globala uppskattningar av temperaturen och uppskattningarna varierar från i princip ingen alls till några tiondels grader.

Temperaturloggerns upplösning d.v.s. de minsta temperaturskillnaderna den kan detektera är 0.1 grader C.  Sensorns precision d.v.s. felet i förhållande till en välkalibrerad temperaturgivare ligger antagligen på ca. +/- 0.5 grader C.

Jag har ingen aning om hur sensorn driver med tiden och inte heller hur linjär den i verkligheten är (om jag exempelvis vet att sensorn visar rätt vi 20 grader C, hur stort är felet vid +40?). Min gissning är dock att de relativa felen vid temperatursving på några grader är mycket små d.v.s. i storleksordningen +/- 0.1 grad C.

imgp5759

Fig. 1  Den första loggerprototypen. Det 3D-utskrivna skalet är misslyckat men bättre än ingenting. Följande version kommer ur ”ugnen” efter fyra timmar då detta skrivs. Bilden visar temperaturmätning i mitt arbetsrum kväll-natt. temperaturtoppen på nästan en grad är förorsakad av min kroppsvärme.

arbetsrum20190107

Fig. 2  Mätning av temperatur i mitt arbetsrum natten mellan den 7 och 8.1.2019. Rummet är i andra våningen /därav rätt hög temperatur) och det värms endast av datorer, skrivare etc. Det är intressant att notera hur temperaturen stiger med nästan en grad då jag sitter i rummet. En människa torde producera ungefär 200W värme vilket jag uppfattar att man kan se i mätningen. Andningsluften innehåller rätt mycket fukt vilket kan ses i den röda kurvan som är relativ luftfuktighet. Grafen skapades genom att läsa in mätvärdena i LibreOffice Calc i CSV (Comma Separated Values) format. Inläsningen krävde ingen editering av datafilen.

temp_logger_base

Fig. 3  En virtuell bild av stommen till version #2 av den nya lådan till loggern i programmet Repetier-host som jag använder för utskrift. Lådan är konstruerad i programmet openscad. Processorn och skärmen är skyddade men enkelt åtkomliga. I den första versionen kom kretskortet lite för nära lådans inre vägg vilket har åtgärdats här. Likaså modifierade jag öppningarna till USB-kontakten, SD-kortet och anslutningen för signalsladden till sensorn.  I nedre hörnet finns fack för SD-kortet och Bluetooth givaren HC-05. Nära det övre hörnet finns hjälpväggar som fungerar som kraftavlastare för sensorns sladd. Normalt brukar jag behöva tre iterationer för att designen skall bli ungefär vad jag vill ha.

tloggerboxutskrift

Fig. 4  Utskrift av den nya lådan från föregående bild. 3D-skrivaren är en Geeetech I3 kopia på motsvarande Prusa I3 skrivare. Skrivaren är byggd från en byggsats och den fungerar bra. Det krävdes dock en hel del tid, kanske två veckor,  att få allt korrekt injusterat både mekaniskt och mjukvarumässigt. Fördelen med en byggsats är dock att jag inte har några som helst hämningar att fixa eventuella problem eller göra uppgraderingar.  Det här är den bästa leksak jag har gett mig på många år.

imgp5761

Fig. 5  De i temperaturloggern ingående delarna. Från vänster Arduino Mega 2560 (blå). Därefter SD-kortadapter(ljusgrön). Bluetooth adapter HC-05 (vit) och bildskärmen sedd bakifrån (röd).  I den 3D-printade lådans skruvfästen smälts mässingsgängor vilket på sikt är mycket pålitligare än att skruva direkt i plast.

En Arduino Mega som temperaturlogger

En temperaturlogger kan byggas billigt från följande komponenter:

  • Processor Arduino Mega 2560 (ca. $10 ebay)
  • Display 480×320 pixlar innehåller ofta SD-korthållare ($5-$10 ebay). Kontrollera att displayen är kompatibel med en Arduino Mega och att den inte är gjord för en Arduino Uno (SD-kortet kan vara svårt att få att fungera om kortet är för en UNO). Det lönars ig inte att använda en Arduino Uno som logger om bildskärm används … minnet räcker inte till.
  • Bluetooth adapter HC-05 ($5 på ebay)
  • Någon typ av låda för att skydda loggern jag designade en egen låda och skrev ut den med 3D-skrivare.
  • Temperatur/fuktighetsgivare DHT22 ($3 på ebay). Det finns kombinationsgivare som också mäter lufttryck. Jag byter eventuellt senare ut DHT22 givaren mot en givare som mäter temperatur, luftfuktighet och lufttryck.
  • Ett minneskort t.ex. 8 GByte (det minsta man hittar i en normal butik)
  • Två stycken 1 kohms motstånd

Utöver ovanstående behövs lödkolv, gärna en universalvoltmätare, tröd, lödtenn o.s.v. normala hobbytillbehör för elektronikhobby.

Egenskaper hos den färdiga loggern

Loggern mäter och lagrar temperatur och luftfuktighet på ett SD minneskort. Mätta data plottas i grafisk form till bildskärmen. Mätintervallat kan ställas från ca. 1s till timmar mellan mätningarna. Bildskärmen kan skalas enligt behov d.v.s. det minsta och det största värdet p skärmen kan ställas via kommandon.

Jag kommer att lägga till funktionalitet i loggern senare. Det är enkelt att lägga till mätning av andra parametrar om det behövs. Jag har för närvarande endast en temperatursensor. Tanken är att lägga till en annan sensor så att jag kan mäta utetemperaturen nära bilens tak och ca. 10 cm högre upp. Det bör vara möjligt att få en uppfattning om hur mycket värmen i bilen stör mätningarna genom att placera två termometrar på olika höjd i luftflödet.

Kontroll/styrning av loggern

Loggern skriver ut mätningar till processorns USB serieport samt till Bluetooth modulen HC-05. Via båda dessa kanaler kan man ge kommandon åt loggern.

Bäst kontrollerar man loggern via t.ex. en mobiltelefon eller en lämplig läsplatta med bluetooth.  En lämplig App för kontroll är appen ”Bluetooth Terminal” som man hittar på Google Play. Appen är gratis (det finns säkert många andra som också fungerar). Då man kopplar på strömmen till loggern och då Bluetooth är aktiv i telefonen så kommer det att dyka upp en enhet HC-05. Om det i omgivningen finns flera HC-05 enheter så känner man igen dem på deras unika id (hexadecimal sträng av bokstäver/siffror). Då anslutningen har lyckats så kan man testa förbindelsen med kommandot ”help” som visar vilka kommandon systemet känner.

Följande kommandon finns för närvarande (kommandot ”help” ger en lista över kommandon):

COMMANDS:
help      --> This help.
start     --> Start logging
stop      --> Stop logging
sdstart   --> Re-initialize SD
sdstop    --> SD write stopped
tlog      --> Print tlog.txt
tdata     --> Print tdata.txt
ls        --> List SD files
ctlog     --> Erase tlog.txt
ctdata    --> Erase tdata.txt
!         --> Comment to tlog.txt.
logint    --> Logging interval secs.
ymin      --> Set plot ymin
ymax      --> Set plot ymax
ytic      --> Set plot ytic
replot    --> Clear screen and replot

Innan man börjar logga lönar det sig att ställa in skärmen:

ymin

Säller in y-axelns minsta värde. Om vi t.ex. vet att temperaturen ute ligger på ca. +5 och vi kommer att göra en körning som kräver några timmar så kan vi sannolikt ställa in skärmen på t.ex. 0 grader C. Commandot är då ”ymin 0” utan citationsteckn.

ymax

På motsvarande sätt ställer vi in det största värdet som ryms påskärmen t.ex. 15 grader C. Kommandor är ”ymax 15”.

logint

Kommandot ställer in intervallet mellan mätningar uttryckt i sekunder. Om vi t.ex. vill logga en gång per minut så ger vi kommandot ”logint 60”.  Intervallet är inte helt exakt. Den löpande tiden d.v.s. tidpunkten för mätningen i sekunder sedan start är relativt noggrann.

replot

Kommandot ”replot” raderar skärmen och ritar ut koordinatsystemet på nytt. Räknaren som håller reda på mätningens ordningsnummer sätts till ett (1).

start

Starta loggningen med de parametrar systemet för närvarande känner (ymin, ymax och logintervall).

stop

Stoppa loggning.  Loggning kan startas på nytt med ”start”.

sdstart

SD minneskortet initialiseras t.ex. om man har tagit ur kortet och kopierat innehållet till en dator ellr om minneskortet har bytts. Samma initialisering görs då loggern startas d.v.s. det är inte nödvändigt att ge kommandot ”sdstart” då loggern startas.

sdstop

Stoppar skrivning till SD minneskortet. Det är säkrast att ge kommandor ”sdstop” innan man tar ur SD-kortet eller innan man stänger av strömmen till loggern. Om man råkar rycka ur kortet precis då loggern skriver data till minnet så kan SD minnet förstöras. På motsvarande sätt kan kortet förstöras om man stänger av strömmen medan loggern skriver till kortet.  Risken för skador på minneskortet är naturligtvis störst om loggningsintervallet är kort. Användning av ”sdstop” förhindrar skador på SD-kortet eftersom skrivning till kortet stoppas.

tlog

Lista (skriv ut) hela loggfilen. Man kan skriva kommentarer till loggfilen genom att börja en kommentar med kommandot ”!”. Den maximala längden på en rad är satt till 50 tecken.

Exempel:

! Sommarö, start

Strängen lagras som sådan i filen tlog.txt men den förses med en tidsstämpel som motsvarar tiden för mätningarna. Man kan alltså senare direkt relatera kommentaren till specifika mätningar.

tdata

Skriv ut alla mätdata i mätfilen till både USB serieporten och till Bluetooth (HC-05). Ett sätt att överföra data till en annan apparat är att lista mätdata till serieterminalen och sedan på den kontrollerande enheten kopiera data från terminalen till en fil. Användning av tdata gör att loggningen inte behöver avbrytas och man behöver inte ta ut minneskortet.

ctlog

Radera loggfilen. Allt innehåll i loggfilen försvinner.

ctdata

Radera innehållet i datafilen. Allt innehåll i datafilen försvinner.

Koppling av termometer/luftfuktighetsmätare till loggern

Sensorns signalstift kopplas till Arduino Mega A15.

Sensorns strömmatning VCC koplas till 5V bredvid Arduinons stift 22.

Sensorns jord kopplas till Arduinons jord bredvid Arduinons stift 52.

Koppling av Bluetooth HC-05

Bluetooth VCC går till 5V på Arduino Mega (bredvid VCC för temperatursensorn). Till samma stift kopplas också VCC för SD-kortet.

Bluetooth jord GND kopplas till GND på Arduino (nära A15).

Bluetooth TXD kopplas till A13.

Bluetooth RXD kopplas via spänningsdelare t.ex. så att signalen från Arduino leds till jord via två 1 kohms motstånd kopplade i serie. Signalen till Bluetooth modulen tas ut mellan motstånden. Problemet är att HC-05 RXD är gjord för 3.3V spänningsnivå medan Arduinon använder 5V nivåer. HC-05 kan fungera en tid utan spänniungsdelare men den blir inte långlivad om den kopplas direkt.

Koppling av SD-kort

SD-korthållaren bör vara av en som har inbyggd spänningsregulator och 5V tålig. Orsaken är att SD minnet är konstruerat för endast 3.3V. Ansluter man ett oskyddat SD-kort till ett 5V system så kommer minnet att förstöras snabbt (jfr. HC-05 problemet).

SD 5V kollas till Arduino 5V (kombinerat med HC-05).

SD jord (GND) kopplas till Arduino GND (kombinerat med HC-05),

SD MOSI kopplas till Arduino Mega 2560 ICSP pin 1 (MISO)

SD MOSI kopplas till Arduino Mega 2560 ICSP pin 4 (MOSI)

SD SCK kopplas till Arduino Mega 2560 ICSP pin 3 (SCK)

SD CS kopplas till Arduino Mega 2560 dig. io pin 48

LCD skärmen

LCD skärmen är en billig kinesisk skärm designad för en Arduino UNO. Skärmen har inbyggd SD-kortläsare men problemet är att SPI gränssnittets signaler i en Arduino mega ligger påannan plats (ICSP konnektorn). Jag uppfattade det inte som mödan värt att tjuvkoppla mig runt problemet så jag använder en separat SD-kortläsare.

Problemet med många billiga kinesiska skärmar är att de är totalt ”namnlösa” och det finns ofta ingen information om vilken drivkrets de använder. Drivkretsens typ avgör vilket bibliotek jag måste använda på Arduinon för att skriva till skärmen. Vill jag has en skärm som är enkel att använda för t.ex. mätändamål så vill jag inte ha en skärm som sitter som en skäld ovanpå Arduinon och samtidigt förhindrar åmst till arduinons in/ut kontakter.

Skärmen jag har använt i det här projektet använder UTFT APIN f skärmaccess. Många kinesioska skärmar använder kontrollkretsen ILI9xxx för vilken man oftast hittar drivrutiner på nätet.

Notera att skärmen inte är nödvändig för funktionen.

Om ingen skärm finns kan programmet fortfarande köras genom att kommentera bort

#define HAVESCREEN

genom att skriva // framför definitionen d.v.s:

//#define HAVESCREEN

Programmet använder då inte alls skärmen men kontroll över programmet via Bluetooth och Arduino IDE fungerar fortfarande.

Programmet i Arduino

Programmer är skrivet i Arduinos C/C++ som är standardspråket om man använder Arduino IDE. Programmet är skrivet i en form som är typisk för en mikrokontroller där det ofta helt saknas ett underliggande operativsystem. Programmet sköter alltså själv alla funktioner och det är programmerarens sak att se till att programmet aldrig hamnar i en återvändsgränd och stoppar. Programmet är i princip en oändlig slinga som upprepas på nytt och på nytt. En cykel körs på ungefär 1/10 sekund. Vid varje varv genom programslingan kontrollerar programmet om det är tid att göra en mätning, kontrollerar om det finns något nytt kommando som borde utföras.

Om det är tid att göra en mätning så mäts temperatur och luftfuktighet och mätningens nummer, tiden sedan programstart, temperatur och luftfuktighet loggas till SD-minne. Temperaturen skrivs också ut på skärmen.

Om det finns ett kommando så utförs kommandot varefter programmet väntar på att följande varv genom slingan skall starta. Långa kommandon t.ex. en utskrift av en lång datafil kan ge tidsfel d.v.s. avståndet mellan två mätningar behöver inte vara helt exakt.

Notera att indenteringarna iprogrammet har förlorats vid inklistringen  i bloggen.

Jag kommer senare att lägga ut programmet på Github som fri programvara. Tillåtelse att använda programmet fritt ges här.

// Temperature_logger
// (c) 2019 Lars Silén
// Version 1.0
//
// Runs on an Arduino Mega 2560
//
// Using a 480×320 TFT diplay will hide the ICSP connector which caries
// the HW SPI signals. The are two options going around this problem.
// The first option is th solder the signals to the ICSP allowing us to use
// the ICSP connector with the display mounted (this option is selected here).
// The other option is to use a SW SPI library driving the SD memory card.
// This option is not selected.
//
// Any free text comin in over BT is stored including clock stamp.
// This allows simple input of location.
//
#include <Arduino.h>
#include <dhtnew.h>
#include <SPI.h>
#include <SD.h> // Support library for SD memory
#include <SoftwareSerial.h>

#define HAVESCREEN

#ifdef HAVESCREEN
//################################################
// GLUE class that implements the UTFT API
// replace UTFT include and constructor statements
// remove UTFT font declaration e.g. SmallFont
//################################################

#include <UTFTGLUE.h> //use GLUE class and constructor
UTFTGLUE myGLCD(0,A2,A1,A3,A4,A0); //all dummy args

// Declare which fonts we will be using
//extern uint8_t SmallFont[]; //GLUE defines as GFXFont ref

#define ORG_X 10
#define ORG_Y 10
#define MAX_X 470
#define MAX_Y 300

#define SCALE_MINY -10.0
#define SCALE_MAXY 30.0
#define SCALE_TICY 2.5
#define CIRCLE 0
#define CIRCLE_SIZ 2
#define SQUARE 1
#define TRIANGLE 2
#define LINES 1
float miny = SCALE_MINY;
float maxy = SCALE_MAXY;
float ytic = SCALE_TICY;

#endif

#define SDavailable // We have access to a sd memory
#define REPORTINTERVAL 60*10 // For testing reporting is done ar one minute interval.
int reportinterval=REPORTINTERVAL;

// ****************************************************
// Thermo and humidity sensor
// ****************************************************

#define connectedTSens1 true
#define connectedTSens2 false

// Looks like digital IO 22-53 don’t work properly.
// Use PWM pins or A-series pins.
#define DHT22Sens1 A15
#define DHT22Sens2 A12

DHTNEW mySensor1(DHT22Sens1);
#ifdef DHT22Sens2
DHTNEW mySensor2(DHT22Sens2);
#endif

// ****************************************************
// SD-memory support
// ****************************************************
// MISO, MOSI and SCLK in ICSP header.
// CD on pin 53.

Sd2Card card;
SdVolume volume;
SdFile root;
int SDstop = false;

int measured = false;
float Temperature = -999.0;
float Humidity = -999.0;
unsigned long timeSecs = 0; // Updated at 1s intervals using interrupts this is the main clock
unsigned long timeSinceStart=0; // Time in seconds since start
unsigned long stepper_rotate=0; // How often should we rotate the tower by one movement step (one turn of the motor).

int reportCnt = 0;
boolean stringComplete = false;
String inputString = ””; // a String to hold incoming sewrial needs initialization in setup().
String sysString = ””; // Handles writing/reading data
SoftwareSerial BTSerial(A13, A14); // RX, TX

unsigned long t;
int counter=0;
int shortcnt=REPORTINTERVAL;
int isRunning = false;
unsigned long tOffs;

void setup() {
// Serial interface towards supervising computer at 9600 baud
Serial.begin(9600);
pinMode(A14,OUTPUT);
BTSerial.begin(9600);

// Set up the temperature/humidity sensor type DHT2x (AOSONG AM230x)
//pinMode(50,INPUT);
if(connectedTSens1){
mySensor1.read();
}
#ifdef DHT22Sens2
if(connectedTSens2){
mySensor2.read();
}
#endif
Serial.println(”Started the Temperature/humidity sensor”);
BTSerial.println(”Started the Temperature/humidity sensor”);

// Start the system
inputString.reserve(50);
sysString.reserve(50);

// ***********************************************
// Setup SD-memory
// ***********************************************
#define SDCS 48
//pinMode(SDCS,OUTPUT);
if (!card.init(SPI_HALF_SPEED, SDCS)) {
Serial.println(”initialization failed. Things to check:”);
Serial.println(”* is a card inserted?”);
Serial.println(”* is your wiring correct?”);
Serial.println(”* did you change the chipSelect pin to match your shield or module?”);

BTSerial.println(”initialization failed. Things to check:”);
BTSerial.println(”* is a card inserted?”);
BTSerial.println(”* is your wiring correct?”);
BTSerial.println(”* did you change the chipSelect pin to match your shield or module?”);
return;
} else {
Serial.println(”Wiring is correct and a card is present.”);
BTSerial.println(”Wiring is correct and a card is present.”);
}
SD.begin(SDCS);
if (!volume.init(card)) {
Serial.println(”Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card”);
BTSerial.println(”Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card”);
return;
}
if(SDstop==true){
Serial.println(”SD stopped use SDstart”);
BTSerial.println(”SD stopped use SDstart”);
}

#ifdef HAVESCREEN
// ***********************************
// Setup the LCD
// ***********************************
Serial.println(”Trying to init LCD”);
BTSerial.println(”Trying to init LCD”);
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
#endif
}

float get_temperature(int sensorNo){
switch(sensorNo){
case 1: if(connectedTSens1){
Serial.println(”mySensor1.temperature”);
BTSerial.println(”mySensor1.temperature”);
return mySensor1.temperature;
} else {
return -999.0;
}
break;
case 2: if(connectedTSens2){
Serial.println(”mySensor2.temperature”);
return mySensor2.temperature;
} else {
Serial.print(”Not connected connectedTSens2=”);Serial.println(connectedTSens2);
return -999.0;
}
break;
}
Serial.println(”Fell through no such sensor number”);
BTSerial.println(”Fell through no such sensor number”);
return -999.0;
}

unsigned long get_time_since_start(){
// Get time in seconds since start
return timeSinceStart;
}

void ck_serial(){
// ***********************************
// Handle incoming serial data
// ***********************************
// CheclUSB serial typically Arduino Serial Monitor
while (Serial.available()>0) {
// get the new byte:
char inChar = (char)Serial.read();
inputString += inChar;
// if the incoming character is a newline the command is complete
// set a flag so the main loop can
// do something about it:
if (inChar == ‘\n’) {
stringComplete = true;
//Serial.println(”Got CR”);
}
}
// Check Bluetooth connection to phone/pad
while (BTSerial.available()>0) {
// get the new byte:
char inChar = (char)BTSerial.read();
inputString += inChar;
// if the incoming character is a newline the command is come,
// set a flag so the main loop can
// do something about it:
if (inChar == ‘\n’) {
stringComplete = true;
//Serial.println(”Got CR”);
}
}
serial_cmd();
}

void writeToLog(String ipStr){
if(SDstop==true) return;

File wrf=SD.open(”tlog.txt”,FILE_WRITE);
wrf.print(counter);
wrf.print(”,”);
wrf.println(ipStr);
wrf.close();
}

void serial_cmd(){
int n=0;
float h;
float energy=0;
float price=0;
// Some very basic commands
if(stringComplete==true){
// Ensure that case doesn’t matter when entering commands.
inputString.toLowerCase();
if(inputString.startsWith(String(”#”))){
// Handle comments
// Allows us to use scripts on the PC to set parameters on the controller.
Serial.print(”# ”);
Serial.println(”inputString”);
BTSerial.print(”# ”);
BTSerial.println(”inputString”);
stringComplete=false;
return;
}
// Restart use of the SD memory card after a SD stop.
if(inputString.startsWith(String(”sdstart”))){
Serial.print(”# command=sdstart ”);
BTSerial.print(”# command=sdstart ”);
// Re-initialize the card. The card may have been replaced.
if (!card.init(SPI_HALF_SPEED, SDCS)) {
Serial.println(”initialization failed. Things to check:”);
Serial.println(”* is a card inserted?”);
Serial.println(”* is your wiring correct?”);
Serial.println(”* did you change the chipSelect pin to match your shield or module?”);
BTSerial.println(”initialization failed. Things to check:”);
BTSerial.println(”* is a card inserted?”);
BTSerial.println(”* is your wiring correct?”);
BTSerial.println(”* did you change the chipSelect pin to match your shield or module?”);
inputString=””;
return;
} else {
Serial.println(”Wiring is correct and a card is present.”);
BTSerial.println(”Wiring is correct and a card is present.”);
}
SD.begin(SDCS);
if (!volume.init(card)) {
Serial.println(”Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card”);
BTSerial.println(”Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card”);
return;
}
SDstop = false;
inputString=””;
stringComplete=false;
return;
}
// Secure removal of the SD memory card.
if(inputString.startsWith(String(”sdstop”))){
Serial.print(”# command=sdstop”);
BTSerial.print(”# command=sdstart ”);
SDstop=true;
inputString=””;
stringComplete=false;
return;
}
// Start logging
if(inputString.startsWith(String(”start”))){
Serial.println(”# command=start”);
BTSerial.println(”# command=start”);
isRunning=true;
tOffs=millis()/1000;
stringComplete=false;
inputString=””;
return;
}
// Stop logging
if(inputString.startsWith(String(”stop”))){
Serial.println(”# command=stop”);
BTSerial.println(”# command=stop”);
isRunning=false;
stringComplete=false;
inputString=””;
return;
}
if(inputString.startsWith(String(”ymin”))){
Serial.print(”# command=ymin value=”);
BTSerial.print(”# command=ymin value=”);
#ifdef HAVESCREEN
miny=inputString.substring(4).toFloat();
Serial.println(miny);
BTSerial.println(miny);
#else
Serial.println(”Error: No screen defined”);
BTSerial.println(”Error: No screen defined”);
#endif
stringComplete=false;
inputString=””;
return;
}
if(inputString.startsWith(String(”ymax”))){
Serial.print(”# command=ymax value=”);
BTSerial.print(”# command=ymax value=”);
#ifdef HAVESCREEN
maxy=inputString.substring(4).toFloat();
Serial.println(maxy);
BTSerial.println(maxy);
#else
Serial.println(”Error: No screen defined”);
BTSerial.println(”Error: No screen defined”);
#endif
stringComplete=false;
inputString=””;
return;
}
if(inputString.startsWith(String(”ytic”))){
Serial.print(”# command=ytic value=”);
BTSerial.print(”# command=ytic value=”);
#ifdef HAVESCREEN
ytic=inputString.substring(4).toFloat();
Serial.println(ytic);
BTSerial.println(ytic);
#else
Serial.println(”Error: No screen defined”);
BTSerial.println(”Error: No screen defined”);
#endif
stringComplete=false;
inputString=””;
return;
}
if(inputString.startsWith(String(”logint”))){
Serial.print(”# command=logint value=”);
BTSerial.print(”# command=logint value=”);
reportinterval=inputString.substring(6).toInt();
Serial.println(reportinterval);
BTSerial.println(reportinterval);
reportinterval=10*reportinterval;
stringComplete=false;
inputString=””;
return;
}
if(inputString.startsWith(String(”replot”))){
Serial.println(”# command=replot”);
BTSerial.println(”# command=replot”);
#ifdef HAVESCREEN
setup_graph_screen();
#else
Serial.println(”Error: No screen defined”);
BTSerial.println(”Error: No screen defined”);
#endif
counter=1;
stringComplete=false;
inputString=””;
return;
}
if(inputString.startsWith(String(”tlog”))){
Serial.println(”# command=tlog”);
BTSerial.println(”# command=tlog”);
#ifdef SDavailable
dumpTLog();
#else
Serial.println(”SD card not available”);
BTSerial.println(”SD card not available”);
#endif
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”tdata”))){
Serial.println(”# command=tdata”);
BTSerial.println(”# command=tdata”);
#ifdef SDavailable
dumpTData();
#else
Serial.println(”SD card not available”);
BTSerial.println(”SD card not available”);
//BTSerial.println(”SD card not available”);
#endif
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”ls”))){
Serial.print(”# command=ls: ”);
BTSerial.print(”# command=ls: ”);
File root = SD.open(”/”);
printDirectory(root,0);
root.close();
//root.openRoot(volume);
// list all files in the card with date and size
//root.ls(LS_R | LS_DATE | LS_SIZE);
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”ctlog”))){
Serial.print(”# command=ctlog”);
BTSerial.print(”# command=ctlog”);
clearTLog();
Serial.println(”tlog.txt cleared (erased)”);
BTSerial.println(”tlog.txt cleared (erased)”);
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”!”))){
Serial.print(”# command=”);
Serial.println(inputString);
BTSerial.print(”# command=”);
BTSerial.println(inputString);
#ifndef SDavailable
return;
#endif
t = millis()/1000;

File wrf=SD.open(”tlog.txt”,FILE_WRITE);
wrf.print(counter);wrf.print(”,”);
wrf.print(t);wrf.print(”, ”);
wrf.println(inputString);
wrf.close();
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”ctlog”))){
Serial.print(”# command=ctlog”);
BTSerial.println(”# command=ctlog”);
clearTLog();
Serial.println(”tlog.txt file erased”);
BTSerial.println(”tlog.txt file erased”);
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”ctdata”))){
Serial.println(”# command=ctdata”);
clearTData();
Serial.println(”tdata.txt file erased”);
BTSerial.println(”tdata.txt file erased”);
inputString = ””;
stringComplete=false;
return;
}
if(inputString.startsWith(String(”help”))){
Serial.println(””);
Serial.println(”COMMANDS:”);
Serial.println(”help –> This help.”);
Serial.println(”start –> Start logging”);
Serial.println(”stop –> Stop logging”);
Serial.println(”sdstart –> Re-initialize SD”);
Serial.println(”sdstop –> SD write stopped”);
Serial.println(”tlog –> Print tlog.txt”);
Serial.println(”tdata –> Print tdata.txt”);
Serial.println(”ls –> List SD files”);
Serial.println(”ctlog –> Erase tlog.txt”);
Serial.println(”ctdata –> Erase tdata.txt”);
Serial.println(”! –> Comment to tlog.txt.”);
Serial.println(”logint –> Logging interval secs.”);
Serial.println(”ymin –> Set plot ymin”);
Serial.println(”ymax –> Set plot ymax”);
Serial.println(”ytic –> Set plot ytic”);
Serial.println(”replot –> Clear screen and replot”);
Serial.println(””);

BTSerial.println(”COMMANDS:”);
BTSerial.println(”help –> This help.”);
BTSerial.println(”start –> Start logging”);
BTSerial.println(”stop –> Stop logging”);
BTSerial.println(”sdstart –> Re-initialize SD”);
BTSerial.println(”sdstop –> SD write stopped”);
BTSerial.println(”tlog –> Print tlog.txt”);
BTSerial.println(”tdata –> Print tdata.txt”);
BTSerial.println(”ls –> List SD files”);
BTSerial.println(”ctlog –> Erase tlog.txt”);
BTSerial.println(”ctdata –> Erase tdata.txt”);
BTSerial.println(”! –> Comment to tlog.txt.”);
BTSerial.println(”logint –> Log interval secs.”);
BTSerial.println(”ymin –> Set plot ymin”);
BTSerial.println(”ymax –> Set plot ymax”);
BTSerial.println(”ytic –> Set plot ytic”);
BTSerial.println(”replot –> Clear screen and replot”);
inputString = ””;
stringComplete=false;
return;
}
// Any comman that isn’t recognized is assumed to be a comme that is loged
// into the tlog.txt logfile.
Serial.print(”inputString”);
Serial.println(inputString);
writeToLog(inputString);
inputString = ””;
stringComplete=false;
return;
}
return; // Never reached
}

void report_serial(){
// Write as comma separated values for easy import to a spread sheet program

Serial.print(”Time,”); Serial.print(t); Serial.print(”, ”);
BTSerial.print(”Time,”); BTSerial.print((timeSecs/3600.0)); BTSerial.print(”, ”);
if(connectedTSens1){
Serial.print(”Temp1, ”); Serial.print(mySensor1.temperature); Serial.print(”, ”);
Serial.print(”Hum1, ”); Serial.print(mySensor1.humidity); Serial.print(”\n”);
BTSerial.print(”Temp1, ”); Serial.print(mySensor1.temperature); Serial.print(”, ”);
BTSerial.print(”Hum1, ”); Serial.print(mySensor1.humidity); Serial.print(”\n”);
}
//if(connectedTSens2){
// Serial.print(”Temp2, ”); Serial.print(mySensor2.temperature); Serial.print(”, ”);
// Serial.print(”Hum2, ”); Serial.print(mySensor2.humidity); Serial.print(”\n”);
//}
}

// ********************************************
// SD related functions
// ********************************************

void printDirectory(File dir, int numTabs) {
while (true) {

File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
// Repaced ‘\t’ with ‘ ‘ to save screen space
Serial.print(‘ ‘);
BTSerial.print(‘ ‘);
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println(”/”);
BTSerial.println(”/”);
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print(”\t\t”);
Serial.println(entry.size(), DEC);
BTSerial.print(”\t\t”);
BTSerial.println(entry.size(), DEC);
}
entry.close();
}
}

void dumpTLog(){
// Dump the logfile to the external computer
char c;
#ifndef SDavailable
Serial.println(”Error: No SD memory available”);
BTSerial.println(”Error: No SD memory available”);
return;
#endif
File rdf = SD.open(”tlog.txt”,FILE_READ);
if (rdf){
while (rdf.available()) {
c=rdf.read();
Serial.write(c);
BTSerial.write(c);
}
rdf.close();
} else {
Serial.println(”Error: Could not open tlog.txt”);
BTSerial.println(”Error: Could not open tlog.txt”);
}
}

void clearTLog(){
#ifndef SDavailable
Serial.println(”Error: No SD memory available”);
BTSerial.println(”Error: No SD memory available”);
return;
#endif
SD.remove(”tlog.txt”);
}

void dumpTData(){
// Dump the logfile to the external computer
char c;
#ifndef SDavailable
Serial.println(”Error: No SD memory available”);
BTSerial.println(”Error: No SD memory available”);
return;
#endif
File rdf = SD.open(”tdata.txt”,FILE_READ);
if (rdf){
while (rdf.available()) {
c=rdf.read();
Serial.write(c);
BTSerial.write(c);
}
rdf.close();
} else {
Serial.println(”Error: Could not open usrlog.txt”);
BTSerial.println(”Error: Could not open usrlog.txt”);
}
}

void clearTData(){
#ifndef SDavailable
Serial.println(”Error: No SD memory available”);
BTSerial.println(”Error: No SD memory available”);
return;
#endif
SD.remove(”tdata.txt”);
}

#ifdef HAVESCREEN
int cy(int y){
// Convert y into screen coordinate sy)
int v=0;
v = MAX_Y – y;
if(v<0){
v = ORG_Y;
return v;
} else if(v>MAX_Y){
v= MAX_Y;
return v;
}
return v;
}

int cx(int x){
// Dummy conversion of x-coordinate to screen coordinate
int v=0;
v = x+ORG_X;
if(v<ORG_X){
return ORG_X;
} else if(v>MAX_X){
return MAX_X;
}
return v;
}

void draw_axisX(){
// Draw x-axis
myGLCD.drawLine(cx(0), cy(0), cx(MAX_X), cy(0));
}

void draw_axisY(){
// Draw y-axis
myGLCD.drawLine(cx(0), cy(0), cx(0), cy(MAX_Y-10));
}

int cnvYfloatToInt(float y){
int intY;
//intY = MAX_Y*(y-SCALE_MINY)/(SCALE_MAXY-SCALE_MINY);
intY = MAX_Y*(y-miny)/(maxy-miny);
//Serial.print(”y=”);
//Serial.println(y);
//Serial.print(”Conv intY=”);
//Serial.println(intY);
return intY;
}

void ticX(int dx){
// Starts from x=0
// Draw x-ticks
myGLCD.setBackColor(0, 0, 0);
for (int i=0; i<460; i+=dx){
myGLCD.drawLine(cx(i), cy(0), cx(i), cy(10));
sysString=String(i);
myGLCD.print(sysString, i+5, cy(15));
}
}

void ticY(float dy,int ltype){
float ypos;
int intY;
int i;
//for (int i=0; i<MAX_Y; i+=dy) myGLCD.drawLine(cx(0), cy(i),cx(10), cy(i));
ypos = miny;
while(ypos < maxy){
intY = cnvYfloatToInt(ypos);
myGLCD.drawLine(cx(0), cy(intY),cx(10), cy(intY));
if(ltype==LINES){
myGLCD.setBackColor(0, 0, 0);
for(i=10; i<469; i=i+10){
myGLCD.drawLine(cx(i), cy(intY),cx(i+3), cy(intY));
}
}
sysString=String(ypos);
myGLCD.print(sysString, 15, cy(intY+9));
ypos = ypos + dy;
}
}

void setup_graph_screen(){
myGLCD.clrScr();
myGLCD.setColor(255, 0, 0);
myGLCD.print(”* Temperature logger V1.0 *”, 30, 20);
// Draw a background
myGLCD.setColor(255, 0, 0);
myGLCD.fillRect(0, 0, 479, 13);
myGLCD.setColor(64, 64, 64);
myGLCD.fillRect(0, 306, 479, 319);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
draw_axisX();
ticX(60);
draw_axisY();
ticY(ytic,LINES);
}

void plot_point(int x, float flY, int symb){
int y;
//Serial.print(”Initial float Y=”);
//Serial.println(flY);
y = cnvYfloatToInt(flY);
//Serial.print(”Converted intY=”);
//Serial.println(y);
switch(symb){
case CIRCLE: myGLCD.drawCircle(cx(x), cy(y), CIRCLE_SIZ);
break;
}
}
#endif

void store_data_SD(){
if(SDstop==true) return;
File wrf=SD.open(”tdata.txt”,FILE_WRITE);
wrf.print(t-tOffs);
wrf.print(”,”);
wrf.print(counter);
wrf.print(”, T , ”);
wrf.print(mySensor1.temperature);
wrf.print(”, h , ”);
wrf.println(mySensor1.humidity);
wrf.close();
}

// ********************************************************************************************
// MAIN PROGRAM
// We run, very roughly one loop per second.
// Notice that variables defined within the loop are local to loop() and they
// are initialized when a new loop starts. To preserve data between loops variables have
// to be declared outside the loop().
// ********************************************************************************************

void loop() {
// ******************************************************
// Main loop for actual work
// ******************************************************
ck_serial();

if (counter==0){
#ifdef HAVESCREEN
setup_graph_screen();
#endif
counter=1;
}
shortcnt–;
if((shortcnt<=0) & isRunning==true){
mySensor1.read(); // Read Temperature and Humidity sensor #1
t = millis()/1000; // Seconds since start
Serial.print(t-tOffs);
Serial.print(” , ”);
Serial.print(counter);
Serial.print(” , T , ”);
Serial.print(mySensor1.temperature);
Serial.print(” ,h, ”);
Serial.println(mySensor1.humidity);
BTSerial.print(t-tOffs);
BTSerial.print(”,”);
BTSerial.print(counter);
BTSerial.print(” , T , ”);
BTSerial.print(mySensor1.temperature);
BTSerial.print(” , h , ”);
BTSerial.println(mySensor1.humidity);
shortcnt = reportinterval;
#ifdef HAVESCREEN
plot_point(counter,mySensor1.temperature,CIRCLE);
#endif
store_data_SD();
counter++;
}

delay(100);
}

Historisk datateknik

24/12/2018

Mina första kontakter med datateknik var på 1960-talet då min far lånade hem en Olivetti Programma 101 ”dator” eller kanske bättre programmerbar (bords) räknemaskin. Datorn var stor som en modern resväska men den var programmerbar i 100 steg dock så att varje variabel förbrukade ett programsteg.
Olivetti_programma_101

Pappa programmerade maskinen till att bl.a. skriva ut lyftdata för olika vingprofiler. Ungdomarna i familjen (däribland jag) var intresserade av modellflyg.

Följande steg för mig var Science of Cambridge Mk14  som var en 8-bitars dator med 256 minnesplatser. Program kunde lagras på kassettband men man måste alltid börja med att knacka in ett laddprogram i hexadecimal form. Jag hade inbillat mig att jag skulle ha kunnat expandera maskinen till att bli den programmerbara funktionsräknare jag egentligen önskade mig. Resultatet blev att jag lärde mig programmering i assembler men så att jag själv översatte koden till binär (hexadecimal) form.

Några år senare jobbade jag i Tavastehus på ”Ammattikoulujen Opettajaopisto” som fungerade i anslutning till en teknisk skola. Man hade en Eclipse minidator som tidsdelat användes bl.a. till undervisning i programmering (Fortran).  Min uppgift var. bl.a. att skriva enkla undervisningsprogram. Jag märkte snabbt att det lönade sig att använda en fristående mikrodator som körde CP/M operativsystemet i stället för att dela minidatorn. Eclipse minidatorn hade en kapacitet som var en bråkdel (kanske 1/1000) av kapaciteten hos en modern PC och samma maskin användes samtidigt av tjugo elever till att kompilera Fortran. Resultatet var naturligtvis att Eclipsen under skoltid var fruktansvärt trög … man kunde vänta i flera sekunder på att en knapptryckning skulle noteras. Den lilla CP/M maskinen hade endast en användare (jag) så den var underbar att använda. En persondator innan den egentliga persondatorn (IBM PC) ens var uppfunnen.

Jag råkade för en kort tid sedan på nätet stöta på en artikel om emulering av CP/M maskiner med hjälp av Arduino processorer. Den mest extrema vartianten jag har sett är då en Arduino Nano, dock med stöd av extern hårdvara, har använts till att köra CP/M. En enklare variant, då processorn är mycket mera kraftfull, är att emulera CP/M med hjälp av en Arduino Due som är ett ARM-baserat processorkort som antagligen är några hundra gånger snabbare än den ursprungliga Intel 8080 processorn.

Arduino_Due_CPM_system.png

Mitt emulerade CP/M system med hårdskiva till höger. Skivenheten är ett 4G SD-kort som är så litet att man inte hittar sådana i butikerna längre. På kortet finns katalogerna A, B, D, D, E som motsvarar forntidens 8 tums skivminnen. Skillnaden är att mina skivstationer A, B  … har en nästan obegränsad kapacitet. De första 8 tums ”floppyna” hade en kapacitet på kanske 150 000 tecken. Min extrema SD-hårdskiva har en kapacitet som är 25000 gånger större än en forntida 8-tums floppyenhet. En floppy hade en så liten kapacitet att man normalt körde t.ex. en kompilator från en skiva och hade texteditorn och programmet som kompilerades på en annan skiva.

Man kan köra CP/M i normal hastighet på kortet. Processorn har så mycket RAM minne att det finns nästan 64kByte minne ledigt för program … ett sagolikt stort minne!  Maskinen är helt användbar bl.a. till textbehandling (Wordstar) trots att en modern PC har ett minne som är ungefär 125 000 ggr större!

CP_m_2.2_Arduino_Due

Bilden ovan visar hur jag kör CP/M i textterminal GtkTerm. Det dök egentligen upp endast två poblem.

Det första problemet var hur det var tänkt att det simulerade skivsystemet med skivenheterna A:, B:, C: osv skulle konfigureras för att maskinen skulle hitta systemfilen och starta. Jag blev tvungen att lägga till några kommentarer tll emulatorns uppstartsrutin för att se varför systemet inte först ville starta., därför finns kommentaren ”Looking for: CPM22.BIN. Jag visste helt enkelt inte om problemet var SD-kortet eller platsen där systemet var lagrat i förhållande till övriga CP/M rutiner.

Det andra problemet var trivialare … att hitta ett lämpligt terminalemulatorprogram för linux som skulle gå att använda direkt utan läsande av någon bruksanvisning.   Att hitta ett terminalemulatorprogram var egentligen det storsta problemet med att få igång CP/M systemet på riktigt. Arduinons utvecklingsmiljö har något de kallar ”Serial Monitor” d.v.s ett enkelt program som kan  skicka kommandon till Arduinon och skriva ut den text som kommer tillbaka från kortet. Monitorn visade nog att jag hade fått CP/M startat men det gick inte att i praktiken köra något eftersom monitorn inte motsvarade en riktig gammaldags intelligent terminal. För detta ändamål behövs det en terminalemulator som klarar av att tolka bl.a. kontrolltecken som CP/M systemet skickar till terminalen.

Det behövdes en aning debuggning av SD-kortet som används i stället för skivminne, därav min kommentar vid uppstart ”Looking for: CPM22.bin”.

MBASIC_1985-1986.png

Bilden visar hur systemet kör Microsoft MBASIC från 1986 i en CP/M emulator som körs i en Arduino Due. Arduino Due har följande specifikationer:

Processor 32-bitars ARM.

Flash programminne 512 kB

RAM-minne 96 kB

Klockfrekvens 84 MHz

Detta kan jämföras med orginalets processor Intel 8080 som körde på 2 MHz men så att en instruktion typiskt behövde mellan 4 och 8 klockcykler. Arduinon kör alltså ungefär 100 ggr snabbare vilket gör att den klarar av att emulera en Intel 8080 processor i full hastighet.

Det är intressant att jämföra CP/M maskinen ovan med kapaciteten hos en typisk persondator av idag.

Programminne RAM är 25 000-50 000 ggr större än hos en CP/M maskin.

Skivutrymmet på en modern dator är 20 000 000 ggr större än hos ett typiskt CP/M system med en skivenhet.

Processorn är idag ungefär 4000 ggr snabbare med en ordlängd d.v.s. storleken på de datapaket datorn behandlar är 8 ggr större.

 

NGO eller hur staten betalar för åsikter

18/12/2018

I George Orwells bok 1984 lär vi oss att vi skall tolka det politiska fikonspråket precis tvärtom mot vad man egentligen säger. Språket förvrängs kontinuerligt, avsiktligt, för att grumla till debatt kring känsliga frågor ”… vi avser ju inte det du säger.”

Politiska lögner kan idag eventuellt lättare avslöjas än tidigare eftersom det finns informationskanaler som inte kontrolleras av makthavarna. Att man inte kan lita på officiell information är ett välkänt faktum. T.ex. Bismark konstaterade ”tro inte på någonting innan det officiellt har förnekats.”

Vi kan testa hur vi skall utnyttja ovanstående:

Vi kan på nationell nivå och på internationell nivå se vilken roll en mängd NGO:s (Non Governmental Organisations, icke statliga organisationer). Via media serveras vi bilden att dessa NGOn representarer den vanliga medelsvensson. Om vi använder Bismarks eller 1984 läsning så torde resultatet bli:

Bismarks läsning:

Namnet ”Non Governmental Organisation” börjar med nekningsordet ”Non” d.v.s. ”icke”. Hur finansieras dessa icke statliga stororganisationer?

Svar #1:  Via statliga pengar som samtidigt styr vilka åsikter organisationen har. Personer med fel åsikt fryses ut (se video nedan).  NGO:n fungerar alltså som statliga strategiers gummistämpel d.v.s. man kan peka på stöd från befolkningens sida eftersom det är fråga om en NGO.

Svar #2: Vissa NGO:n finansieras av superrika oligarkkretsar för att driva specifika frågor utan att beställarens namn syns. Ett exempel på detta är George Soros stöd till mängder av NGO:n.  Då man konstaterar att pengarna ges för ett gott ändamål utan krav på specifika genkänster kan man antagligen applicera Bismarks tänkande på detta.

En intressant sidofråga som kan vara relevant är varifrån Orwells boks namn ”1984” har tagits. George Orwell själv tvekade mellan The Last Man in Europe och 1984. Följande fråga blir naturligtvis varifrån årtalet 1984 kommer? Det har framförts idén att titeln 1984 skulle ha skapats utgående från att 1984 skulle vara hundraårsdagen för grundandet av The Fabian Society i Storbrittannien.

Några länkar:

The Fabian Society

Notera hur man syntetiserar  socialism + kapitalistm –> Den tredje vägen.

Var hittar vi den tredje vägen? Den Italienska fascismen.

År 1954 grundades Bilderberg gruppen som har nära kopplingar till Fabianisterna. I Bilderbergmötena, som är slutna tillställningar utan yttre insyn, har mängder av finska politiker deltagit. Kan vi lita på att dessa politiker har landets  bästa som mål?

Notera hur ledande politiker ur båda grupperna representerar världens absoluta ekonomiska elit. Kan man faktiskt lita på att världens socialistoligarker faktiskt har hela världens bästa framför ögonen?

 

 

Världens största blåsning någonsin

17/12/2018

Det är ett välkänt faktum att det är mycket olönsamt att råna en bank. Det finns inte längre några pengar i en vanlig bank och de pengar som finns eller som transporteras mellan företag och kund är väl skyddade.

Dagens gangsters är väl skolade och de är inte intresserade av småsummor. Vad är väl bättre än att formelt lagligt töma världens skattebetalares (läs medelklassens) fickor och flytta över pengarna i dagens superrikas fickor. Hur görs detta?

För att få vara med om den stora fördelningsfesten måste man ha ett bra startkapital. Man påverkar världens beslutsfattare (önskade beslut fås alltid till stånd om priset är det rätta) till att skapa en överföringsautomat som garanterar investeraren en riskfri inkomst … de verkliga kostnaderna dras från statssubsidier d.v.s. skattebetalaren betalar kalaset.

Jag tänker naturligtvis på den globala klimathysterin och satsningen på samhällsförstörande s.k. hållbar energi. Det stora problemet med den synliga delen av den hållbara energin d.v.s. vindkraft och solkraft är att den är destruktiv för världens energisystem. De här energikällorna behandlas inte likvärdigt med andra energikällor bl.a. genom att de har förtur till nätet d.v.s. de kan alltid sälja den energi som de producerar även om detta betyder att man tvingar t.e.x. konventionella kraftverk att gå på tomgång med dålig verkningsgrad. Då det blåser mycket kan det bli en katastrofal överproduktion som måste dumpas utanför producentens gränser eftersom energin inte kan lagras ekonomiskt.

Satsningen på vind/sol har kostat bortåt 1 miljard dollar per dag sedan 2011. Satsningen har inte gett några CO2 inbesparingar (se t.ex. på Tyskland) men satsningarna har kraftigt höjt energipriset i länder med en stor andel förnybar energi av denna typ. Investeringarna i förnybar energi har sedan 2011 kostat grovt taget 2200 miljarder dollar som till betydande del har flyttats över i superrikas fickor genom garantipriser, garantiproduktion och garanterad inkomst.

RenewableInvestment1-768x419_2011_2017.png

Vad kunde 2200 miljarder dollar användas till

Summan 2200 miljarder är ofattbart stor. Antag att vi anställer en miljon människor till att räkna igenom en hög med 2200 miljarder mynt och antar att varje räknare kan räkna och bokföra en slant per sekund. Hur lång tid behövs det för denna miljon räknare att ta sig igenom hela högen?

Svar: Ungefär fyra månader för en miljon arbetare om man antar 8 timmars dagar utan pauser.

Ovanstående satsning 2 200 000 000 000 dollar motsvarar sett ur en annan synvilkel ungeför 50 000 000 årsverken med finsk medellön.

Vad kunde man ha fått till stånd med dessa pengar?

Brunnar i Afrika

Det finns ett stort behov av brunnar i Afrika. Att borra en brunn kostar 1000 – 1500 dollar/brunn med lokal teknologi. Vi kunde finansiera 1.4 miljarder brunnar för den summa vi har förslösat på fantasier. Vi kunde alltså ha bygga bort hela brunnsbristen för en liten del av summan.

Avsaltning av havsvatten

På platser där det inte finns grundvatten behöver vi producera vatten på annat sätt. T.ex. vid afrikas horn så finns det havsvatten att tillgå. Vad skulle byggandet av avsaltningssystem kosta i detta område? Befolkningen i området uppgår till 48 miljoner och vi antar att vi vill producera 100 liter vatten per person och dag för t.ex. tio procent av befolkningen. Notera att det finns fungerande vattentillgångar idag. Vad skulle en avsaltningsanläggning (anläggningar) kosta?

Isarael har byggt avsaltningsanläggningar som idag tillåter landet att exportera vatten till grannländerna.  Priset på en anläggning som avsaltar 125 liter vatten per person  för fem miljoner invånare kostar ca. 500 miljoner dollar och priset per kubikmeter är idag ca. 58 cent. Vi får en bättre bild av priset om vi jämför priset med t.ex. amerikanska F35 jaktplan. Priset för att bygga bort vattenbristen i området motsvarar ungefär 5 st jetjaktplan. Till detta bör naturligtvis läggas distribueringssystem. Vi kunde för de bortkastade klimatpengarna bygga fyratusen motsvarande system. Pengar skulle således finnas för även andra ändamål.

Utbildning av världens befolkning

Ett annat sätt att titta på summan är att se vad utbildning kostar. Man har uppskattat att det kostar ungefär 1.25 dollar per barn och dag att utbilda barn till den nivå man strävar mot (FN). Summan 2 200 000 000 000 dollar skulle räcka till för nästan 5 miljarder utbildningsår d.v.s. man kunde på kort tid bygga upp utbildning för alla världens barn … om det skulle finnas intresse för detta.

Vad har det kostat per kapita

Vi har blivit rånade på ungefär 600 dollar för varje man, kvinna och barn på det här jordklotet med ett resultat som ur klimatsynvinkel är fullständigt omätbart. Pengarna används idag av världens jetset till privata flygplan, ett antal hus vid havsstränder (Al Gore) etc. Däremot förväntas betalarna d.v.s. världens medelklass skära ner på sin konsumtion .

Jag kan personligen leva trots en stöld på 600 dollar. Situationen är dock mycket värre för världens fattiga som enligt världsbankens definition lever på 1.9 dollar per dag. För dessa människor betyder det att de har blivit bestulna på 88% av sin årsinkomst. Ökade kostnader slår alltid hårdast mot de fattiga. För de superrika spelar det ingen roll om t.ex. bensinpriset stiger tiofalt … peanuts!

Hmmm!

 

 

 

 

 

 

UHI (Urban heat Island)

15/12/2018

Man har i debatten om den katastrofala globala uppvärmningen, som sedan blev klimatförändringen då väldigt lite synligt inträffade :), också diskuterat inverkan från mänsklig uppvärmning av mätstationerna. Det är lätt att förstå resonemanget bakom UHI d.v.s. värmenedsmutsning av mätstationerna. Om en station då den byggs placeras i orörd natur men där det senare byggs en stad kring mätstationen så verkar det naturligt att uppvärmning av hus, trafik etc. bör värma omgivningen kring termometern som således bör visa en för hög temperatur jämfört med en tvillingtermometer som antas ha placerats ut på en motsvarande plats men som besparats från kringliggande bebyggelse.

Det är självklart att en viss uppvärmning bör gå att observera. Att mäta hur stort UHI felet är, är däremot mycket svårt eftersom felet är beroende av vindriktning, vindstyrka, den omgivande bebyggelsens typ etc. I allmänhet försöker man uppskatta UHI felet som funktion av t.ex. den närliggande stadens storlek jämfört med någon möjligast ostörd station inom några tiotals kilometer från den värmenedsmittade stationen. Notera att om det finns stora vattenytor i närheten av en termometer så kommer vattnet att påverka temperaturen nära stranden. Inverkan från havet går antagligen att se i figuren nedan.

En enkel mätning av UHI i Helsingfors

Jag satte ihop en enkel datalogger baserad på en Arduino Mega 2560 processor. Till processorn anslöt jag ett SD-minneskort och realtidsklocka (RTC).  Programmet skrevs så att data insamlas med ca. en minuts mellanrum under hela experimentet. För varje mätning loggades tid, temperatur och luftfuktighet.

En termometer av typen AM2302 som mäter luftfuktighet och temperatur anslöts till Arduinoprocessorn. Uppgifter på nätet och de angivna tekniska data säger att termometerns precision ligger på ca. +/-0.5 grader, repeterbarheten är ca.  +/- 0.3 grader. Sensord upplösning d.v.s. den minsta skillnaden mellan två mätvärden är 0.1 ⁰C respektive 0.1 % relativ leftfuktighet. I ett ostört slutet rum ligger brusnivån klart under dessa värden. Okalibrerad så är sensorns absoluta noggrannhet antagligen på ovan angivna +/- 0.5 C medan däremot relativa förändringar går att avläsa med bättre precision.

Loggningen startades då jag körde iväg från Mankholmsvägen på Sommarö i Esbo mot Herlsingfors. Avståndet från Mankholmsvägen till Helsingfors absoluta centrum är ca. 25 km (kortare fågelvägen, se bild). Starten gick kl. 21.18. Vindriktningen var enligt meteorologen ungefär 60 grader och vindhastigheten var 3 m/s.

De första mätvärdena är antagligen något för höga eftersom jag inte väntade på att sensorn skulle svalna innan jag startade. Sensorn är liten till formatet och den har en liten termisk massa.  De sista mätvärdena är antagligen representativa också för starten. Sensorn mätte temperaturen ca. 5 cm upp från biltaket  så att sensorkablen som är relativt styv samtidigt fungerade som kort mast.

Rutten ses i bild ett.

UHI_rutt.png

Temperaturmätning över hela den körda sträckan gav följande resultat:

UHI_measured

Avståndet mellan mätningarna är ungefär en minut. Exakt tid har loggats men den är ointressant. Vid start från Mankholmsvägen torde temperaturen ha varit ungefär -3.5 grader. Jag lät inte termometerns temperatur stabiliseras innan start vilket betyder att den var något varm vid starten. Kurvan visar avvikelse från hela körningens medelvärde d.v.s. en temperaturanomali. . Hela körningens medeltemperatur var -3.92 grader C. Färden går först mot nordväst (Sökö) och kallast är det vid Sököviken. Sököviken är en förort med uppskattningsvis 15 000 invånare.

Färden går nu mot Helsingfors på motorväg och temperaturen stiger jämnt. Vid mätning nummer 23 har vi nått Gräsviken där motorvägen tar slut. Vid mätning nummer 27 har vi nått Helsingfors absoluta centrum med våningshus på alla sidor (Järnvägsstationen, det man i Sverige skulle kalla centralen). Temperaturen har nått ett toppvärde.

Förden går vidare längs Kajsaniemigatan över ”Långa bron” mot Berghäll.  Vi passerar Kajsaniemiparkens ena sida vid mätning 35. Vid mätning 41 är vi tillbaka vid Kajsaniemi efter att ha kört tillbaka över långa bron. Jag kör nu på en liten väg runt Kajsaniemiparken i vars ungefärliga mitt Meteorologiska Institutionen har en mätstation med kontinuerliga temperaturmätdata från 1800-talet. Vid 22-tiden, då jag kör genom parken, anger stationen temperaturen till ca. -4.8 grader (min mätning kanske 100 meter från stationen visar -4.3 grader vilket verkar plausibelt eftersom jag kör längs en strand).

Vid mätning nummer 44 kör jag ut från Kajsaniemiparken precis vid Järnvägsstationen d.v.s. jäg är igen vid stadens absoluta centrum och temperaturen stiger snabbt.

Vid mätning nummer 50 är jag tillbaka vid Gräsviken nära uppfarten till motorvägen ”Västerleden”. Vid mätning 63 är jag tillbaka  vid Esboviken och färden gär därefter vidare tillbaka ut mot skärgården. Vid mätning 72 har jag parkerat och stängt av loggningen.

Editering 16.12.2018:

Nedan visas luftfuktigheten under körningen. Här gäller igen att jag borde ha låtit sensorn stabiliseras under någon timme innan körningen. De första mätvärdena borde vara sannolikt betydligt högre. Fuktighetsmätningen tyder på att UHI temperaturmätningen är realistisk eftersom varm luft kan innehålla mera fuktighet. Om luftens absoluta mängd vattenånga antas vara konstant så bör en högre temperatur ses som lägre relativ luftfuktighet vilket också är fallet här.  Luftfuktighetsmätningen visar att temperaturstegringen i centreala Helsingfors är verklig och inte endast en följd av t.ex. varierende körhastighet och värmeläckage från vilen till sensorn.

Notera att jag visar luftfuktigheten i relation till mätseriens medeltal d.v.s. luftfuktighetsanomalin. Den relativa luftfuktigheten var under körningen i medeltal ungerfär 73% relativ luftfuktighet.

UHI20181215_humidity

Jag har planerat att skriva ut en hållare för två stycken sensorer, en på avståndet 5 cm från bilens tak och den andra på 10 cm avstånd från biltaket. Användning av dubbel sensor bör visa hur stort felet (UHI störning) från min egen bil är.

Slutsatser

Egentligen kan inga slutsatser ännu dras. Vindriktningen var sådan att det ligger stora bostadsområden i riktning ONO. Det är egentligen förvånande att det gick att se något som sannolikt kan vara UHI. En första gissning är att UHI ligger på kanske en halv grad (0.5 grader C) under dagens förhållanden.

Vidare planer

Jag planerar att göra samma körning vid trafiksvag tid vid olika vindriktningar för att få en bild av hur vädersituationen inverkar. Jag har också planer på att köra ner till Porkala udd som ligger västerut från Helsingfors (som också ligger på en udde). Tanken är att se hur havet inverkar på temperaturen då Porkala är mycket glest bebyggt. En kombinerad körning till både Helsingfors och Porkala under samma kväll (2-3 timmar) kunde vara en intressant jämförelse.

Folkmord?

02/12/2018

Jag tittade nyss på statistik över de valigaste sjukdomarna i Finland. Jag antar att situationen är liknande i de andra nordiska länderna även om skillnader finns. Resultatet av sökningen blev:

1. Sjukdomar i blodomloppet. Ungefär 38% av alla dödsfall förorsakas av dessa sjukdomar.

2. I cancer dör ca. 25%. Den vanligaste dödsorsaken i cancer för män är lungcancer och hos kvinnor bröstcancer.

3. Ungefär 15% dör i Alzheimers sjukdom. Huvuddelen är kvinnor och mängden Alzheimerfall har tredubblats på de senaste tio åren.

4. Det finns uppskattningar på att 8% av befolkningen har diabetes typ 2. Av dessa kommer ca. 2/3 (ca. 65%) att dö i kärlsjukdomar eller slag.  Notera att dödsfallen är slutet på en lång kronisk sjukdomshistorik som eventuellt har sträckt sig över årtionden.

Antalet döda per år i Finland (2017 Statistikcentralen) uppgick till 53722. Vi kan ur detta uppskatta antalet döda per årskull och sjukdomstyp är:

  • Kärlsjukdomar 20 000 döda.
  • Cancer ca. 13 500 döda.
  • Alzheimar/demens 8000 döda

Totalt är ovanstående sjukdomar skyldiga till uppskattningsvis 77% av alla dödsfall.

Problemet är inte i första hand antalet döda eftersom det är självklart att alla som vandrar på den här jorden en gång kommer att dö. Problemet är att undvika resurskrävande kroniska sjukdomar vilket samtidigt ger fler aktiva år för befolkningen.

Underliggande orsaker till kärlsjukdomar, cancer och demens

Den gemensamma nämnaren bakom många vanliga sjukdomar idag är det metaboliska syndromet vilket man kunde se som ett förstadium till diabetes typ 2. Man uppskattar att ungefär 18% av europas totala medicinska budget används för diabetes och diabetes följdsjukdomar.

Det metabiliska syndromet är en följd av överdrivet intag av kolhydrater (läs socker) kombinerat med ett alltför stort intag av industrifetter d.v.s. växtoljor som på kemisk väg har omformats till att bli bredbara.

Stärkelse och motsvarande kolhydrater är kedjor av glukosmolekyler som kroppen bryter ner till glukos. Glukos kan användas av alla kroppens celler som bränsle.

Vanligt socker består av en kombination av Glukos och Fruktos. Glokosen kan användas direkt medan fruktosen måste processas i levern för att bli användbar i kroppen. Ett överskott av socker leder till att fruktosen förvandlas till fett i levern på motsvarande sätt som alkohol kan ge fettlever.

Vi har genom hela året tillgång till söta frukter som innehåller betydande mängder fruktos. Överdrivna mängder frukt eller stora mängder juice kan ge samma leverskador som en alkoholist kan få.

Vad händer då vi äter stora mängder kolhydrater

Kolhydrater bryts ner till glukos som går in i blodströmmen där en del av sockret (glukos) tas upp av kroppens celler som bränsle. Ökade sockernivåer leder till att kroppen producerar hormonet insulin vars uppgift bl.a. är att signalera att kroppens fettceller skall ta emot överskottet av socker och omvandla sockret till fett.  Notera!!! En uppgift för Insulin är att lagra fett! Notera att glukos och fruktos inte är ekvivalenta. Kroppen kan använda glukos direkt medan fruktos kräver processering i levern.

Så länge insulinnivåerna hålls höga kommer kroppen att lagra fett i fettvävnaderna. Ett följdresultat är att för att kroppen skall kunna ta fett ur sina fettreserver så måste insulinnivåerna fås ner kraftigt. Det enda sättet att effektivt sänka insulinnivån är att minska på kolhydratintaget/sockerintaget och genom att förlänga intervallen mellan måltiderna. Detta är lätt sagt men svårt att göra eftersom kroppen tolkar fallande insulinnivå bl.a. som hunger.

Om vi alltså endast försöker  skära ner kolhydratintaget d.v.s. äta mindre så kommer detta normalt inte att lyckas eftersom personen kommer att känna en kontinuerlig våldsam hunger som är mycket svår att behärska. Lösningen är att ge kroppen en signal att vi är mätta utan att höja insulinnivån. Detta kan göras genom att äta vettiga former av fett såsom smör, djurfett, kokosfett etc. Fett skickar en mättnadssignal till hjärnan utan att insulinnivån egentligen stiger alls. Eftersom insulinnivån aldrig steg mycket så sjunker nivån inte heller mycket efter måltiden vilket betyder att insulinets hungersignal försvinner. Resultatet är att insulinnivån sjunker vilket leder till att kroppen kan börja ta fett ur de egna förråden (ketoner som kan användas i stället för glukos).  De små mängder glukos som behövs kan levern producera själv ur fett. Fungerar detta?

Man kan enkelt testa hungerfunktionerna genom att äta s.k. snabba kolhydrater. Det behövs ett antal mellanmål genom hela dagen för att hungern inte skall bli för svår. Mellanmålen består ofta av ”snacks” d.v.s. något sött som snabbt höjer insulinnivån. Då insulinnivån på detta sätt aktivt hålls hög leder detta till att kroppen hela tiden uppfattar att den är i gödningsmod d.v.s. socker lagras kontinuerligt som fett och kroppsvikten stiger sakta men säkert. Hunger är en så grundläggande känsla att mycket få människor klarar av att hålla emot hungern under längre tider … resultatet är att en bantare halkar tillbaka i gamla vanor och vikten stiger igen, eventuellt blir den högre än före bantningsförsöket.

Som bahai (jag är bahai) hör det till att fasta under en kort period (19 dagar) varje år. Fasta är en mycket hälsosam och effektiv metod att sänka blodsocker/insulinnivåerna. Att vara utan mat (och dryck) mellan soluppgång och solnedgång kan för många vara svårt. Ett sätt att hantera fastan är att medvetet gå över till en kost med extremt lite kolhydrater kombinerat med mycket fett. Resultatet är att hungerkänslan hålls borta i praktiken hela dagen. Om kvällsmaten då igen innehåller möjligast lite kolhydrater så kommer kroppen inte att överhuvudtaget gå ur sin fettförbränningsmod utan insulinnivåerna hålls låga i nästan tre veckor. Forskning visar att en kost baserad på extremt lågt kolhydratintag och mycket fett botar diabetes typ 2 på ungefär tre veckor.

En person som äter i huvudsak kolhydrater under fastan kommer att uppleva fastan som en stor uppoffring som egentligen är obehaglig. Då en dags fasta har tagit slut så kompenseras detta av överätande på kvällen och följande morgon vilket i värsta fall leder till att kroppsvikten stiger trots fastan.

Vad kan man äta utan att höja blodsocker och insulinnivå

En brittisk frukost bestående av ägg, bacon e.t.c. men så att brödet lämnas bort ger en mättnad som håller sig igenom hela dagen utan behov av mellanmål. Lunch kan lämnas bort vilket ger mera arbetstid och eliminerar kanske en timme av tomgång då man är trött efter lunchen.
Sökning på nätet ger mängder av recept på maträtter med lågt kolhydratinnehåll. Allmänt gäller att gröna växter som växer ovanför jordytan kan ätas obegränsat (sallad). T.ex. Avocado är extremt fettrik. Kokosfett kan användas och likaså riktigt smör. Nötter kan också innehålla upp till 50% fett. Notera att mängden kolhydrater måste sättas mycket lågt för att kroppen skall kunna gå in i fettförbränningsmod. En känsla för mängden kolhydrat får man genom att se att de 20 g kolhydrater som är målsättningen motsvarar ungefär en skiva bröd per dygn.

Har myndigheterna åstadkommit ett folkmord?

Vi har i årtionden hjärntvättats, utgående från falska forskningsresultat, att en hälsosam kost innehåller upp till 60% kolhydrater kombinerat med mycket lite fett. Resultatet har varit snabbt ökande diabetes typ 2, snabbt ökande cancer, snabbt ökande demens. En orsak till att den rekommenderade lågfettkosten har varit så destruktiv är att  fettet, av smakskäl, har ersatts av socker och mjöl i industrimaten.

Det finns många indikationer på att t.ex. diabetes typ 2 kan botas helt så att inga mediciner behövs genom att kraftigt lägga om patientens kost så att kolhydrater tas ner till ett minimum medan kolhydraterna ersätts med fett och fibrer. En kraftig kostomläggning av denna typ bör göras kontrollerat eftersom kosten leder till att behovet av insulin snabbt sjunker vilket kan leda till i värsta fall insulinchock om personen fortsätter astt ta tidigare doser insulin.

Det verkar finnas en klar korrelation mellan sockerkonsumtion och hjärtproblem. Det verkar finnas en klar (och egentligen rätt självklar) korrelation mellan sockerkonsumtion och diabetes typ 2.  Vore det inte då klart att samhället för att spara på resurser aktivt borde gå in för att lära människor en diet som man vet i många fall botar diabetes typ 2 och eliminerar de följdsjukdomar diabetes typ 2 ger upphov till? I stället för att lära människor hur man undviker diabetes typ 2 så behandlar man symptomen och instruerar patienterna att leva som tidigare. Hårresande sätt att behandla människor!

Diskussion i EU parlamentet.

Det är intressant att notera att överdriven sockerkonsumtion också eventuellt kan leda till C-vitaminbrist eftersom glukos kemiskt påminner om C-vitamin och samma kanaler används av celler för att ta in både glukos och c-vitamin (Vitamin C socker antagonism). Kan detta vara orsaken till mängder av kroniska sjukdomar i tänder, i leder, kärlsjukdomar och depression som alla är typiska skörbjuggssymtom men i kronisk form i motsats till förgångna århundradens akuta skörbjugg.

Uppskattningsvis 500 000 finländare lider av diabetes typ 2. Antalet personer som lider av diabetes.

Samhällets kostrekommendationer (på finska). I praktiken har inga förändringar gjorts i kostrekommendationerna under de senaste årtiondena trots snabbt ökande diabetes typ 2. Är våra tjänstemän betalda att föra fram disinformation eller är det fråga om total dumhet … eller naturligtvis båda samtidigt?

2015 totala läkemedelsersättningar i Finland 1.3 Miljarder Euro. Av denna summa går 13% (170 Miljoner Euro) till diabetesmediciner.

De vanligaste dödsorsakerna i Finland,

Havens uppvärmning stigande havsyta

27/11/2018

Det här är ett försök att uppskatta hur stor den termiska havsytehöjningen är utgående från kända bakgrundsdata. Kontakta mig gärna om du hittar grova felaktigheter. Notera att det här är en överslagsberäkning (back on the envelope). Vi är intresserade av storleksordningen.

Världshaven är jordklotets värmeregulator eftersom 70% av jordens yta är hav. Världshavens vämekapacitet är många hundra gånger större än atmosfärens värmekapacitet.

Världshaven är intressanta genom att temperaturprofilen botten –  yta är precis tvärtemot vad man intuitivt skulle vänta sig. Världshavens bottenskikt är kallare än ytan vilket är en följd av att vattnets täthet (vikt per kubikmeter) minskar då temperaturen sjunker mot +4 grader för att därefter börja öka igen. Den här egenskapen hos vatten är orsaken till att planeten inte är i huvudsak en isklump med ett tunt lager ytvatten nära ekvatorn.

Vattnets täthetsförändring som funktion av temperaturen skapar en effektiv mekanism för värmetransport från tropikerna till polerna. Varmt vatten transporteras på ytan mot polerna. Då havsis bildas vid polarområdena sjunker kallt och saltrikt vatten ner mot havsdjupen och rinner tillbaka mot tropikerna längs havets botten.

Haven har en annan mycket effektiv värmeregulator som leder till att havsytans temperatur vid tropikerna ytterst sällan går över ca. 28 – 30 grader C. Då det tropiska havet värms kommer avdunstningen från havsytan att öka och stora mängder vatten förs upp i atmosfären som ånga varvid det bildas moln som reflekterar bort solljus till rymden.  Vattenångan är samtidigt en extremt god värmetransportör som effektivt transporterar värme från ytan till ca. 10 km höjd där värmen strålar ut i rymden.

De två värmeregulatorerna ovan aranterar att hvsytans temperatur vid nordliga breddgrader sällan går mycket under 0 grader C eftersom det bildas ett isolerande isskikt vid lägre temperaturer och tropiska hav värms inte över 28-30 grader C eftersom det ger upphov till kylande åska på eftermiddagarn. Om mera värme strålar in till tropiska hav så leder detta till att eftermiddagens åskväder förskjuts en aning mot en tidigare tidpunkt på dagen och havsytans temperatur ändras mycket lite.

Kontroll av havens temperaturtrend

Det finns många sätt att kontrollera havens temperaturtrend. Den skenbart enklaste metoden är extremt svår i praktiken d.v.s. att mäta temperaturen på olika djup i havet och beräkna trender för hela havet. Problemet är att havets medeldjup är ca. 3500 meter och det finns helt enkelt inte ännu tillräckligt mycket pålitliga mätningar för att man skall kunna få fram en pålitlig trend. Försök görs hela tiden (en artikel i The Guardian) .

Något om hur extremt små/stora tal noteras inom naturvetenskaperna:

Vattnets temperaturutvidgningskoefficient (längd) är ungefär 0.0000293 per grad C. Det är väldigt jobbigt att skriva ner ett stort antal nollor före ett tal eller många nollor efter ett tal. Man har av denna orsak förenklat saken så att man anger de signifikanta siffrorna som ett decimaltal t.ex. ovan 2.93 och sedan anger man hur många nollor man skall sätta före eller efter detta tal för att få fram det ursprungliga talet. I ovanstående fall blir utvidgningskoefficienten:

0.0000293 = 2.93/100000 = 2.93/(10*10*10*10*10) = 2.93/10⁵ = 2.93*10⁻⁵ = 2.93E-5

På motsvarande sätt kan vi kompakt uttrycka världshavens totala (uppskattade) vikt:

1.37E21 kg vilket kan skrivas som:

1.37*10²¹ kg vilket blir:

1.37*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10

1.37* 1 000 000 000 000 000 000 000 kg vilket alltså blir:

1370000000000000000000 kg

Multiplikation/division  av stora tal blir enkla:

121000000*3140000 = 1.21*3.14*10⁸*10⁶= 1.21E8*3.14E6 = 1.21*3.14E(8+6) = 3.79E14

Antalet nollor får vi genom att addera exponenterna d.v.s. indexen över 10 eller talen efter E.

 

Egenskaper hos vatten

Vatten är ett rätt komplicerat ämne vad gäller expansion. Vid 10 ⁰C är utvidgningen ungefär 2.93E-5 per ⁰C. Då temperaturen sjunker så sjunker också expansionskoefficienten för att vid 4 grader C ligga på noll och därefter börjar vattnet igen att utvidga sig.  Största delen av havet har en temperatur nära 4 grader C d.v.s. expansionen är mycket liten inom detta intervall.

Vi kan göra en enkel mycket konservativ (d.v.s. den överdriver den termiska expansionen) överslagsberäkning av hur mycket havsytan stiger till följd av stigande temperatur. En grov överdrift fås t.ex. genom att anta att havets nuvarande temperatur skulle vara +10 grader C. Frågan blir då hur mycket havsytan stiger för varje grad temperaturen ökar.

dh = h*dT*a

dh = havsytehöjning i meter

h   = havets medeldjup 3500 meter

dT = temperaturstegringen i grader celsius eller Kelvin.

a   = längdutvidgningskoefficient vid +10 ⁰C = 2.93E-5/⁰C

Då vi lägger in talvärden får vi:

dh = 3500m*1⁰C*2.93E-5/⁰C = 0.1 m

Vi ser att den termiska expansionen är helt försumbar för alla förväntade havstemperaturer. Den lilla årliga stegringen 2-3 mm/år  vilket motsvarar ca. 20 cm på hundra år skulle kräva att hela havets medeltemperatur skulle stiga med 0.66 grader på hundra år. Vi ligger lång från den nivån.

Uppskattning av hur mycket havet värms idag

Man har grovt uppskattat att det i haven lagras en energimäng på ungefär 8.5E21 J/år.Mängden låter, och är, ofantlig. Frågan blir då hur mycket hela havet värms upp per år om trenden fortsätter under en lång tid framår.

Vi vet att världshavens totala massa är ungefär 1.37E21 kg.

Imbalans i havens energi-innehåll är ungefär33E22 J på 30 år. Ur detta kan vi då vi känner havets massa beräkna temperaturstegringen då vi vet att värmekapaciteten hos vatten är 4.18 J/g⁰C. Temperaturstegringen per år blir då ungefär:

dT = /33E22J/30år)/(1.37E24g*4.18J/g⁰C) = 0.00192 ⁰C/år

Min personliga åsikt är att uppskattningen är grovt i överkant eftersom haven värms uppifrån och stigande yttemperatur leder till ökande avdunstning och snabbare värmeförlust via konvektion till rymden. Vattentemperaturen under ca. 1000 m djup ligger mycket nära fyra grader d.v.s. utvidgningskoefficienten är mycket nära noll. Detta betyder att nedanstående beräkning överskattar den verkliga havsytehöjningen ca. 3 ggr.

Vi kan nu beräkna hur mycket havsytan stiger till följd av termisk utvidgning av havsvattnet som långsamt blir varmare.

dh = 3500m*0.00192⁰C/år*2.93E-5/⁰C = 1.98E-4 m/år = 0.2 mm/år

Korrektion för att två tredjedelar av havsdjupen har en längdutvidgningskoefficient mycket nära noll ger då:

dh = 0.3*0.2 mm/år = 0.06mm/år vilket torde ligga långt under vad vi idag kan mäta.

Är det här faktiskt något det lönar sig att vara orolig över 6 – 20 mm på hundra år? Det korrekta värdet torde ligga betydligt närmare 6 mm/århundrade än 20 mm/århundrade.

Osäkerheten i uppskattningarna gällande stigande havsyta ligger på uppskattningsvis 1.5 mm/år vilket är ungefär 25 gg större än den ovan uppskattade termiska havsytehöjningen.

 

Intressant publikation om Amygdalin

18/11/2018

Jag råkade av en slump stöta på en intressant artikel

Effect of Amygdalin on the treatment and recurrence of endometriosis in an experimental rat study

Jag har tidigare skrivit om Amygdalin/Laetril och Vitamin B17, kärt barn har många namn,  använt som cancermedicin.  Bakgrunden är att ämnet då det bryts ner i en cancercell frigör gifter som antas vara tillräckligt kraftiga för att döda cellen. Amygdalinet innehåller två molekylstrukturer som består av socker och två strukturer som vid nedbrytning proucerar gift bl.a. cyanid.

Vi vet att en cancercells energiproduktion har skadats så att cellen i stället för att bryta ner socker med hjälp av syre till koldioxid (CO2) och vatten och energi gör detta anaerobt (utan syre) så att det produceras mjölksyra och energi. Cellens sockerbehov ökar med 5 – 50ggr jämfört med en frisk cell. Det enorma sockerbehovet kan användas till att hitta cancer i kroppen genom att ge patienten socker som är radioaktivt märkt. De punkter i kroppen som strålar mycket är områden som tar in stora mängder socker … alltså cancer. Cancern förvandlar som ovan nämndes socker till mjölksyra vilket sannolikt är orsaken till de smärtor som ofta förekommer vid cancer. Mjölksyrenivåerna i kroppen hålls höga vilket vi uppfattar som extrem trötthet eftersom mjölksyran signalerar att vi har utfört ett extremt tungt fysiskt arbete (tänk maratonlopp). Saken blir inte bättre av att mjölksyran i levern oterbildas till socker som igen absorberas av cancern …

Amygdalinets två sockermolecyler kan tänkas fungera som lockbete för cancerceller så att ämnet absorberas av cellen och därefter bryts ner av ämnet beta-glukosidas som cancerceller producerar men som inte finns i friska celler. Då amygdalinmolekylen bryts ner så dör cellen. För att effekten skall vara god bör naturligtvis tillgången på socker i kroppen begränsas så mycket som möjligt d.v.s. man kör ner konsumtionen av socker och kolhydrater så långt det går och tvingar kroppen att gå in i fettförbränningsmod som kallas ketosis. Stor brist på socker gör att en större mängd Amygdalin absorberas av cancern. Sockerberoendet och hur man kan använda brist på socker i kroppen som förstärkare är en detalj som man verkar ha missat inom skolmedicinen där man serverar cancerpatieter mat med stora mängder socker … eller ger socker intravenöst d.v.s. man direkt föder cancern.

Jag stötte av en slump på en artikel om endometrios d.v.s. en cancerliknande växt i livmodern på somliga kvinnor. Endometriosen har egenskaper som påminner om cancer men den är godartad d.v.s. den genererar inte metastaser d.v.s. dottersvulster i andra delar av kroppen.

Det slog mig då att det kunde vara skäl att titta på om Amygdalinet kunde ha motsvarande effekt på endometrios som på cancer … so Google is sometimes your friend 😉 . En sökning gav en intressant träff. Ett universitet i Turkiet har tittat på Amygdalinets inverkan på Endometrios:
Background: Endometriosis is an aggressive disorder and associated with infertility, pelvic pain and intra-abdominal adhesions in women of reproductive age. Women with endometriosis has the potential risk of recurrence ranging from 21.5% in two years to 50% in five years after recovery period. Therefore, there is a certain requirement for new drugs as an alternative therapy to the current ones.

Bakgrund: Enometrios är en aggressiv åkomma som kan leda till sterilitet, buksmärtor och sammanväxningar hos kvinnor i reproduktiv ålder. risken för återfall är mellan 21.5% (två år) till 50% på fem år. Det behövs därför nya läkemedel som alternativ till de nu existerande.

Aim: The aim of the present study is to compare the effects of amygdalin and leuprolide acetate on endometriosis development and recurrence in rats.

Mål: Målet för studien är att jämföra effekten av amygdalin och leuprolid på utvecklingen av återfall av endometrios hos råttor.

Study Design: Animal experiment

Studiens design: Djurförsök

Methods: A total of 30 adult female rats were enrolled. Induction of endometriosis was performed by implanting endometriotic focci on the peritoneal side of the abdominal wall. Before amygdalin or leuprolide acetate treatment one of the implant was removed for histopathological analysis, and rats were randomly divided into three groups. Saline (Group 1), amygdalin (Group 2), and leuprolide acetate (Group 3) were administered for three weeks. After treatment, one of the remaining three implants was excised for histopathological evaluation, and all treatments were terminated. Estradiol was given after the estradiol induction for the recurrence of endometriosis. Rest of the implanted tissues were removed, then all rats were euthanised. The implant volumes, histopathological injury and fibrosis levels were observed.

Metoder: Totalt 30 vuxna råttor användes. Genom implantering av endometriotiska center på bukhinnan. Innan  amygdalin eller leuprolid behandling avlägsnades ett implantat för patologisk analys och råttorna indelas slumpmässigt i tre grupper.  Saltlösning (grupp 1), amygdalin (grupp 2) och leuprolid acetat (grupp 3) gavs under tre veckor. Efter behandlingsperioden togs ett implantat ut för patologisk undersökning och behandlingen avslutades. Estradiol gave efter estradiol induktion för att studera återfall av endometrios. Resten av implantaten avlägsnades och alla råttor eutanasierades. Volymen hos implantaten, de histopatologiska skadorna och fibros studerades.

Results: The endometriotic foci volumes in Group 2 and Group 3 were significantly lower than in Group 1 (p = 0.001, p = 0.002, respectively). The histopathological injury scores and fibrosis levels were not significantly different among the groups (p > 0.05).

Resultat: Volymen hos de endometriska centra i grupp 1 och grupp 2 var signifikant lägre än i grupp 1 (saltlösning) (p=0.001, p=0.002 respektive). De histopatologiska skadepoängen och fibrosnivåerna ar inte signifikant olika mellan grupperna.

Conclusion: The present study showed that amygdalin has an evident effect in the treatment of endometriosis.

Konklusion: Studien visar att amygdalin har en klar effekt vid behandling av endometrios.

Rapporten är intressant eftersom den klart visar att det efter tre årtionden av smutskastning av ämnet fortfarande finns ett forskarintresse för det.

Artiklar:

Effect of Amygdalin on the treatment and recurrence of endometriosis in an experimental rat study . Universitet i Turkiet.

Lite bakgrund om mygdalin/laetrile i populär form.

Lite bakgrund till vad man forskar i kring amygdalin

Egyptisk text om amygdalin och tarmcancer. Nämner att amygdalin är smärtstillande.

 

Vad kostar köp av politiker?

14/11/2018

I Finland har vi ett demokratiskt  politiskt system som i grunden bygger på transparens och hederlighet hos de folkvalda. Det är självklart att  samhället skadas då beslutsfattare kan köpas att driva projekt som inte är i kommunens, stadens eller landets intresse.

Det verkar självklart att den beryktade långdansen kring Malms flygplats startade som ett försök till ett ekonomiskt klipp. Man kan bara spekelera om hur många bruna kuvär som har givits under bordet till politiker i Helsingfors. Ingenting går naturligtvis att bevisa men många av långdansens argument för att förstöra landets näst mest trafikerade flygplats sett ur synpunkten starter/landningar.

Att politiker får betalt för politiska tjänster efter fullgjot värv verkar också självklart. Om man betalar en hög politiker en miljon för ett föredrag så är det inte längre fråga om att föredraget faktiskt har värdet en miljon och att åhörarna får ett utbyte som motsvarar tiotusentals dollar per deltagare. Det är fråga om betalning av mutor i efterskott så att ingen kan anklagas för detta.

Vilket pris har då en politiker?

Det har forskats i denna fråga och det är intressant att se att priset är skrämmande lågt. Det verkar självklart att en global dollarmiljardär om hen vill kan styra och ställa rätt fritt bland vilka politiker som helst. Ett exempel på detta är George Soros som helt problemfritt tar sig audiens hos EU:s högsta ledare … en person som inte demokratiskt har blivit vald till någonting inom unionen. Jag har svårt att tänka mig att politikernas audienser hos Soros inte ger klirr i kassan hos den enskilda politikern.

Roosevelt institutet har gjort en studie som kom fram till att för varje $100 000 en vald representant fick från finansmarknaden (gällande Dodd-Franck lagstiftningen) så ökade sannolikheten med 13.6% att representanten kunde gå emot det egna partiets syn på denna fråga.

Personer som följde finansmarknadens önskemål fick ofta $200 000 – 300 000 från denna sektor vilket ökade sannolikheten för åsiktsbyte med 25-40%.

Man studerade också kopplingarna mellan pengar från Telecommindustrin och en viktig omröstning om nätverksneutralitet år 2006.  För varje $1000 en person fick från företag som stödde nätverksneutralitet (Google och Netflix) så blev de 24% mera sannolika att stöda detta. För varje $1000 från företag som var emot så ökade chansen 2.6% för en röst emot.

Av ovanstående kan man antagligen dra slutsatsen att industrilobbare i frågor som inte har speciellt stor synlighet kan köpa önskade beslut för några tusenlappar per politiker man behöver för att få ett önskat beslut. Exempel på detta är kemikalielagstiftningen i EU då det gäller ämnen som inte har väldigt stor synlighet. Jag tänker här på t.ex. ämnet Borax som i praktiken har förbjudits i EU trots att ämnet i sig ligger på ungefär samma giftighetsgrad som koksalt.

Då saken gäller frågor med större synlighet så stiger priserna. Den amerikanska studien indikerar att man kraftigt kan påverka beslutsfattarna beslut genom att erbjuda dem 2-3 årslöner för jobbet. Betalningen kan ges då politikerna slutar jobba inom politiken t.ex. i form av betalning för en serie föredrag hållna av en politiker med mångårig erfarenhet av hur systemet fungerar. Alternativt kan man ge unga politiker valunderstöd vid kommande val.

Vad kostar det att driva en synlig fråga?

I Finland har vi 200 riksdagsmän. Det är rätt självklart att det finns mycket få frågor där alla skulle vara emot en specifik lagstiftning en ”kund” anser sig behöva. Om vi antar att projektet kräver att 30% av riksdagsmännen köps d.v.s. ca. 70 personer och att priset är fem årslöner per röst så kan vi uppskatta kostnaden till (månadslönen för en riksdagsman är ca. 6500Euro):

Kostnad för att köpa ett beslut: 70*6500*12*5= 27 300 000 Euro

Priset är så lågt, 27 Miljoner Euro, att en dollarmiljardär kan betala det med fickpengar. Kostnaden motsvarar 2.73% av rörelsekapitalet på en miljard (om vi antar att manipulatören har endast en miljard att röra sig med).  Notera att t.ex. George Soros sitter på ca. 22 miljarder dollar d.v.s. kostnaden för Soros skulle vara av storleksordningen 0.1%. Finns det någon som tror att de superrika inte skulle använda sina pengar till att köpa sig inflytande. Det är lätt att förstå varför Soros har fri tillgång till EU:s högsta ledare.

Hur borde de systemet se ut som förhindrar denna typ av förstörelse av demokratin? Hur borde straffen se ut?

Länkar:

Vad kostar en poliiker (The Intercept).

Who wants to buy a politician?

Hey! Want to buy some influence?

 

 


Pointman's

A lagrange point in life

THE HOCKEY SCHTICK

Lars Silén: Reflex och Spegling

NoTricksZone

Lars Silén: Reflex och Spegling

Big Picture News, Informed Analysis

This blog is written by Canadian journalist Donna Laframboise. Posts appear Monday & Wednesday.

JoNova

Lars Silén: Reflex och Spegling

Climate Audit

by Steve McIntyre

Musings from the Chiefio

Techno bits and mind pleasers

Bishop Hill

Lars Silén: Reflex och Spegling

Watts Up With That?

The world's most viewed site on global warming and climate change

TED Blog

The TED Blog shares interesting news about TED, TED Talks video, the TED Prize and more.

Larsil2009's Blog

Lars Silén: Reflex och Spegling

%d bloggare gillar detta: