Właśnie w dwóch zdaniach to się nie da

No ale spróbuję nakreślić rys:
Na początek pin mikrokontrolera oznaczony jako OC1A należy ustawić na wyjście w stanie wysokim. Stan niski oznacza przewodzenie optotriaka, więc żarówka mogłaby niepotrzebnie mignąć po włączeniu zasilania.
Zakładajmy na razie dla uproszczenia taktowanie 1MHz.
Timer 1 należy skonfigurować do pracy np. w trybie 14: Fast PWM z wartością TOP w ICR1.
Wartość ICR1 powinna trzeba dobrać tak, aby opóźnienie było równe tyle, ile czas od zbocza narastającego impulsu detekcji zera do momentu wyłączenia triaka. Wyłączenie powinno się odbyć nieco przed ponownym zboczem narastającym impulsu detekcji. Myślę, że 200us wyprzedzenia powinno wystarczyć, zbocza są między sobą mniej więcej 10000 taktów, więc 9800 powinno być odpowiednią wartością rejestru ICR1.
Pin OC1A konfigurujemy w tryb non-inverting, czyli tak, aby zerował się po wystąpieniu porównania i ustawiał po "przekręceniu" licznika. Czyli w rejestrze TCCR1A bit COM1A1=1 a bit COM1A0=0.
Wartością rejestru OCR1A regulujemy jasność żarówki. Im mniejsza wartość, tym żarówka będzie świecić jaśniej. Nie należy jednak zaczynać od wartości zero, ponieważ zbocze narastające impulsu detekcji jest nieco przed faktycznym przejściem przez zero, a triaka powinniśmy włączać krótko po przejściu przez zero. Ponieważ nie wiesz jakie jest faktyczne opóźnienie pomiędzy zboczem narastającym impulsu a punktem zerowym sinusoidy, należy dobrać tę wartość doświadczalnie, przy czym lepiej nie schodzić poniżej powiedzmy (dla bezpieczeństwa) 200.
Wartość OCR1A nie powinna też zbytnio zbliżyć się do wartości ICR1, bo wtedy impuls wyzwalający triaka może być zbyt krótki.
Myślę, że wstępnie można ustalić minimalną wartość OCR1A na 1000, a maksymalną na 9500. Później można ewentualnie manipulować tymi wartościami, aby uzyskać pełną regulację. Zawsze lepiej to się robi przy użyciu oscyloskopu.
Do szczęścia potrzebne są jeszcze przerwania.
Pierwsze przerwanie tak jak do tej pory, od zbocza narastającego impulsu detekcji, jednak w nim wykonujemy tylko jedną operację: ustawiamy bit CS10 w rejestrze TCCR1B. To spowoduje wystartowanie timera 1 bez preskalera.
Po doliczeniu do wartości OCR1A pin OC1A załączy triaka.
Drugie przerwanie od przepełnienia timera 1. Tutaj tylko wyłączamy taktowanie timera (zerujemy bit CS10 w rejestrze TCCR1B). Dobrze byłoby też wyzerować rejestr TCNT1. Nie jest to bardo konieczne, ale może trochę poprawi dokładność i powtarzalność czasu załączenia triaka.
Po doliczeniu do wartości ICR1 timer 1 się wyzeruje i pin OC1A wyłączy triaka.
W ten sposób masz rozdzielczość (9500-1000)=
8500 stopni regulacji i tylko dwa przerwania wykonujące się krócej niż Twoje (łącznie nie powinny przekroczyć 100 taktów) i to po jednym razie na każde 10000 impulsów (z czego przez ok. 9900 taktów mikrokontroler będzie się nudził

).
Zanim zaczniesz
sprawdź jednak, czy Twoja biblioteka od DS18B20
nie korzysta czasami z timera 1, bo cały plan na nic. Trzeba będzie wtedy użyć innego timera (pozostają tylko 8-bitowe). Oczywiście byłoby trzeba wtedy zastosować preskaler i odpowiednio przeliczyć wartości opóźnień. Konfiguracja timera też może się nieco różnić.
Z kodem Ci zbytnio nie pomogę, bo z Arduino jakoś nie było mi nigdy po drodze

...no i nie udało się w dwóch zdaniach jak widzisz

Pozdrawiam
Andrzej
PS.
Jako ciekawostkę dodam, że w ten sposób można, korzystając z jednego impulsu detekcji, sterować dwoma niezależnymi obciążeniami wykorzystując tylko jeden timer (mowa o pinie OC1B i rejestrze OCR1B).
No i życzę powodzenia w realizacji algorytmu.