Kategori HAL9k

03 okt

0 Comments

Postkasse overvågning

Af

I dagens danmark hvor stort set alt hvad vi modtager af post foregår via digital post (E-boks) er det ikke så tit der kommer post i postkassen (med mindre man får mange små Kina pakker 😉 ) så for at undgå at hele tiden når jeg tjekker postkassen om der er noget eller ikke og så finder den tom. Bestemte jeg mig for at lave så jeg får en E-mail når der er nogen der åbner lågen til postkassen.

Så var spørgsmålet hvordan det skulle laves, det skulle være trådløst(WiFi), være fri for transformer/dc adapter da jeg ikke ville til at trække en ledning ud til postkassen!! Så derfor blev valget af microprocesser en ESP8266 ESP-12, da den allerede var klar til WiFi og skal bruge en spænding på ca 3.3 volt kan dog fint fungere på 4 volt, hvilket så også løste problemet med strøm der til, da jeg havde et par stykker af 18650 batterier til at ligge fra en gammel bærbar’s batteri.

Efter lidt oplæsning på ESP8266 funktioner på Github (Arduino core for ESP8266 WiFi chip), fandt jeg frem til funktionen ESP.deepSleep(microseconds, mode) hvor man kan putte EPS8266 i sleep mode indtil at GPIO16 er forbundet til RESET, denne funktion er smart da der så bruges så lidt strøm som over hoved muligt når den ikke sender data. I samme omgang fandt jeg ud af at man kan bruge den ADC(analog in) ben til at måle spændingen den får. Men for at det ville fungere skal ESP8266 omkonfigurere dens ADC hvilket gøres ved at putte “ADC_MODE(ADC_VCC);” øverst i koden. Så kan funktionen ESP.getVcc() bruges til at få spændingen i milivolt.

ESP8266’en blev placeret på et fumlebræt og forbundet til en FTDI så den kunne programmeres, og med en knap til at putte den i flashmode. Så skulle softwaren laves så den kunne sende en mail, så derfor tog jeg udgangs i en Arduino Ethernet sketch der sender en mail via smtp(non-SSL). Grundet at det kun virker med non-SSL smtp server kunne jeg ikke bruge min Hotmail til at sende mailen med da den kræver SSL eller TLS, men så faldt jeg over man med en Gmail kan sende en mail til sig selv eller anden Gmail ved at bruge “aspmx.l.google.com” som server med port 25 (link til kilde). De 2 før nævnte funktioner blev ind opereret i sketchen som var blevet ombygget til ESP8266, Så hver gang ESP8266 starter op sender den en mail til min gmail, og går der efter i sleep mode til at GPIO16 bliver sat til RESET.

Mailen der kommer ser sådant ud.

Mailen der modtages.

Mailen der modtages.

Efter at jeg havde testet at alt fungerede som det skulle, ville jeg til at lave et print som kunne holde alle komponenter så det blev pænt og overskueligt, men for at kunne lave det måtte jeg først lave et nyt eaglecad library da jeg ikke kunne finde en library for 3 af de komponenter jeg ønskede at bruge, ESP8266 ESP-12 monteret på breakout board, Dual 18650 batteri holder og en 18650 batteri charge modul.

Nu kunne der så laves et diagram over hvordan det hele skulle forbindes

esp-postkasse_schematic

Ud fra dette diagram blev der lavet en board fil på 90×80 mm hvor alt blev presset ind på

esp-postkasse_board

Da board filen var blevet færdig skulle der jo fremstilles et PCB, hvor jeg lavede en gcode fil med “pcb-gcode” et ulp script for at kunne fræse printet på vores Bundgaard cnc fræser. Det blev til 3 gcode filer, en med til fræsning med v-bit til alle banerne, en med alle huller og en til at skære PCB’en fri af en større plade.

For at få en pænere PCB valgte jeg at fjerne alt overskydende kobber med en hobbykniv ved at trække det af.

PCB efter overskyende kobber fjernelse og lodning.

PCB efter overskyende kobber fjernelse og lodning.

Nu kunne alle komponenterne så blive loddet på PCB’en. Samt microswitch (NC) sat på en 2 ledet ledning med dupon stik.

esp-postkasse-printtop

Komplet komponent liste:

  • ESP8266 ESP-12 på breakout board
  • Dual 186500 batteri holder
  • 2 18650 genbrugsbatterier
  • 18650 charge controller modul
  • en on/off kontakt
  • 2 trykknapper (til reset og flash mode)
  • 14 (6+2+6) male pin header
  • 16 (8+8) female pin header
  • PCB power jack

Klar til montering i postkassen. Det eneste der mangler nu er en 3D-printet boks der skal beskytte PCB’en og dens komponenter mod fugt og noget der kan falde ned og kortslutte noget!

Så nu er det slut med at kigge forgæves i postkassen!

Hvis du vil have eagle filer og koden til esp8266 kan de hentes her.

31 aug

0 Comments

Measuring high DC supply voltage with an Arduino

Af

For my home-monitoring setup I would like an Arduino to measure the supply voltage it is getting from a DC battery UPS (Uninteruptible Power Supply). Unfortunately (actually by design, but that’s another story), the power supply is 24V, which means it will put out anywhere from 21.3V-29.8V (according to the manufacturer), which is far too much to measure with the Arduino’s 0-5V input range. For simplicity’s sake, lets assume we want to measure a 20-30V voltage. The immediate answer is to use a voltage divider, which will bring a voltage in the 0-30V range into the 0-5V range. The general formula for the resistor divider is:

    \[V_{out} = \frac{R_2}{R_1+R_2} \cdot V_{in}\]

We want V_{in} = 30 to give V_{out} = 5, so

    \[\frac{5}{30} = \frac{R_2}{R_1+R_2}\]

resistordivider Now, just as a sanity check we should calculate the current of the resistor divider, to make sure we’re not converting too much electricity into heat. Ohm’s law gives us

    \[ I = \frac{U}{R}\]

which in this cases gives

    \[ I = \frac{30}{12000} = 0.0025 A = 2.5 mA\]

No problems there. This works okay, but we lose a lot of precision, as only ~1/3 of the Arduino’s range is actually used: the Arduino’s ADC has 1024 different readings between 0-5V, so when reading the 0-30V range the precision is just about 30V / 1024 \approx 0.03 V over the range. If only we could move the lower bound, so that 20V would map to 0V on the Arduino. A wild Zener Diode appears! One use of a Zener diode is as a voltage shifter. voltageshifter Zener diode voltage shifter. This work is licensed under the Creative Commons Attribution 3.0 License, https://en.wikipedia.org/wiki/File:VoltageShifter2.png. The closest Zener diode I could find was an 18V of the BZX79 series. This resulted in the following circuit: zener-voltage-divider which I hacked into my Arduino box. Hacked supply monitoring Now, theoretically the formula for translating an voltage at the Arduino to the supply voltage should be:

    \[Vcc = V_{in} / (4700/(4700+6800)) + 18 = V_{in} \cdot 2.4468 + 18\]

I then did some quick measurements of various input voltages and the resulting voltage at the Arduino pin:
Input voltage Arduino pin
18V 0.32V
20V 1.16V
26V 3.60V
28V 4.41V
29V 4.81V
Plot it into a spreadsheet, create a graph and add a linear regression gives: Now, this formula is a bit different compared to the theoretical one, mainly in the Zener diode drop. However, the datasheet for the BZX79 actually has the 18V C-type (\plusminus 5\%) as between 16.8-19.1V, so this is well within spec. Since this is just a one-off, I’m happy to just use the measured formula, as this will be more accurate. The final precision should be 12V / 1024 = 0.012V. The current should be around I = \frac{U}{R} = 30V/11500 Ohm \cdot 1000 \frac{mA}{A} = 2.6mA, which again is ok.

Gemt under: Extern, HAL9k

Tags: ,

04 aug

0 Comments

Arbejdsweekend stor succes

Af

Arbejdsweekenden blev en stor succes. Der blev lavet følgende:

  • Krydsfelt flyttet fra rackskab til væghængt skab.
  • Bundgard flyttet fra det tidligere protolab til det tidligere server rum, nu cnc rum.
  • Værkstedet er blevet delt op i træ og metal, hvor metal nu er i det tidligere protolab.
  • Lavet stativ til opbevaring af trælasten.
  • 3D printerne er flyttet til hjørnet af fællesrummet.
  • Overskydende bordplade fra protolab er opsat i fællesrummet.
  • Opsat pc til generation af gcode til 3D printerne, står på den før nævnte bordplade.
  • Oprydning i hele spacet.

DSC_0330

DSC_0332aDSC_0336aDSC_0340a
Der kan ses flere billeder fra weekenden på vores facebook side her og her.

21 jul

0 Comments

Få liv i hjemmesiden

Af

Som du jo nok ved så har der været længe i mellem indlæg/opslag her på vores hjemmeside. Derfor vil jeg godt opfordre alle medlemmer af hackerspacet til at lave et indlæg med jeres projekter (eller andet relevant), hvor du kan fortælle dine erfaringer og problemstillinger, samt fortælle dem der har fulgt lidt med på sidelinjen om hvad dit projekt handlede om. Det kunne jo give inspiration for nogen til at lave det samme eller lignende.
Alle indlæg her på siden bliver automatisk delt på vores Facebook side.
Desuden må man tage en gratis sodavand i hackerspacet, hvis man laver et godt indlæg til hjemmesiden.

Er du i tvivl om hvordan du får en bruger så du kan lave indlæg på hjemmesiden, så er det beskrevet hvordan på vores wikiside. Der er desuden også lavet en video om hvordan du laver et indlæg hvis du skulle være i tvivl.

For at du kan udgive dit indlæg skal du gøres til forfatter, det bliver du ved at gøre en af de administratorer på hjemmesiden opmærksom på at du har lavet en bruger. Så tænker du nok hvem er så administrator på hjemmesiden, det kan du se på selv samme wikiside som før.

Opfordringen gælder også for at få holdt vores wiki opdateret.

En opdateret og vedligeholdt hjemmeside giver et godt indtryk for nysgerrige som vil prøve at finde ud af om hackerspacet Hal9k er noget for dem.

Så opret en bruger I DAG og lav et indlæg i morgen!

16 jul

0 Comments

Arbejdsweekend

Af

Der har været snak om en at vi skal have en arbejdsweekend hvor der blandt andet skal flyttes krydsfelt og maskinerne i værkstedet skal flyttes ind hvor bundgaaren er som så skal flyttes ind i serverrummet.
For at finde ud af hvornår der er flest folk der kan komme og give en hånd med har jeg lavet en doodle hvor man kan skrive sig på med hvornår man kan.
Det kan gøres på følgende link http://doodle.com/3y5gwh5yyqpcm8u9

Gemt under: Events, HAL9k

17 jun

0 Comments

Roomba 500-series Easy Scheduling using an Arduino

Af

DSC_0879
I have a iRobot Roomba 500-series vacuum cleaner robot, but without any remote, or command center or anything; alas, I have to push a button everytime I want the cleaning revolution to start :-(

But no more! It turns out the Roomba can be programmed, quite easily, to schedule automatically, and all you need is:

  • 1 Arduino
  • 2 wires

The Roomba actually supports a serial protocol, the iRobot Roomba 500 Open Interface Specification, that allows remote control, driving, sensoring, and scheduling.

Finding the serial port

Remove the plastic cover. It is easiest to remove the vacuum bin, and carefully pry it off with a screwdriver.
DSC_0882DSC_0884

There should be a 7-pin plug, on the right side. It has the following pinout:

Roomba serial pinout

Roomba serial pinout

Program the Arduino

Use this sketch (download: roombaschedule.ino):


/*
Set a schedule on an iRobot Roomba 500 series, using just an Arduino.
Mads Chr. Olesen, 2015.
*/

const byte currentDay = 3;
// 0: Sunday, 1: Monday, 2: Tuesday, 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday
const byte currentHour = 2;
const byte currentMinute = 58;

// Schedule
const byte SUNDAY = 0x01, MONDAY = 0x02, TUESDAY = 0x04, WEDNESDAY = 0x08, THURSDAY = 0x10, FRIDAY = 0x20, SATURDAY = 0x40;

const byte daystorun = SUNDAY | MONDAY | WEDNESDAY | FRIDAY;
const byte times[14] = {
3, 0, // Sunday time
3, 0, // Monday time
3, 0, // Tuesday time
3, 0, // Wednesday time
3, 0, // Thursday time
3, 0, // Friday time
3, 0, // Saturday time
};

const int ledPin = 13;

void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, 0);

Serial.write(128); //Start
delay(1000);
Serial.write(131); //Safe mode, turns off Roomba light
delay(1000);
Serial.write(128); //Start, back to passive mode
delay(500);

//Set day time
Serial.write(168);
Serial.write(currentDay);
Serial.write(currentHour);
Serial.write(currentMinute);
delay(500);

//Set schedule
Serial.write(167);
Serial.write(daystorun);
for (int i = 0; i < 14; i++) {
Serial.write(times[i]);
}
}

void loop() {
digitalWrite(ledPin, 1);
delay(1000);
digitalWrite(ledPin, 0);
delay(1000);
}

You need to modify the variables at the top: set currentDay, currentHour, currentMinute according to the present time.
The pre-programmed schedule is to clean at 03:00 on Sunday, Monday, Wednesday and Friday. You can change this if you wish, by altering the daystorun and times variables.

If you don't modify the schedule, the Roomba should start automatically after 2 minutes.

Put it all together

You should now have a partially undressed Roomba, and a programmed Arduino. Now it is time to connect them. With both unpowered, connect the following:

  • Arduino GND to Roomba ground (pin 6)
  • Arduino TX (pin 1 on e.g. Uno) to Roomba RX (pin 3)

It should look like this:

DSC_0886

Now, the moment of truth. Press the "CLEAN" button on the Roomba, the light should go on. Plug in the USB for the Arduino. The Roomba light should turn off briefly, and after a few seconds the Arduino should blink it's LED. The schedule is now programmed, all done!

Gemt under: Extern, HAL9k

Tags: ,