lass dich verzaubern von der Magie der Phantasy…
Pizza V2
neues Rezept 🙂
2 Bleche, 500g Mehle
– Buchweizenmehl 180g
– Reisvolkornmehl 180g
– Maisstärke 100g
– Braunhirsemehl 40g
– Wasser 360ml
– 1Tüte Weinstein-Backpulver
– eine Gute Priese gemahlene Flohsamenschalen (Pulver)
Umluft 190°C
auf unterster Schiene 15-20min
funny plastic material…
did you know there is a plasict material that melts at about 60°C ?
the official name / main ingredient is
Polycaprolacton (PCL) (wikipedia: de en)
product names i found:
- Polymorph
- InstaMorph
- Plaast Kunststoff (de shop) (i used this one)
- Gorilla Plastic (link:wayback)
the challeng is to get a good water bath in the right temperature.
so for this i reused my HotPlate SMD soldering hardware.
created a profile that just heats to 60°C and waits…
i will add some pictures and experiment results here in some days 😉
Arduino Light-Barrier with TSOP4438
you just want to build a Light-Barrier (DE: Lichtschranke) ?
for example to measure speed? Or Count goals on a Table-Top-Football?
then you are at the right place.
We use a TSOP4438 as Receiver and some 5mm IR-LED as Sender.
the code
IR_TSOP4438_light_barrier_withDebounce/ir_light_barrier.ino
// based on
// Example of modulating a 38 KHz carrier frequency at 500 Hz with a variable duty cycle
// Author: Nick Gammon
// Date: 24 September 2012
// https://forum.arduino.cc/t/how-to-create-a-38-khz-pulse-with-arduino-using-timer-or-pwm/100217/44
// tweaked for TSOP4438
// https://www.vishay.com/docs/82459/tsop48.pdf
// find max burst length and min gap times:
//
// Minimum burst length 10 cycles/burst
// After each burst of length 10 to 40 cycles
// a minimum gap time is required of ≥ 10 cycles
// Maximum number of continuous short bursts/second: 1500
//
// translates to:
// 38kHz = 26,3 us / Pulse → *10= 263us
// max burst length: <= 1052us (26,3*40)
// min gap length: >= 263us (26,3*10)
// total cycle time of (1052+263=) 1315us
// that violates the max bursts/second (666us/burst)
//
// on option is to optimize for the most bursts/second:
// so we use the min gap time as given and use the rest of the available time.
// 666us - 263us = 403 us burst length
// hopefully this way the AGC does not filter our stream...
// we now have to fit this to the best available prescaler / counter values:
// 672us fits good (this way we have less than the 1500 burst)
// this translates to 42 counts a' (0,0625us*256=) 16us
// so we use a gap length of 16us*17 = 272us
// this gives us a burst length of 16us*(42-17)= 400us
//
// second option is to optimize for the longest burst length and have less bursts/second.
// here we will use a in-between leaning towards longer bursts:
// 0,0625us*256=16us
// 16us*50counts = 800us = 0,80ms = 1250,00Hz = 1250bursts/s
// 16us*80counts = 1280us = 1,28ms = 781,25Hz = 781,25bursts/s
// gap length: 16us*17 = 272us
// burst length: 16us*(80-17) = 1008us
// http://www.gammon.com.au/forum/?id=11504
// Timer 1
// OC1A: D9
// OC1B: D10
const byte LED = 9;
// Timer 2 (8bit)
// OC2A: D11
// OC2B: D3
// Clock frequency divided by 38 kHz frequency desired
const long timer1_OCR1A_Setting = F_CPU / 38000L;
// (16000000 / 38000) = 421,05
// this only works on Timer 1 - as it is a 16bit timer.
// ------------------------------------------
// in-between - leaning for longer bursts
// target counts:
// CPU 16MHz (0,0625us)
// prescaler 256
// target 781kHz (1280us = 1,28ms)
const long timer2_top = (F_CPU / 256L) / 781L;
// (16000000 / 256) / 781 = 80
// calculate on / off ratio (toggle point)
const long timer2_compare = timer2_top * 1008L / 1280L;
// 80 * 1008 / 1280 = 80 - 17 = 63
volatile bool sender_active = false;
ISR (TIMER2_COMPA_vect) {
// used to combine the two timers...
if (sender_active == false) {
// enable timer1 output
TCCR1A |= bit(COM1A0) ; // Toggle OC1A on Compare Match
// digitalWrite (LED_BUILTIN, HIGH);
sender_active = true;
} else {
sender_active = false;
// disable timer1 output
TCCR1A &= ~bit(COM1A0) ; // DO NOT Toggle OC1A on Compare Match
digitalWrite (LED, LOW); // ensure off
// digitalWrite (LED_BUILTIN, LOW);
}
}
void lightBarrierSender_setup() {
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
// set up Timer 1 - gives us 38.095 KHz
TCCR1A = bit (COM1A0); // toggle OC1A on compare
TCCR1B = _BV(WGM12) | _BV (CS10); // CTC to OCR1A, No prescaler
OCR1A = (16000000L / 38000L / 2) - 1; // zero relative
// setup Timer 2
TCCR2A = 0;
TCCR2B = 0;
// toggle OC2A on compare
// TCCR2A |= bit(COM2A0);
// fast pwm to OCR2A
TCCR2A |= bit(WGM21) | bit(WGM20);
TCCR2B |= bit(WGM22);
// prescaler 1024
// TCCR2B |= bit(CS22) | bit(CS21) | bit(CS20);
// prescaler 265
TCCR2B |= bit(CS22) | bit(CS21);
// top
OCR2A = timer2_top - 1; // zero relative
// switch point
OCR2B = timer2_compare - 1; // zero relative
// enable interrupts
TIMSK2 = bit(OCIE2A);
// TIMSK2 = bit(OCIE2B) | bit(OCIE2A);
}
/IR_TSOP4438_light_barrier_withDebounce/IR_TSOP4438_light_barrier_withDebounce.ino
// simple light barrier test
unsigned long debounceDuration = 10;
const byte beam1Pin = 2;
bool beam1State = LOW;
bool beam1StateLast = LOW;
unsigned long beam1Timestamp = 0;
const byte beam2Pin = 3;
bool beam2State = LOW;
bool beam2StateLast = LOW;
unsigned long beam2Timestamp = 0;
void setup(){
Serial.begin(115200);
Serial.println("IR_TSOP4438_light_barrier");
Serial.println("setup...");
pinMode(beam1Pin, INPUT);
pinMode(beam2Pin, INPUT);
lightBarrierSender_setup();
Serial.println("running.");
}
void loop() {
beam1_check();
beam2_check();
}
void beam1_check() {
bool beam1Current = digitalRead(beam1Pin);
if(beam1Current != beam1StateLast) {
beam1Timestamp = millis();
}
if ((millis() - beam1Timestamp) > debounceDuration) {
// egal welcher wert - dieser ist länger als debounceDuration da!
// check for state change
if(beam1Current != beam1State) {
beam1State = beam1Current;
if(beam1State) {
Serial.println("beam1 brock...");
}
}
}
beam1StateLast = beam1Current;
}
void beam2_check() {
bool beam2Current = digitalRead(beam2Pin);
if(beam2Current != beam2StateLast) {
beam2Timestamp = millis();
}
if ((millis() - beam2Timestamp) > debounceDuration) {
// egal welcher wert - dieser ist länger als debounceDuration da!
// check for state change
if(beam2Current != beam2State) {
beam2State = beam2Current;
if(beam2State) {
Serial.println("beam2 brock...");
}
}
}
beam2StateLast = beam2Current;
}
or just download this arduino sketchbook:
deep dive into the details
To get the TSOP4438 to work we need to send a 38kHz Modulated Signal from the LED. the catch: the receiver is designed to ignore CONTINUOUS signals – that is the way to also reject all the Disturbance from surrounding things like Fluorescent Lamps or other things…
therefore we need to modulate again the 38kHz signal:
so that there are times the signal is send and breaks where the beam is off. The timing requirements for this Pattern are described in the Datasheet :
Minimum burst length 10 cycles/burst
After each burst of length 10 to 40 cycles
a minimum gap time is required of ≥ 10 cycles
For bursts greater than 40 cycles
a minimum gap time in the data stream is needed of > 10 x burst length
Maximum number of continuous short bursts/second 1500
To Be continued…
Research:
- https://www.vishay.com/docs/82459/tsop48.pdf#page=6&zoom=250,-155,381
- https://forum.arduino.cc/t/how-to-create-a-38-khz-pulse-with-arduino-using-timer-or-pwm/100217/12
- https://forum.arduino.cc/t/how-to-create-a-38-khz-pulse-with-arduino-using-timer-or-pwm/100217/64
- http://www.gammon.com.au/forum/?id=11504&reply=6#reply6
- http://www.gammon.com.au/forum/bbshowpost.php?id=11504&page=2
- http://www.gammon.com.au/images/Arduino/Timer_2.png
- http://www.gammon.com.au/images/Arduino/Timer_1.png
- https://arduino.stackexchange.com/questions/31187/irremote-send-and-receive-same-arduino
- http://www.righto.com/2010/03/detecting-ir-beam-break-with-arduino-ir.html?showComment=1447463463512#c570784324410264988
Vegane Elisenlebkuchen / Nusstaler
Diesmal war die Challenge *Basische* Leckereien für mich zu Zaubern.
es geht in Richtung Elisenlebkuchen – ich würde es eher als Nusstaler benennen.
Zutaten
die meisten Zutaten habe ich von Rapunzel verwendet.
Zutaten
- 50g Datteln
- 90g Rosinen
- 120g Haselnüsse
- 140g Mandeln
- 60g Cachewkerne
- ca 7g Lebkuchengewürz
- ca 4g Ceylon Zimt
- ein bisschen geriebene und getrocknete Orangenschale
- eine Halbe Zitrone (inkl. Schale!!)
- einen kleinen Schluck Wasser
Zubereitumg
- Datteln kleiner schneiden
- Dateln & Rosinen mit sehr heisem Wasser einweichen
- Nüsse alle zussammen mischen
- hälfte davon in kleinen portionen mit einem Hexler sehr fein mahlen
- zweite hälfte gröber hexeln
- zur Seite stellen
- Datteln & Rosinen Gewürze & die (zerteilte) Zitrone mit einem kleinen Teil des Einweich-Wassers sehr fein Hexeln
- dies gibt eine feine creme
- diese creme mit der Nussmischung verrühren / kneten
- wenn gleichmäßig verknettet für mehrere Stunden Kühl-Stellen
- Ofen Vorheizen: Umluft 140°C
- dann den Teig in kleine Haufen aufteilen
- diese dann zwischen den Handflächen rollen – dadurch entstehen Kugeln die eine glatte Oberfläche haben
- jeweils die Kugel mit dem Handballen flachdrücken (ca 1cm Höhe)
- dann ab in den Backofen (140°C Umluft) – ca 15-20min – leichte bräune = fertig 🙂
- kurz auskühlen lassen
Frisch schmecken sie mir am besten 🙂
ich finde sie sehr gelungen – das nächste mal etwas mehr zitrone und mehr Zimt –
das macht es Frischer und Würziger.. (das Lebkuchengewürz hatte eine starke Nelke-Note..)
Das Konzept des Zweiteiligen Hexelns wie ich es mir beim letzten mal ausgemahlt habe ist aufgegangen.
Gerne wieder 🙂
actual soldering :-)
this morning i did a last test-run with the tweaked Felder ISO-Cream profile:
yeah… at the top i thought it is in the cooling step already and opened the window – with ~3°C cold air from outside it dropped fast..
then i found it is in the middle of the reflow – sorry… and closed the window again – until it really switched to cooling..
the old left-over pcb i use for these is done now.. i comes from my LEDBoard_4x4_16bit project – and if i remember correctly i backed it with the assembled board in the oven multiple times back then..
now grilled it again ~4-7 times. it smells very bad – is super dark discolored.. i think that is ok with about ~12 times solder cycles..
and then started to assemble a simple board to really test the profile 🙂
then reflowed:
i added a paper-lid to have stable air inside..
reflow was successful 🙂
my profile is just a little bit to long for my right angle touch switches:
they melted away 🙁 – lesson learned – have a look in the datasheet and you know that they are very heat sensitive!
in general i have the feeling that my heating elements get a little bit to hot – the pcb also slightly discolored at on place…
so will keep an eye on this and improve it..
Open Points
- add housing
- i would like to have class at the top for a good view what is happening inside..
- metal frame for heating-elements
- quite 5V fan with PWM control for cooling
- maybe quiet! Silent Wings 3 PWM 120 mm
- or similar NOCTUA NF-F12 5V PWM
- add second temperature sensor
- spring thing to hold board down
- way to fix sensor position on board
- more heating elements for bigger working area
- switchable configuration for long or more square pcbs?!
- bigger / second power supply ?! (~750W)
Testing & Tuning the PID
for tuning i followed more or less the tutorial PID Without a PhD
from Tim Wescott
and the tutorial and video from PID Explained Team.
first i just checked with low temperatures of 20..40°C
as i went on and tested up to 260°C i noticed that the current did decrease. and the temperature did not increase any more.
i could see this in my graph as the heating got slower and slower with the rising temperature… (also the pid already saturated at the output..)
so i measured the resistance during the cool down of the heating elements to get some insights:
(4x in series → 48V/4=~12V/Module)
Temperature (°C) | Resistance (Ohm) | Current (A) | Power @48V (W) |
---|---|---|---|
255 | 40 | 1,19 | 57 |
250 | 39 | 1,21 | 58 |
240 | 38 | 1,23 | 59 |
230 | 36 | 1,26 | 60,5 |
220 | 38 | 1,26 | 60,3 |
200 | 34 | 1,35 | 64,8 |
100 | 26 | 1,8 | 88,6 |
80 | 24 | 2 | 96 |
60 | 22 | 2,18 | 104 |
40 | 20,9 | 2,3 | 110 |
25 | 19,5 | 2,46 | 118 |
result: the ~57W is not enough to get to more than 255°C…
i rearranged the Modules into 3-in-series connection.
this means ~16V/Module – and tested again:
Temperature (°C) | Resistance (Ohm) | Current (A) | Power @48V (W) |
---|---|---|---|
255 | 27,5 | 1,45 | 70 |
250 | 27,0 | 1,5 | 72 |
240 | 26,6 | 1,6 | 77 |
230 | 25,6 | 1,67 | 80 |
220 | 25,3 | 1,7 | 82 |
200 | 24,1 | 1,8 | 86 |
100 | 18,8 | 2,1 | 100 |
80 | 17,5 | 2,7 | 130 |
60 | 16,7 | ||
40 | 15,6 | ||
25 | 14,3 |
with this i found that i can go above 255°C.
i then tested the profile for the Felder ISO-Cream “Clear” and found that in the reflow stage the heat-up is a little to slow:
in the *my setup* picture is a temporary cardboard thing with a 80mm 12V fan (connected to 5V) to cool down faster between tests.
for the final setup i think i will buy 1 or two 5V and PWM capable fans….
and also exchange the *chamotte* ston with some metal frame.
this way i also can cool the bottom side..
so i again switch the configuration –
now i have a 2-in-series config: 24V/Module
CURRENTLY THIS TABLE IS ONLY CALCULATED VALUES!!
Temperature (°C) | Resistance (Ohm) | Current (A) | Power @48V (W) |
---|---|---|---|
255 | 20 | 2,4 | 115 |
250 | 19,5 | 2,46 | 118 |
240 | 19 | 2,52 | 121 |
230 | 18 | 2,67 | 128 |
220 | 17,5 | 2,74 | 132 |
200 | 17 | 2,82 | 135 |
100 | 13 | 3,69 | 177 |
80 | 12 | 4 | 192 |
60 | 11 | 4,36 | 209 |
40 | 10,45 | 4,59 | 220 |
25 | 9,75 | 4,92 | 236 |
Temperature / Resistance – 2 Modules in Series – 24V/Module
i also tested this with the Felder profile:
this time the heat-up is fast enough! 🙂
the nice and working pid tuning i had for the 4-in-series arrangement is now out of tune…
so i will have to re-tune it to get less overshoot / swing.
while having a break i thought about the maximal power in this configuration –
and found that this way i only be able to power 2×2 modules with my 250W power supply.
for now i leave it this way. in the long run i hope with the other frame concept i get more heat to the pcb and less into the stone and this way be able to use the 3S config.
Tuning
after a day of mostly waiting til the system cooled down again
– one test cycle <=60°C needs 400s → 6:40min –
i just rebuild my hw mounting setup.
this way i can warm up quicker and cool down much quicker as i do not store heat in the stone. – at least that is what i hope..
hmmm – does not seem to change much..
i then tested the actual Felder Profile:
seems i have a working profile.
i will add a little more time for the prepare phase. so the pcb is really fully at the 50°C. at the top i have a little bit of a mis-match –
i saw on my temp sensor directly connected to the heating elements at the top ~265°C – so that is hot…
the pcb seems to increase its temperature resistance at higher temperatures… at the peak i have 230°C to 245°C error. and to the heating this results in ~35°C difference…
i will report when i solder the first real board. 😉
progress..
there was a response to my request in the forum..
and hw & sw basics done..
the idea & planing
the idea came from this Applied Science Video:
Electroluminescent paint and multi-channel control circuit
21 Nov 2018 starting at 11:25
there is a link to amazon for a element – and it is not available to delivery to germany 🙁
so i went on with some help of friends and found
dimensions | voltage | power | current | resistance (guess) | power@ 6V | power@ 9V | power@ 12V | power@ 24V | link |
---|---|---|---|---|---|---|---|---|---|
70mm x 15mm | 12V | 70W | 5,8A | 2,06R | 17W | 39W | 70W | 280W | HALJIA 12V 70W Wired MCH Metal Ceramic Heating Plate Heating Element 70mm x 15mm |
70mm x 15mm | 24V | 110W | 4,6A | 5,2R | 7W | 15,6W | 27W | 110W | Haljia 24V 110W Wired MCH Metal Ceramic Heating Plate Heating Element 70mm x 15mm |
40mm x 40mm | 12V | 48W | 4A | 3R | 12W | 27W | 24W | 192W | Haljia 12 V48 W Wire MCH Metal Ceramic Heating Plate Heating Element 40 mm x 40 mm |
40mm x 40mm | 24V | 96W | 4 | 6R | 24W | 13,5W | 48W | 96W | Haljia 24 V96 W WIRED MCH Metal Ceramic Heating Plate Heating Element 40 mm x 40 mm |
to get an idea of how much power i actually need i had a look at the small commercial IR-Heaters and Hot-Plates –
they all have about 800W:
180mm * 235mm = 42300 mm² = 423 cm²
a = 60mm * 60mm = 3600 mm² = 48 cm (1x4)
b = 60mm * 80mm = 4800 mm² = 48 cm (2x2)
c = 60mm * 90mm = 5400 mm² = 54 cm² (1x6)
d = 60mm * 120mm = 7200 mm² = 72 cm² (1x8)
e = 120mm * 60mm = 7200 mm² = 72 cm² (2x4)
f = 120mm * 90mm = 10800 mm² = 108 cm² (2x6)
g = 120mm * 120mm = 14400 mm² = 144 cm² (2x8)
423 cm² == 800W
1 cm² == x
x = 800W * 1cm² / 423cm² = 1,89W
a = 800W * 36cm² / 423cm² = ~68W (1x4)
b = 800W * 48cm² / 423cm² = ~91W (2x2)
c = 800W * 54cm² / 423cm² = ~102W (1x6)
d = 800W * 72cm² / 423cm² = ~136W (1x8)
e = 800W * 72cm² / 423cm² = ~136W (2x4)
f = 800W * 108cm² / 423cm² = ~204W (2x6)
g = 800W * 144cm² / 423cm² = ~272W (2x8)
30x40mm: ~23W/module
60x15mm: ~17W/module
then i calculated the resistance of the found element to check on what wattage i can do at what voltages:
U = R*I
P = U*I
→ P = U*(U/R)
(i added these *guesses* in the table above)
So I decided to go with the 70x15mm 24V model.
and will update here if i found how this works out..
and for the first test setup i will go with the concept
12V→ 27W / module
so definitive more then enough..
as power supply i will use a MeanWell GST280A48-C6P
(reichelt) with an fitting connector (reichelt)
to get a 5V for the controller i will go with a recom R-78HB50-05 (VIN: 9-72V)
and for switching the power to the heating elements i will use IRLB4030PBF – MOSFET N-LogL 100V 180A 370W 0,0043R TO220AB
and to drive this a BC 550C as mentioned in this nice article:
Schalten und Steuern mit Transistoren III – Mit MOSFETs höhere Ströme schalten
for temperature measurement i use a Adafruit Universal Thermocouple Amplifier MAX31856 Breakout with an Thermocouple Type-K Glass Braid Insulated – K
and have the plan to use a Melexis IR thermometer
i have ordered a MLX90614ESF-BAA-000-TU
i hope that with this i can precisely track the surface temperature..
so when all the parts arrive i can go on.. with building.
for the Controller i plan to write it in CircuitPython and run it on an adafruit (maybe ItsyBitsyM4) PyBadge –
for now i just want to use the arduino serial plotter or similar with an second CDC-device enabled to log the progress and the flash-drive function of CircuitPython for a text-file with the temperature-profile.
i have written a request in the adafruit CircuitPython forum if there are any PID controller things out there…