This is typical IPv6 behaviour. The most common way an endpoint acquires an IPv6 address is SLAAC, which uses the prefix allocated to the network together with a local part based on the MAC address of the interface. The predictable local part potentially allows individual users and machines to be traced around the IPv6 Internet, so, to prevent this, the privacy extensions were introduced. Consumer operating systems almost invariably have the privacy extensions enabled, which means the IPv6 address will change regularly.
If you do not want constantly changing IPv6 addresses, you can disable privacy extensions on a machine by machine basis. Another approach, if your router has support, you can run a DHCPv6 server and set the M bit in your RA announcements (which might be done for you if you enable DHCPv6). However, be aware that, by default, Windows will prefer a SLAAC address for outgoing traffic for privacy reasons if it has both a SLAAC and DHCPv6 address. Moreover, there are some devices that will not work with DHCPv6 - notably, Android devices work with SLAAC but not DHCPv6.
IPv6 typically works well in a default configuration. When you start digging deeper, you find that things are very different to IPv4.