FreeCADin opiskelua

Olen joskus 3D mallintanut Blenderillä, mutta se on aika raskasta. Jonilla on 210x150mm build platella varustettu 3D printteri. En nyt muista minkä valmistajan, mutta ihan siisti plug and play printteri.

Pyysin häntä tänään tekemään, mun ESP8266 + DS18B20 lämpömittarille kotelon ja ollaan jonkun verran keskustelut FreeCADin käytöstä yhden toisen projektin takia.

Aloin tuossa illalla katselemaan FreeCADin tutoriaali videoita ja ensimmäisen videon jälkeen mallintamaan vähän itsekkin. Ensimmäiseksi tein OpenBuilds OX sivulevyyn perustuvan mallin vähän pienemmässä muodossa.

CNC koneen sivulevy
Sain sen valmiiksi hetkessä. 20x80mm V-Slotille renkaiden reijät ja Nema 23 moottorille mountti ja 40x60mm akselin päädyn kiinnitykset.

Facebookissa on kaverin seinällä käynnissä keskustelu millain rakentaa halvalla kissan kiipeilyteline. Katsoin puuilon nettisivuilta minkä kokoista huonekaluputkea siellä on ja päädyin mallintamaan kiinnikkeen.

Kuvakaappaus - 2016-02-25 02-04-28

Katsotaan millain mun FreeCAD mallinnus jatkuu jossain vaiheessa.

Tässä linkit molempiin malleihin: CNC Side Plate ja 13mm huonekaluputken kiinnike.

Edit 25.02:

Tässä V-Slot Dremel 3000 mount malli jonka tein tänään äsken tunnissa.

Kuvakaappaus - 2016-02-25 19-36-37

Tässä illemmalla myös sain tietää, että Joni oli printannut tuon 13mm huonekaluputken kiinnikkeen. Tässä printtituloksesta kuvia.12776846_1003149883076159_1408000558_o 12768024_1003149876409493_1626915073_o 12772930_1003149829742831_130003801_o

Ja tässä printtauksesta timelapse.

Edit 26.2:

Jotenkin keskustelu tuosta putkikiinnikkeestä johti noin 35 euroa maksavaan Smartstore 15 laatikko hyllyyn. Joten mallinnusta tuli vähän tänäänkin tehtyä.

Kuvakaappaus - 2016-02-26 19-16-24

Edit 27.2:

Kyllä tää FreeCAD alkaa jo jonkun verran luonnistumaan. Tässä taas vähän uutta.

Ensin tein laatikon jonka tilavuus on 105x70x30mm. Sinne mahtuu esimerkiksi ESP8266  Thing ja LiPo mukavasti kun tekee vähän reikiä.

Kuvakaappaus - 2016-02-28 02-13-12

Sitten tein laatikolle tietenkin kannen. 😛

Kuvakaappaus - 2016-02-28 02-13-19

Ja kaiken kukkuraksi kuva laatikosta kannen kanssa kun kansi on kiinni. Tietenkin myös tarkistin wireframella, että kaikki menee paikoilleen. Laatikkon kansi saattaa olla vähän tiukka jos tuon printtaisi.

Kuvakaappaus - 2016-02-28 02-12-51

 

Saat ladattua kaikki tekemän FreeCAD mallinnukset täältä.  Mielessä olis kyl paljonkin mallinnettavaa. Kuten V-Sloteille kamera mountti. 😛

Sparkfun ESP8266 Thing + DS18B20 langaton sauna lämpömittari proggis.

Jo muutama vuosi sitten mietein kämppiksen kanssa, että olisi ihan siistiä piha saunaan rakentaa langaton lämpömittari. En silloin hirveästi elektroniikasta ollut perillä vaikka pitkään olen ohjelmointia harrastanut.

Tammikuussa tilasin huvikseni yhden Sparkfun ESP8266 Thing kehityskortin ja harmikseni huomasin, että tarvitsen myös ohjelmointi laitteen. Sparkfun suosittelee Thingin kanssa käytettäväksi SparkFun FTDI Basic Breakout korttia.

Samalla tajusin, että tuon ESP8266 kehityskortin kanssa olisi aika helppo rakentaa lämpömittari. Hacklab kaverit puhunut noista ESP8266 korteista ja DS18B20 lämpömittareista jonkun aikaa joten päätin katsoa millain tuollaisen kytkennän saisi tehtyä.

Pistin siis tilaukseen ohjelmointikortin, DS18B20 anturin ja vähän johtoa. Aloin lueskelemaan Thingin dokumentaatiota ja sitten piirsin oman kaltaisen kytkentä kaavion. Kysyin tietenkin Hämäläisen Markolta menikö kytkentä suunnitelma yhtään oikein. Hän kertoi, että se näyttää aikalailla oikealta. Ei kun siis odottamaan, että osat tulee postilaatikkoon. Harmikseni 170 euron Sparkfun tilaus jäi tulliinkin hetkeksi.

Sparkfun ESP8266 Thing + DS18B20 kytkentäkaavio

Kämppiksen vaimo vastaanotti paketin tiistaina 16.2.2016 ja minä tietenkin töihin lähtiessä otin paketin mukaan. Jonkin aikaa töitä tehdessä alkoi into kolvailuun. Sain kolvattua Arduino headerin ohjelmointikortin liittämistä varten kun minun kolvini hajosi.

Sitten juttelin hetken Markon kanssa ja tultiin siihen päätökseen, että käyn hänen luonaan pikaiseen kolvaamassa kytkennän ennen Hacklab miittiä. Kolvailu onnistui sujuvasti kun kunnon juotin. En minä pistäisi noin 300 euroa juottimeen.

P.S. Pistettiin Hacklab miitissä yhteisökeskuksella tavaraa muutto valmiiksi.

Miitin jälkeen tulin kotiin. Joskus aikoinaan on tullut Arduinoa ohjelmoitua, mutta jostain syystä IDE oli koneeltani hukassa. Meni pari tuntia Arch Linuxissa, että sain tuon Arduino IDE:n asennettua. Sen jälkeen tietenkin varmistin, että ohjelman lähettäminen onnistuu pistämällä Sparkfunin sivuilta löytyvän Blink koodin pyörimään.

Jonkun aikaa koodailtuani tulin taisin saada lämmön mittaamisen toimintaan.

#include 

#define ESP8266_LED 5
#define DS18B20 0

OneWire oneWire(DS18B20);

void setup() 
{
  pinMode(ESP8266_LED, OUTPUT);
}

void loop() 
{
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if (!oneWire.search(addr)) {
    oneWire.reset_search();
    delay(250);
    return;
  }

  if(OneWire::crc8(addr, 7) != addr[7]) {
    return;
  }
  Serial.println();

  switch (addr[0]) {
    case 0x10: // Chip = DS18S20
      type_s = 1;
      break;
    case 0x28: // Chip = DS18B20
      type_s = 0;
      break;
    case 0x22: // Chip = DS1822
      type_s = 0;
      break;
    default: // Device is not a DS18 family Device
      return;
  }

  oneWire.reset();
  oneWire.select(addr);
  oneWire.write(0x44, 1);

  delay(1000);
  
  present = oneWire.reset();
  oneWire.select(addr);
  oneWire.write(0xBE);

  for (i = 0; i < 9; i++) {
    data[i] = oneWire.read();
  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if(cfg == 0x20) raw = raw & ~3;
    else if(cfg == 0x40) raw = raw & ~1;
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;

  for(i = 0; i < (int)celsius; i++) {
    digitalWrite(ESP8266_LED, HIGH);
    delay(500);
    digitalWrite(ESP8266_LED, LOW);
    delay(500);
  }
  delay(2000);
}

Tuossa on siis tämän hetkinen koodipätkä jota debuggaan seuraavalla Youtube videolla.

Kirjoitan projektista tänne lisää kun saan ohjelmoitua lämpötilan lähettämisen palvelimelle. Kuten videolla sanon, en jaksa ohjelmoida juuri nyt enempää. Kello on 2:33 ja päätän tältä yöltä tämän proggiksen tähän. 😉

Edit: 24.02:

Jäänyt kirjoittamatta loput kun Hacklabin WordPress vähän sekoillut. Jos huomaatte poistin vahingossa kaikista artikkeleista kuvatkin.

Seuraava lähdekoodi pyörii itse ESP8266 Thingissä.

#include 
#include 

#define ESP8266_LED 5
#define DS18B20 0

OneWire oneWire(DS18B20);

const char WiFiSSID[] = "SSID";
const char WiFiPSK[] = "PSK";

const char Host[] = "Hostname";
const int Port = 443;
String Sensor = "SparkfunESP8266+DS18B20+1";
const char* fingerprint = "86 A5 43 FB 57 17 94 6D 5E F3 84 BD 5B 3C 33 C5 2C 68 1F 4A";

const int toSeconds = 1000000;

void setup() {
  pinMode(ESP8266_LED, OUTPUT);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(WiFiSSID, WiFiPSK);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if (!oneWire.search(addr)) {
    oneWire.reset_search();
    delay(250);
    return;
  }

  if(OneWire::crc8(addr, 7) != addr[7]) {
    return;
  }
  Serial.println();

  switch (addr[0]) {
    case 0x10: // Chip = DS18S20
      type_s = 1;
      break;
    case 0x28: // Chip = DS18B20
      type_s = 0;
      break;
    case 0x22: // Chip = DS1822
      type_s = 0;
      break;
    default: // Device is not a DS18 family Device
      return;
  }

  oneWire.reset();
  oneWire.select(addr);
  oneWire.write(0x44, 1);

  delay(1000);
  
  present = oneWire.reset();
  oneWire.select(addr);
  oneWire.write(0xBE);

  for (i = 0; i < 9; i++) {
    data[i] = oneWire.read()
  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if(cfg == 0x20) raw = raw & ~3;
    else if(cfg == 0x40) raw = raw & ~1;
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;

  for(i = 0; i < (int)celsius; i++) {
    digitalWrite(ESP8266_LED, HIGH);
    delay(500);
    digitalWrite(ESP8266_LED, LOW);
    delay(500);
  }

  WiFiClientSecure client;
  if (!client.connect(Host, Port)) {
    return;
  }

  if (!client.verify(fingerprint, Host)) {
    return;
  }

  String url = "/insert.php?table=temperatures&from=" + Sensor + "&temperature=" + celsius;

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                "Host: " + Host + "\r\n" + 
                "Connection: Close\r\n\r\n");
  delay(10);
  
  digitalWrite(ESP8266_LED, HIGH);
  delay(500);
  digitalWrite(ESP8266_LED, LOW);
  delay(500);

  if (celsius < 20.0) {
    ESP.deepSleep(600 * toSeconds);
  } else {
    ESP.deepSleep(30 * toSeconds);
  }
}

void loop() {
  
}

Jos huomaat kaikki koodi on siirtynyt setup() funktioon ESP.deepSleep() funktio kutsun takia. ESP.deepSleep on ESP8266 Thingille ominainen syväuni joka vähentää virran kulutusta. Ja lähetän Temperaturen palvelimelle HTTP GET kutsulla. NGINX palvelimella pyörii PHP seuraava PHP scripti.

<?php

$database_location = "database/";

if(!is_dir($database_location)) {
        mkdir($database_location, 755);
}

$database = $database_location . $_GET['table'];
$table = json_decode("[]", true);

if(file_exists($database)) {
        $table = json_decode(file_get_contents($database), true);
}

unset($_GET['table']);

$_GET['created'] = date("d-m-Y H:i:s");
array_push($table, $_GET);

$table = json_encode($table, JSON_PRETTY_PRINT);
file_put_contents($database, $table);

?>

Tämä PHP scripti tallentaa vastaanotetun lämpötilan JSON tiedostoon, josta voin myöhemmin lukea lämpötila arvon.

ESP8266 + DS18B20 langaton lämpömittari

Olen vähän niputtanut DS18B20 johtoa, koska se on tällä hetkellä niin paljon tiellä. Se on pari metriä pitkä saunaa varten. Seuraavaksi tarvis tehdä tuolle kotelo ja päästään asentamaan se saunaan.

Porissa taidetaan muuttaa.

Kävin Atten kanssa äsken Yhteisökeskuksen tiedotustilaisuudessa kuuntelemassa mikä on kivitalon kohtalo. Tiedotuksesta jäi itselle muutama asia mieleen.

  1. Korjauksesta ei ole vielä päätetty.
  2. Ei kannata odottaa korjauksen valmistuvan tänä vuonna.
  3. Mahdollisuus olemassa, että kivitaloa ei korjata.
  4. Tavaroiden siirtäminen kivitalosta jäi vähän epäselväksi.
  5. Väistötiloja ehkä tarjotaan, ainakin varastoja.

Pessimistinä tuota listaa lukiessa ajattelen, että Pori Hacklab voi alkaa etsimään uusia tiloja. Ymmärrän, että uusien tilojen etsintä kaipaa kaikilta panostusta ehkä enemmän kuin henkilökohtaisesti on tarve. Toivon kuitenkin suurella sydämmellä, että toimintamme ei tämän takia lopu tai jää vain nörttien olut kesteiksi.

Toivon Atten tiedottavan paremmin miten saamme kaiken tavaran Kivitalon tiloista. Jos ymmärsin oikein muutto laatikoita tarjoaa Yhteisökeskus ja kevät siivous on suositeltavaa joten romulava tulee paikalle. Mitä tulee tuohon epäselvyyteen tavaroiden siirtämisestä itselle. Jos kivitaloon ei saa mennä miten pääsemme huoneeseen ja varastoomme käsiksi kantaaksemme tavaramme pois?

Onko se sitten niin, että 16.2.2016 keskustelemme asiasta paremmin?

Pori Hacklab miitti 2.2.2016 ei ole yhteisökeskuksella.

Valitettavasti vasta 10.2.2016 saamme tietää, mitä yhteisökeskuksen kivitalon vesivahingon kanssa on käynyt ja mitä toimenpiteitä tullaan tekemään.

Keskustelin tuossa Atten kanssa kun hän yhteisökeskuksella palaveeraamassa, mutta mitään päätöstä ei taida tänään vielä tapahtua. Atte kertoi, että Hacklabin tiloihin pystyy ainakin tällä hetkellä kulkemaan vaikka osa kivitalosta on suljettu.

Tiedotustilaisuus 10.2.2016 12:30 puutalossa, kuten Tapio jo eilen ilmoitti.

Pori Hacklab miitti ei ole 2.2.2016 ainakaan kivitalossa. Otetaan ehdotuksia vastaan missä tavattaisiin.

Pikkunen AVR-piirien fuse-resetointilaite

Aina sama juttu!

Meinaan tehdä laitteen pitkästä aikaa läpijuotoskomponenteilla. Jaa eipä löydy sitä eikä tätä, mut pintaliitoksena on…
Ja tulee korvattua lopulta kaikki osat pintaliitoksilla. Eikä sitä protolevyäkään viittisi paljoa tuhlata…
Lopputulos; pieni kuin mikä. Ja jos tulee vikaa, niin voivoi. Mutta tällä kertaa sentään onnistui!

Eli kyseinen laite nollaa AVR-piirien fuset, jos on vaikka vahingossa säätänyt ulkoiseen kelloon(jota ei löydy laatikosta).

http://homepage.hispeed.ch/peterfleury/avr-hvsp-fuse-restore.html

Itse tarvitsin sitä kun tein 8-bittisen Nintendon pelikasetteihin Attiny13-pohjautuvaa ”AVRCIC”-piiriä isompia määriä, ja väkisin jotkut niistä vaan ei toiminut millään.

12620943_10208348582581698_1715585093_o

Hacklab 19.1.2016 miitti

Tammikuun pakkasillakin saapuu Porin Hacklabiin porukkaa ja kaikki puuhaa jotain. Pari häkkeriä puuttu kuvista kun yks kävi naapuri kaupast hakee pullaa ja toinen kahvinkeittimen alakerran keittiöstä.

20160119_185346
20160119_185339
20160119_185342

Itsestäni en kuvia ota. 😉 Nyt on kahvi tippumassa ja kaikki puuhaa jotain ja keskustelu käy kovaa vauhtia. Minä kirjoitan tätä blogia ja toivottavasti kirjoittelen tästä lähtien tänne vähän enemmän juttuja.

Atte piirtää paperille. En mä vaan jaksais.

20160119_191154

Jotain piirilevy proggista.

Hacklab 24.11.2015 Piirilevyn valmistus kotikonstein.

Olipa hyvä miitti tällä kertaa! Porukkaa saapui mukavasti paikalle ihmettelemään kun Timo Kakko tuli esittelemään piirilevyn valmistus tietoa ja taitoa.

Ei siinä pitkään nokka tuhissut kun oli laitteet käytössä ja ensimmäisen piirilevy oli valmistumassa.

15110040

Tämä oli mukavaa katseltavaa kun syövytettiin kuparia pois.

15110043

Hetken päästä alkoi levyjä olemaan valmiina. Isoin on Marko Hämäläisen itse piirtämä.

15110059

Täältä näkyy lisää päivällä räpsittyjä kuvia.